[linux][v4l] Umrechnung yuyv zu rgb Performance



  • Hallo community,

    ich habe eine (eigentlich) einfache Frage zu der Umwandlung von Rohformaten wie YUYV, RAW, ... zu RGB-Formaten. Wenn ich z.B. mplayer benutze habe ich mit meiner Webcam am Netbook ein flüssiges Bild, trotz schwachem Netbook (integrierte Webcam).

    Kurz zum Neetbook:
    Intel Atom (ca. 1,6 GHz)
    1GB RAM
    Grafikspeicher wird vom Arbeitsspeicher abgezogen

    Ich habe jetzt aus technischen Gründen ein Programm geschrieben, welches Webcams mit dem v4l-Treiber anspricht. Ich erhalte Bilder im Rohformat YUYV. Umrechnungsmöglichkeiten scheint es im v4l-Treiber nicht zu geben. Ich habe mir deshalb eine eigene Konverterfunktion geschrieben, welche natürlich jeden einzelnen Bildpunkt durchläuft und entsprechende Berechnung für RGB durchführt. Die Webcam selber unterstützt NUR das Format YUYV!! Habe ich überprüft. Die Berechnung eines Bildes dauert mehrere Sekunden.

    Jetzt zur Frage: Wie bekommen es Programme wie mplayer hin, ein gutes fps zu erhalten, wenn sie anscheinend auch reine Umrechnung YUYV -> RGB machen müssen? Gibt es Bibliotheken, die dies einem abnehmen?

    MfG
    mirrowwinger



  • Du kannst die zu v4l2 zugehörige Userspace Bibliothek libv4l zur Bildformatumrechnung nutzen. Diese emuliert die RGB Formate BGR24 und RGB24, falls der Webcam Treiber diese nicht unterstützt.
    An der API ändert sich im Vergleich zur direkten Verwendung von v4l2 faktisch nichts. Du musst nur v4l2_open, v4l2_ioctl, usw. aufrufen anstatt direkt die glibc Syscall-Wrapper zu verwenden.

    Details gibt es hier in der offiziellen Dokumentation: http://linuxtv.org/downloads/v4l-dvb-apis/libv4l.html



  • mehrere sekunden ?
    hast du optimierungsflags an? wenigstens -O3 ?
    ansonsten zeig mal den kritischen code ausschnitt um den du die zeit gemessen hast.


Log in to reply