[PATCH] find v4l device on kernel 2.6 (GRAB Problem)

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi Klaus,

Klaus Schmidinger wrote:
>> Hi,
>>
>> even if i do not like the way vdr tries to find the v4l device it can
>> use for his grab command i adjusted its handling to work under kernel
>> 2.6.
>>
>> If somebody can show me a way to determinate which v4l device belongs
>> to  a DVB driver instance i will build a better patch. But up to this,
>> this patch will do the work under 2.6 (2.4 handling still in, but not
>> tested from my side - reports, if i didnt break anything are welcome).
>>
>> The patch should cleanly apply to vdr-1.3.5 (plain and elchi)
>>
>> Klaus: if the patch did not break anything, could you please but it
>> into the your version too? Maybe it is ok for stable to, but dont know
>> ;-).
> 
> I just found this old thread while cleaning up my inbox.
> Is this still a problem, or have things gotten better due
> to other changes (VDR or driver) in the meantime?
> 
> Sorry for having lost sight of this one...
> 

I think this patch is still useful. It is needed to skip non DVB cards
(for example an PVR250) while finding the device file for grabbing.

The patch contains the adoption of some functionality that was already
inside VDR for Kernel 2.4. So it should still be useful for 2.6 users
with analog tv cards especially if they use hotplug cards.

The patch only checks for av7110 frontend (which belongs to ttpci and
maybe others). It should be easy to extend it to contain a whole list of
Kernel 2.6 dvb drivers. I did not found a more generic way to
distinguish analog from DVB card :-(. See the comment inside the patch.


> Klaus
> 
>> ------------------------------------------------------------------------
>>
>> --- dvbdevice.c    2004-02-24 11:12:13.000000000 +0100
>> +++ ../../vdr/dvbdevice.c    2004-03-13 18:07:39.000000000 +0100
>> @@ -24,6 +24,7 @@
>>  #include <linux/dvb/video.h>
>>  #include <sys/ioctl.h>
>>  #include <sys/mman.h>
>> +#include <sys/utsname.h>
>>  #include "channels.h"
>>  #include "diseqc.h"
>>  #include "dvbosd.h"
>> @@ -326,11 +327,37 @@
>>    if (devVideoOffset < 0) { // the first one checks this
>>       FILE *f = NULL;
>>       char buffer[PATH_MAX];
>> +     +     char *path_template = "/proc/video/dev/video%d"; //
>> default is 2.4 - maybe this should be 2.6
>> +     utsname uname_data;
>> +
>> +     // get kernel version
>> +     if (uname(&uname_data)) {
>> +    dsyslog("! Could not get info about kernel version !");
>> +     } else {
>> +    dsyslog("kernel version %s", uname_data.release);
>> +    // adjust path template
>> +    if (!strncmp(uname_data.release,"2.4",3)) {
>> +       dsyslog("Running on Kernel version 2.4");
>> +       path_template = "/proc/video/dev/video%d";
>> +    } else if (!strncmp(uname_data.release,"2.6",3)) {
>> +       dsyslog("Running on Kernel version 2.6");
>> +       path_template = "/sys/class/video4linux/video%d/name";
>> +    } else {
>> +       dsyslog("! Unknown kernel version falling back to 2.4 behavior
>> !");
>> +    } // endif kernel version
>> +     } // endif uname
>> +
>>       for (int ofs = 0; ofs < 100; ofs++) {
>> -         snprintf(buffer, sizeof(buffer), "/proc/video/dev/video%d",
>> ofs);
>> +         // the path depend on the kernel version
>> +         snprintf(buffer, sizeof(buffer), path_template, ofs);
>>           if ((f = fopen(buffer, "r")) != NULL) {
>>              if (fgets(buffer, sizeof(buffer), f)) {
>> -               if (strstr(buffer, "DVB Board")) { // found the
>> _first_ DVB card
>> +           // here all devices which support output should be listed
>> (aka DVB backends)
>> +               if (strstr(buffer, "av7110") ||  // ttpci backend
>> +           strstr(buffer, "some-other-frontend") || // fill in your
>> backend
>> +           strstr(buffer, "DVB Board")   // this is for kernel 2.4
>> +          ) { // found the _first_ DVB card
>>                    devVideoOffset = ofs;
>>                    dsyslog("video device offset is %d", devVideoOffset);
>>                    break;
> 
> _______________________________________________
> vdr mailing list
> vdr@xxxxxxxxxxx
> http://www.linuxtv.org/cgi-bin/mailman/listinfo/vdr


-- 
So long
	.\\urray


[Index of Archives]     [Linux Media]     [Asterisk]     [DCCP]     [Netdev]     [Xorg]     [Util Linux NG]     [Xfree86]     [Big List of Linux Books]     [Fedora Users]     [Fedora Women]     [ALSA Devel]     [Linux USB]

  Powered by Linux