Mailing List archive

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

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



Hi,

i forgot to mention that it only handles the ttpci DVB card (which should be the most often used one here ;-)). Other cards can be easily added by replacing "some-other-frontend" (btw: this means some-other-backend ;-)) with the string returned from your DVB card under /sys/class/video4linux/video%d/name (replace %d with 0,1...).
Ex: cat /sys/class/video4linux/video1/name

Rene Bredlau 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 ;-).



------------------------------------------------------------------------

--- 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;
--
So long
	.\\urray


--
Info:
To unsubscribe send a mail to ecartis@linuxtv.org with "unsubscribe vdr" as subject.



Home | Main Index | Thread Index