diff options
Diffstat (limited to 'dvbapi.c')
| -rw-r--r-- | dvbapi.c | 50 | 
1 files changed, 29 insertions, 21 deletions
| @@ -4,7 +4,7 @@   * See the main source file 'vdr.c' for copyright information and   * how to reach the author.   * - * $Id: dvbapi.c 1.54 2001/02/02 13:10:39 kls Exp $ + * $Id: dvbapi.c 1.55 2001/02/02 15:35:44 kls Exp $   */  #include "dvbapi.h" @@ -1570,6 +1570,7 @@ bool cVideoCutter::Active(void)  // --- cDvbApi ---------------------------------------------------------------  int cDvbApi::NumDvbApis = 0; +int cDvbApi::useDvbApi = 0;  cDvbApi *cDvbApi::dvbApi[MAXDVBAPI] = { NULL };  cDvbApi *cDvbApi::PrimaryDvbApi = NULL; @@ -1639,6 +1640,12 @@ cDvbApi::~cDvbApi()  #endif  } +void cDvbApi::SetUseDvbApi(int n) +{ +  if (n < MAXDVBAPI) +     useDvbApi |= (1 << n); +} +  bool cDvbApi::SetPrimaryDvbApi(int n)  {    n--; @@ -1685,33 +1692,34 @@ bool cDvbApi::Init(void)  {    NumDvbApis = 0;    for (int i = 0; i < MAXDVBAPI; i++) { -      char fileName[strlen(VIDEODEVICE) + 10]; -      sprintf(fileName, "%s%d", VIDEODEVICE, i); -      if (access(fileName, F_OK | R_OK | W_OK) == 0) { -         dsyslog(LOG_INFO, "probing %s", fileName); -         int f = open(fileName, O_RDWR); -         if (f >= 0) { -            struct video_capability cap; -            int r = ioctl(f, VIDIOCGCAP, &cap); -            close(f); -            if (r == 0 && (cap.type & VID_TYPE_DVB)) { -               char vbiFileName[strlen(VBIDEVICE) + 10]; -               sprintf(vbiFileName, "%s%d", VBIDEVICE, i); -               dvbApi[i] = new cDvbApi(fileName, vbiFileName); -               NumDvbApis++; +      if (useDvbApi == 0 || (useDvbApi & (1 << i)) != 0) { +         char fileName[strlen(VIDEODEVICE) + 10]; +         sprintf(fileName, "%s%d", VIDEODEVICE, i); +         if (access(fileName, F_OK | R_OK | W_OK) == 0) { +            dsyslog(LOG_INFO, "probing %s", fileName); +            int f = open(fileName, O_RDWR); +            if (f >= 0) { +               struct video_capability cap; +               int r = ioctl(f, VIDIOCGCAP, &cap); +               close(f); +               if (r == 0 && (cap.type & VID_TYPE_DVB)) { +                  char vbiFileName[strlen(VBIDEVICE) + 10]; +                  sprintf(vbiFileName, "%s%d", VBIDEVICE, i); +                  dvbApi[NumDvbApis++] = new cDvbApi(fileName, vbiFileName); +                  } +               } +            else { +               if (errno != ENODEV) +                  LOG_ERROR_STR(fileName); +               break;                 }              }           else { -            if (errno != ENODEV) +            if (errno != ENOENT)                 LOG_ERROR_STR(fileName);              break;              }           } -      else { -         if (errno != ENOENT) -            LOG_ERROR_STR(fileName); -         break; -         }        }    PrimaryDvbApi = dvbApi[0];    if (NumDvbApis > 0) { | 
