[announce]: mplayer für PVR350

  • ein einfaches
    mplayer -vo cvidix Eikesdalen.divx
    muss bereits ein Bild bringen:
    MPlayer dev-SVN-r25158-3.3.3 (C) 2000-2007 MPlayer Team
    CPU: Intel Celeron 2/Pentium III Coppermine,Geyserville (Family: 6, Model: 8, Stepping: 6)
    CPUflags: MMX: 1 MMX2: 1 3DNow: 0 3DNow2: 0 SSE: 1 SSE2: 0
    Compiled with runtime CPU detection.


    Playing Eikesdalen.divx.
    AVI file format detected.
    [aviheader] Video stream found, -vid 0
    [aviheader] Audio stream found, -aid 1
    VIDEO: [DX50] 720x432 12bpp 25.000 fps 2697.8 kbps (329.3 kbyte/s)
    Clip info:
    Software: VirtualDubMod 1.5.10.1 (build 2366/release)
    vo_cvidix: No vidix driver name provided, probing available ones (-v option for details)!
    [VO_SUB_VIDIX] Description: Hauppauge PVR 350 YUV Video.
    [VO_SUB_VIDIX] Author: Lutz Koschorreck.

    VDR1: ACT-620, Asus P8B75-M LX, Intel Core i3-3240, 4 GB DDR3 RAM 1600 MHz, passive Geforce GT1030 von MSI, Sandisk 2TB SSD, 2xWinTV DualHD, Atric-IR-Einschalter. SW: Xubuntu 20.04 auf 64GB Sandisk SSD.

    VDR2: Odroid N2+ mit CoreELEC und Ubuntu in chroot, WinTV DualHD

    VDR3: Tanix TX3 mit CoreELEC und Ubuntu in chroot, WinTV DualHD

  • mach mal
    mplayer -v -vo cvidix Eikesdalen.divx
    jetzt wird er gesprächiger.


    vo_cvidix: No vidix driver name provided, probing available ones (-v option for details)!
    vidixlib: PROBING: ivtv
    [ivtv-vid] probe
    [ivtv-vid] Found 10 pci devices
    [ivtv-vid] Found PVR 350
    [ivtv-vid] YUV device found /dev/video48
    [ivtv-vid] old alpha : 0
    [ivtv-vid] GetCap
    vidixlib: ivtv probed o'k
    vidixlib: will use ivtv driver
    vidixlib: Attempt to initialize driver at: 0x80b3730
    [ivtv-vid] init
    vidixlib: 'ivtv'successfully loaded
    [ivtv-vid] GetCap
    [VO_SUB_VIDIX] Description: Hauppauge PVR 350 YUV Video.
    [VO_SUB_VIDIX] Author: Lutz Koschorreck.


    Es könnte sein, dass der ivtv-vidix-Treiber fest auf /video48 programmiert wurde, was bei mehreren Karten eventuell zu Problemen führt. Ist denn der Dekoder /dev/video16 oder musstest Du den schon auf /dev/video17 umstellen?

    VDR1: ACT-620, Asus P8B75-M LX, Intel Core i3-3240, 4 GB DDR3 RAM 1600 MHz, passive Geforce GT1030 von MSI, Sandisk 2TB SSD, 2xWinTV DualHD, Atric-IR-Einschalter. SW: Xubuntu 20.04 auf 64GB Sandisk SSD.

    VDR2: Odroid N2+ mit CoreELEC und Ubuntu in chroot, WinTV DualHD

    VDR3: Tanix TX3 mit CoreELEC und Ubuntu in chroot, WinTV DualHD

  • ne, das device müsste der Treiber eigentlich finden, da gibt es Code:

    Code
    /* Try to find YUV device */
    	unsigned char yuv_device_number = 48, yuv_device = 48 + fb_number;
    	char yuv_device_name[] = "/dev/videoXXX\0";

    VDR1: ACT-620, Asus P8B75-M LX, Intel Core i3-3240, 4 GB DDR3 RAM 1600 MHz, passive Geforce GT1030 von MSI, Sandisk 2TB SSD, 2xWinTV DualHD, Atric-IR-Einschalter. SW: Xubuntu 20.04 auf 64GB Sandisk SSD.

    VDR2: Odroid N2+ mit CoreELEC und Ubuntu in chroot, WinTV DualHD

    VDR3: Tanix TX3 mit CoreELEC und Ubuntu in chroot, WinTV DualHD

  • Vielleicht ist es das Problem, dass meine PVR350 die zweite PVR ist?

    Code
    vidixlib: PROBING: ivtv
    [ivtv-vid] probe
    [ivtv-vid] Found 23 pci devices
    [ivtv-vid] Found PVR 350
    [ivtv-vid] YUV device not found: /dev/video48
    vidixlib: No suitable driver can be found.


    Meine PVR350 hängt ja an /dev/video49

  • wie gerade gepostet, sollte es eigentlich auch mit höheren Nummern gehen. Aber wer weiss, ob der Code richtig funktioniert, oder ob da ein Bug drin ist?? Teste doch mal mit nur der PVR350. Wenn das geht, kannst Du Dir ja mal http://svn.mplayerhq.hu/mplayer/trunk/vidix/ivtv_vid.c?revision=25304&view=markup
    anschauen, ob Du da einen Fehler findest.


    Ich versteh den Code nicht. Wenn die fb_number dazugezählt wird, dann müsste ich ja auch 49 haben (der ivtv framebuffer ist /dev/fb1). Läuft aber mit 48

    VDR1: ACT-620, Asus P8B75-M LX, Intel Core i3-3240, 4 GB DDR3 RAM 1600 MHz, passive Geforce GT1030 von MSI, Sandisk 2TB SSD, 2xWinTV DualHD, Atric-IR-Einschalter. SW: Xubuntu 20.04 auf 64GB Sandisk SSD.

    VDR2: Odroid N2+ mit CoreELEC und Ubuntu in chroot, WinTV DualHD

    VDR3: Tanix TX3 mit CoreELEC und Ubuntu in chroot, WinTV DualHD

  • Da ist ein Fehler drin, muss aber noch etwas gucken, um den zu beheben.
    Nach dem Label "card_found" wird device_name gesetzt. Da ich keine Umgebungsvariable gesetzt habe, wird das auf fb_dev_name gesetzt und das wird oben in der Funktion auf /dev/fb0 initialisiert.


    Ich schau mal...


    edit: Wenn ich "export FRAMEBUFFER=/dev/fb1" vorher setze, findet er das Device und ich hab Bild. :) Das kriegen wir gelöst!

  • prima :]


    wenn Du eine Idee hast, wie das im Code richtig gelöst werden kann, könnte ich es testweise kompilieren. Wenn alles klappt, kannst Du dann ja vielleicht Lutz K. einen patch schicken.

    VDR1: ACT-620, Asus P8B75-M LX, Intel Core i3-3240, 4 GB DDR3 RAM 1600 MHz, passive Geforce GT1030 von MSI, Sandisk 2TB SSD, 2xWinTV DualHD, Atric-IR-Einschalter. SW: Xubuntu 20.04 auf 64GB Sandisk SSD.

    VDR2: Odroid N2+ mit CoreELEC und Ubuntu in chroot, WinTV DualHD

    VDR3: Tanix TX3 mit CoreELEC und Ubuntu in chroot, WinTV DualHD

  • Tjaaa, ich kann zwar programmieren, aber da jetzt mit den PCI-Infos durch die Gegend schieben, da fehlt mir jetzt leider der Überblick... Ich müsste rausfinden, wie man aus dem pciinfo_t des ivtv-Devices die Framebuffernummer ableitet. Äh ja, das wird wohl besser und richtiger, wenn Lutz das macht. :)


    Bis dahin könnte ich ja noch mit der Umgebungsvariablen leben.


    Ich vermute, wenn man ihm die Stelle und das Problem erklärt, ist es für ihn eine 5-Minuten-Sache (oder wie war noch der kürzeste Programmiererwitz: "Ich hab's gleich...").

  • Nebenbei bemerkt: Den Tonausgang der PVR hab ich an den internen CD-in des Mainboards geklemmt und die drei Sound-Klinkenbuchsen an den 6-Kanaleingang meines Verstärkers: AC3-Ausgabe funktioniert prima mit dem mplayer!
    Ach ja, in der mplayer.sh.conf hab ich noch das angepasst

    Code
    AC3AOUT="-ao alsa:device=surround51 -channels 6"


    Vielen Dank noch mal für alles!


    mini.

  • Zitat

    Original von mini73
    Tjaaa, ich kann zwar programmieren, aber da jetzt mit den PCI-Infos durch die Gegend schieben, da fehlt mir jetzt leider der Überblick... Ich müsste rausfinden, wie man aus dem pciinfo_t des ivtv-Devices die Framebuffernummer ableitet. Äh ja, das wird wohl besser und richtiger, wenn Lutz das macht. :)


    Bis dahin könnte ich ja noch mit der Umgebungsvariablen leben.


    Ich vermute, wenn man ihm die Stelle und das Problem erklärt, ist es für ihn eine 5-Minuten-Sache (oder wie war noch der kürzeste Programmiererwitz: "Ich hab's gleich...").


    poste doch mal den ivtv-Abschnitt aus dmesg, der Deine devices enthält. Bei mir ist das

    Code
    [  954.298461] ivtv0: Registered device video1 for encoder MPG (4096 kB)
    [  954.303188] ivtv0: Registered device video32 for encoder YUV (2048 kB)
    [  954.307881] ivtv0: Registered device vbi1 for encoder VBI (1024 kB)
    [  954.308313] ivtv0: Registered device video24 for encoder PCM (320 kB)
    [  954.312863] ivtv0: Registered device radio0 for encoder radio
    [  954.317549] ivtv0: Registered device video16 for decoder MPG (1024 kB)
    [  954.322257] ivtv0: Registered device vbi8 for decoder VBI (64 kB)
    [  954.326974] ivtv0: Registered device vbi16 for decoder VOUT
    [  954.331728] ivtv0: Registered device video48 for decoder YUV (1024 kB)
    [  954.331915] ivtv0: Initialized card #0: Hauppauge WinTV PVR-350


    ich schreib Lutz dann mal ne Mail

    VDR1: ACT-620, Asus P8B75-M LX, Intel Core i3-3240, 4 GB DDR3 RAM 1600 MHz, passive Geforce GT1030 von MSI, Sandisk 2TB SSD, 2xWinTV DualHD, Atric-IR-Einschalter. SW: Xubuntu 20.04 auf 64GB Sandisk SSD.

    VDR2: Odroid N2+ mit CoreELEC und Ubuntu in chroot, WinTV DualHD

    VDR3: Tanix TX3 mit CoreELEC und Ubuntu in chroot, WinTV DualHD

  • Hier ist er:

    Code
    [   28.378392] ivtv1: Registered device video1 for encoder MPG (4096 kB)
    [   28.380270] ivtv1: Registered device video33 for encoder YUV (2048 kB)
    [   28.382159] ivtv1: Registered device vbi1 for encoder VBI (1024 kB)
    [   28.384067] ivtv1: Registered device video25 for encoder PCM (320 kB)
    [   28.385950] ivtv1: Registered device radio1 for encoder radio
    [   28.387865] ivtv1: Registered device video17 for decoder MPG (1024 kB)
    [   28.389769] ivtv1: Registered device vbi9 for decoder VBI (64 kB)
    [   28.391655] ivtv1: Registered device vbi17 for decoder VOUT
    [   28.393535] ivtv1: Registered device video49 for decoder YUV (1024 kB)
    [   28.393603] ivtv1: Initialized card #1: Hauppauge WinTV PVR-350


    Ich hab mir jetzt schon mal ein paar Videos angesehen, klappt richtig gut!


    mini.

  • Moin!


    Ich hab jetzt tatsächlich mal Zeit gefunden, mich ein wenig in Framebuffer einzulesen und hab mal versucht, dem mplayer eine bessere Methode beizubringen, eine PVR350 zu finden.
    Wenn du das übersetzt bekommst, könnte ich es mal testen. Der diff ist gegen die aktuelle trunk-Version 26914.
    (Ich hab mal wieder keine Build-Umgebung zur Hand)


    mini.

  • Moin!


    Im Schlaf ist mir noch eingefallen, dass die Framebuffer-Nummer ja nicht unbedingt was mit dem Device des YUV-Decoders zu tun haben muss (/dev/fb1 <-> /dev/video49 ist Zufall, weil meine PVR350 zufällig der zweite Framebuffer und zufällig die zweite Videokarte ist). Den zweiten Teil von probe muss ich also auch noch überarbeiten, dazu müsste ich heute abend kommen.
    Diesen Gedankenfehler gab's auch schon in der Variante von Lutz.


    mini.

  • ich krieg leider auch einen error beim Kompilieren:

    Code
    ivtv_vid.c: In function `ivtv_probe':
    ivtv_vid.c:554: warning: initialization from incompatible pointer type
    ivtv_vid.c:560: error: parse error at end of input
    ivtv_vid.c:548: warning: unused variable `ivtv_drv'
    ivtv_vid.c:233: warning: unused variable `err'
    ivtv_vid.c:228: warning: unused variable `device_name'
    make[1]: *** [ivtv_vid.o] Error 1
    make[1]: Leaving directory `/usr/src/mplayer-251107/vidix'
    make: *** [vidix/libvidix.a] Error 2

    VDR1: ACT-620, Asus P8B75-M LX, Intel Core i3-3240, 4 GB DDR3 RAM 1600 MHz, passive Geforce GT1030 von MSI, Sandisk 2TB SSD, 2xWinTV DualHD, Atric-IR-Einschalter. SW: Xubuntu 20.04 auf 64GB Sandisk SSD.

    VDR2: Odroid N2+ mit CoreELEC und Ubuntu in chroot, WinTV DualHD

    VDR3: Tanix TX3 mit CoreELEC und Ubuntu in chroot, WinTV DualHD

  • vielleicht gibt es im X-Treiber Mustercode für das detecten des richtigen YUV-devices?

    VDR1: ACT-620, Asus P8B75-M LX, Intel Core i3-3240, 4 GB DDR3 RAM 1600 MHz, passive Geforce GT1030 von MSI, Sandisk 2TB SSD, 2xWinTV DualHD, Atric-IR-Einschalter. SW: Xubuntu 20.04 auf 64GB Sandisk SSD.

    VDR2: Odroid N2+ mit CoreELEC und Ubuntu in chroot, WinTV DualHD

    VDR3: Tanix TX3 mit CoreELEC und Ubuntu in chroot, WinTV DualHD

  • Moin!


    Da hab ich wohl eine Klammer vergessen... ups. :)


    Eigentlich kann das Raussuchen des YUV-Devices so ähnlich laufen wie mit dem Framebuffer. Ab /dev/video48 ein paar durchprobieren und gucken, welcher Treiber sich dahinter verbirgt. Und wenn's passt, dann einfach anhalten.
    Mach ich heute abend mal.


    mini.

  • Moin!


    Da ist tatsächlich was im X-Treiber, was man benutzen könnte. Das muss nur noch so erweitert werden, dass auch wirklich ein ivtv-Device geöffnet wird.


    Das ist das einzige, was mir an der v4l2-API fehlt. Ich hab nirgendwo gefunden, wie man am besten vorgehen sollte, um herauszufinden, was für Video-Devices in einem System sind. Einfach /dev/video0 - /dev/videoXXX durchprobieren fühlt sich eigentlich nicht richtig an. Ich kann mir vorstellen, dass es Leute gibt, die z.B. mit udev o.ä. ihren Devices andere Namen gibt (z.B. /dev/yuv_out0 oder so).
    Wenn ich heute abend zu Hause bin, werde ich mal die v4l-Mailingliste fragen.


    mini.

  • Moin!


    Gestern abend ist mir was dazwischen gekommen, hab aber schon was angefangen. Über's Wochenende bin ich allerdings unterwegs, bin aber zuversichtlich, dass ich nächste Woche was gebacken bekomme.


    Bis dahin,
    mini.

  • Moin!


    Ich hab jetzt mal ein kleines C-Programm geschrieben, dass die installierten Videodevices nach einem ivtv-betriebenem Ausgabegerät mit YUV-Unterstützung abklappert. Es ist noch ein wenig "dirty", funktioniert aber bei mir ohne Probleme. Voraussetzung ist ein 2.6er Kernel mit sysfs, aber da ivtv eigentlich erst so richtig ab 2.6.22 "da ist", halte ich es für keine richtige Einschränkung.
    Im Laufe der Woche integriere ich das mal in vidix/ivtv_vid.c vom mplayer, dürfte nicht mehr schwer sein. Was mir noch fehlt, ist, dass man z.B. über eine Environment-Variable eine PVR350 vorgeben kann, falls man mehrere hat.


    Bei der ganzen Sache ist ein kleines Problem von v4l2 aufgetaucht: VIDIOC_QUERYCAPS liefert für jedes Device einer PVR350 (/dev/video0,16,32,48) die gleichen Eigenschaften, also kann ein Programm eigentlich gar nicht wissen, welches Device das Richtige ist. Mal sehen, ob ich da mal was anstoßen kann, dass sich das verbessert.


    mini.

  • Moin!


    Ich hab mal meine Variante in den mpalyer integriert, übersetzbar müsste es (hoffentlich) sein, das Kompilieren des mplayer schlägt bei mir an anderen Stellen fehl, vermutlich wegen fehlender Includes/altem gcc oder ähnlichen.
    Vielleicht kannst du ja was damit anfangen...


    mini.


    EDIT: In diesen Patch hat sich noch ein kleiner Fehler eingeschlichen, der wird hoffentlich bald behoben sein. Der Vergleich über der Zeile "Error occurred during opening" war falschrum, da musste "if(-1 == fbdev) {" stehen, ups...
    Ist korrigiert (hoffentlich war das alles)

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!