mirror of
				https://github.com/vdr-projects/vdr.git
				synced 2025-03-01 10:50:46 +00:00 
			
		
		
		
	Version 1.3.3
- Completed the Finnish OSD texts (thanks to Rolf Ahrenberg). - Added ISO639LanguageDescriptor to 'libsi'. - Changed the 'languageCode' members in the descriptor classes of 'libsi' to 'char[4]' and setting the 4th byte to 0 for easier handling. - Fixed frequency handling when setting the CA descriptors in cDvbTuner::Action() (thanks to Jan Ekholm for reporting and helping to debug this one). - Now setting CA descriptors even if "Setup/DVB/Update channels" is less than 2. - There can now be up to 32 audio and Dolby PIDs (however, currently still only the first two are used throughout the rest of the program). - The audio and Dolby PIDs in 'channels.conf' now can have an optional language code (see man vdr(5)). Currently this is only stored and not yet used otherwise. - Added a call to cStatus::MsgOsdCurrentItem() to cMenuEditItem::SetValue() (thanks to Martin Hammerschmid).
This commit is contained in:
		@@ -51,6 +51,7 @@ Martin Hammerschmid <martin@hammerschmid.com>
 | 
			
		||||
 for reporting a problem with a missing initialization of 'number' in cChannel
 | 
			
		||||
 for implementing a "resume ID" which allows several users to each have their own
 | 
			
		||||
 resume.vdr files
 | 
			
		||||
 for adding a call to cStatus::MsgOsdCurrentItem() to cMenuEditItem::SetValue()
 | 
			
		||||
 | 
			
		||||
Bastian Guse <bastian@nocopy.de>
 | 
			
		||||
 for writing the FORMATS entry for timers.conf
 | 
			
		||||
@@ -647,6 +648,8 @@ Teemu Rantanen <tvr@iki.fi>
 | 
			
		||||
Jan Ekholm <chakie@infa.abo.fi>
 | 
			
		||||
 for adding/improving some Swedish language OSD texts
 | 
			
		||||
 for reporting a compiler warning in g++ 3.2.3 regarding cReplayControl::Show()
 | 
			
		||||
 for reporting and helping to debug a problem in frequency handling when setting
 | 
			
		||||
 the CA descriptors in cDvbTuner::Action()
 | 
			
		||||
 | 
			
		||||
Marcel Wiesweg <marcel.wiesweg@gmx.de>
 | 
			
		||||
 for pointing out a problem with high CPU load during replay
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										16
									
								
								HISTORY
									
									
									
									
									
								
							
							
						
						
									
										16
									
								
								HISTORY
									
									
									
									
									
								
							@@ -2610,3 +2610,19 @@ Video Disk Recorder Revision History
 | 
			
		||||
  broadcast on.
 | 
			
		||||
- Fixed setting the source type for newly detected terrestrial transponders
 | 
			
		||||
  (thanks to Christian Tramnitz for his support in debugging this).
 | 
			
		||||
 | 
			
		||||
2004-01-25: Version 1.3.3
 | 
			
		||||
 | 
			
		||||
- Completed the Finnish OSD texts (thanks to Rolf Ahrenberg).
 | 
			
		||||
- Added ISO639LanguageDescriptor to 'libsi'.
 | 
			
		||||
- Changed the 'languageCode' members in the descriptor classes of 'libsi' to
 | 
			
		||||
  'char[4]' and setting the 4th byte to 0 for easier handling.
 | 
			
		||||
- Fixed frequency handling when setting the CA descriptors in cDvbTuner::Action()
 | 
			
		||||
  (thanks to Jan Ekholm for reporting and helping to debug this one).
 | 
			
		||||
- Now setting CA descriptors even if "Setup/DVB/Update channels" is less than 2.
 | 
			
		||||
- There can now be up to 32 audio and Dolby PIDs (however, currently still only
 | 
			
		||||
  the first two are used throughout the rest of the program).
 | 
			
		||||
- The audio and Dolby PIDs in 'channels.conf' now can have an optional language
 | 
			
		||||
  code (see man vdr(5)). Currently this is only stored and not yet used otherwise.
 | 
			
		||||
- Added a call to cStatus::MsgOsdCurrentItem() to cMenuEditItem::SetValue()
 | 
			
		||||
  (thanks to Martin Hammerschmid).
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										179
									
								
								channels.c
									
									
									
									
									
								
							
							
						
						
									
										179
									
								
								channels.c
									
									
									
									
									
								
							@@ -4,7 +4,7 @@
 | 
			
		||||
 * See the main source file 'vdr.c' for copyright information and
 | 
			
		||||
 * how to reach the author.
 | 
			
		||||
 *
 | 
			
		||||
 * $Id: channels.c 1.19 2004/01/11 15:52:32 kls Exp $
 | 
			
		||||
 * $Id: channels.c 1.20 2004/01/25 15:32:08 kls Exp $
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#include "channels.h"
 | 
			
		||||
@@ -177,10 +177,8 @@ cChannel::cChannel(const cChannel *Channel)
 | 
			
		||||
  *name = 0;
 | 
			
		||||
  vpid         = 0;
 | 
			
		||||
  ppid         = 0;
 | 
			
		||||
  apid1        = 0;
 | 
			
		||||
  apid2        = 0;
 | 
			
		||||
  dpid1        = 0;
 | 
			
		||||
  dpid2        = 0;
 | 
			
		||||
  apids[0]     = 0;
 | 
			
		||||
  dpids[0]     = 0;
 | 
			
		||||
  tpid         = 0;
 | 
			
		||||
  caids[0]     = 0;
 | 
			
		||||
  nid          = 0;
 | 
			
		||||
@@ -305,18 +303,62 @@ void cChannel::SetName(const char *Name, bool Log)
 | 
			
		||||
     }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void cChannel::SetPids(int Vpid, int Ppid, int Apid1, int Apid2, int Dpid1, int Dpid2, int Tpid)
 | 
			
		||||
static bool IntArraysDiffer(const int *a, const int *b, const char na[][4] = NULL, const char nb[][4] = NULL)
 | 
			
		||||
{
 | 
			
		||||
  //XXX if (vpid != Vpid || ppid != Ppid || apid1 != Apid1 || apid2 != Apid2 || dpid1 != Dpid1 || dpid2 != Dpid2 || tpid != Tpid) {
 | 
			
		||||
  if (vpid != Vpid || ppid != Ppid || apid1 != Apid1 || (Apid2 && apid2 != Apid2) || dpid1 != Dpid1 || dpid2 != Dpid2 || tpid != Tpid) {
 | 
			
		||||
     dsyslog("changing pids of channel %d from %d+%d:%d,%d;%d,%d:%d to %d+%d:%d,%d;%d,%d:%d", Number(), vpid, ppid, apid1, apid2, dpid1, dpid2, tpid, Vpid, Ppid, Apid1, Apid2, Dpid1, Dpid2, Tpid);
 | 
			
		||||
  int i = 0;
 | 
			
		||||
  while (a[i] && b[i]) {
 | 
			
		||||
        if (a[i] != b[i] || na && nb && strcmp(na[i], nb[i]) != 0)
 | 
			
		||||
           return true;
 | 
			
		||||
        i++;
 | 
			
		||||
        }
 | 
			
		||||
  return a[i] != b[i] || a[i] && na && nb && strcmp(na[i], nb[i]) != 0;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static int IntArrayToString(char *s, const int *a, int Base = 10, const char n[][4] = NULL)
 | 
			
		||||
{
 | 
			
		||||
  char *q = s;
 | 
			
		||||
  int i = 0;
 | 
			
		||||
  while (a[i] || i == 0) {
 | 
			
		||||
        q += sprintf(q, Base == 16 ? "%s%X" : "%s%d", i ? "," : "", a[i]);
 | 
			
		||||
        if (n && *n[i])
 | 
			
		||||
           q += sprintf(q, "=%s", n[i]);
 | 
			
		||||
        i++;
 | 
			
		||||
        }
 | 
			
		||||
  *q = 0;
 | 
			
		||||
  return q - s;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void cChannel::SetPids(int Vpid, int Ppid, int *Apids, char ALangs[][4], int *Dpids, char DLangs[][4], int Tpid)
 | 
			
		||||
{
 | 
			
		||||
  bool modified = vpid != Vpid || ppid != Ppid || tpid != Tpid;
 | 
			
		||||
  if (!modified)
 | 
			
		||||
     modified = IntArraysDiffer(apids, Apids, alangs, ALangs) || IntArraysDiffer(dpids, Dpids, dlangs, DLangs);
 | 
			
		||||
  if (modified) {
 | 
			
		||||
     char OldApidsBuf[MAXAPIDS * 2 * 10 + 10]; // 2: Apids and Dpids, 10: 5 digits plus delimiting ',' or ';' plus optional '=cod', +10: paranoia
 | 
			
		||||
     char NewApidsBuf[MAXAPIDS * 2 * 10 + 10];
 | 
			
		||||
     char *q = OldApidsBuf;
 | 
			
		||||
     q += IntArrayToString(q, apids, 10, alangs);
 | 
			
		||||
     if (dpids[0]) {
 | 
			
		||||
        *q++ = ';';
 | 
			
		||||
        q += IntArrayToString(q, dpids, 10, dlangs);
 | 
			
		||||
        }
 | 
			
		||||
     *q = 0;
 | 
			
		||||
     q = NewApidsBuf;
 | 
			
		||||
     q += IntArrayToString(q, Apids, 10, ALangs);
 | 
			
		||||
     if (Dpids[0]) {
 | 
			
		||||
        *q++ = ';';
 | 
			
		||||
        q += IntArrayToString(q, Dpids, 10, DLangs);
 | 
			
		||||
        }
 | 
			
		||||
     *q = 0;
 | 
			
		||||
     dsyslog("changing pids of channel %d from %d+%d:%s:%d to %d+%d:%s:%d", Number(), vpid, ppid, OldApidsBuf, tpid, Vpid, Ppid, NewApidsBuf, Tpid);
 | 
			
		||||
     vpid = Vpid;
 | 
			
		||||
     ppid = Ppid;
 | 
			
		||||
     apid1 = Apid1;
 | 
			
		||||
     if (Apid2)//XXX should we actually react here?
 | 
			
		||||
     apid2 = Apid2;
 | 
			
		||||
     dpid1 = Dpid1;
 | 
			
		||||
     dpid2 = Dpid2;
 | 
			
		||||
     for (int i = 0; i <= MAXAPIDS; i++) { // <= to copy the terminating 0
 | 
			
		||||
         apids[i] = Apids[i];
 | 
			
		||||
         strn0cpy(alangs[i], ALangs[i], 4);
 | 
			
		||||
         dpids[i] = Dpids[i];
 | 
			
		||||
         strn0cpy(dlangs[i], DLangs[i], 4);
 | 
			
		||||
         }
 | 
			
		||||
     tpid = Tpid;
 | 
			
		||||
     modification |= CHANNELMOD_PIDS;
 | 
			
		||||
     Channels.SetModified();
 | 
			
		||||
@@ -327,37 +369,14 @@ void cChannel::SetCaIds(const int *CaIds)
 | 
			
		||||
{
 | 
			
		||||
  if (caids[0] && caids[0] <= 0x00FF)
 | 
			
		||||
     return; // special values will not be overwritten
 | 
			
		||||
  bool modified = false;
 | 
			
		||||
  for (int i = 0; i < MAXCAIDS; i++) {
 | 
			
		||||
      if (caids[i] != CaIds[i]) {
 | 
			
		||||
         modified = true;
 | 
			
		||||
         break;
 | 
			
		||||
         }
 | 
			
		||||
      if (!caids[i] || !CaIds[i])
 | 
			
		||||
         break;
 | 
			
		||||
      }
 | 
			
		||||
  if (modified) {
 | 
			
		||||
  if (IntArraysDiffer(caids, CaIds)) {
 | 
			
		||||
     char OldCaIdsBuf[MAXCAIDS * 5 + 10]; // 5: 4 digits plus delimiting ',', 10: paranoia
 | 
			
		||||
     char NewCaIdsBuf[MAXCAIDS * 5 + 10];
 | 
			
		||||
     char *qo = OldCaIdsBuf;
 | 
			
		||||
     char *qn = NewCaIdsBuf;
 | 
			
		||||
     int i;
 | 
			
		||||
     for (i = 0; i < MAXCAIDS; i++) {
 | 
			
		||||
         if (i == 0 || caids[i])
 | 
			
		||||
            qo += snprintf(qo, sizeof(OldCaIdsBuf), "%s%X", i > 0 ? "," : "", caids[i]);
 | 
			
		||||
         if (!caids[i])
 | 
			
		||||
            break;
 | 
			
		||||
         }
 | 
			
		||||
     for (i = 0; i < MAXCAIDS; i++) {
 | 
			
		||||
         if (i == 0 || CaIds[i])
 | 
			
		||||
            qn += snprintf(qn, sizeof(NewCaIdsBuf), "%s%X", i > 0 ? "," : "", CaIds[i]);
 | 
			
		||||
         caids[i] = CaIds[i];
 | 
			
		||||
         if (!CaIds[i])
 | 
			
		||||
            break;
 | 
			
		||||
         }
 | 
			
		||||
     caids[i] = 0;
 | 
			
		||||
     *qo = *qn = 0;
 | 
			
		||||
     IntArrayToString(OldCaIdsBuf, caids, 16);
 | 
			
		||||
     IntArrayToString(NewCaIdsBuf, CaIds, 16);
 | 
			
		||||
     dsyslog("changing caids of channel %d from %s to %s", Number(), OldCaIdsBuf, NewCaIdsBuf);
 | 
			
		||||
     for (int i = 0; i <= MAXCAIDS && CaIds[i]; i++) // <= to copy the terminating 0
 | 
			
		||||
         caids[i] = CaIds[i];
 | 
			
		||||
     modification |= CHANNELMOD_CA;
 | 
			
		||||
     Channels.SetModified();
 | 
			
		||||
     }
 | 
			
		||||
@@ -460,24 +479,17 @@ const char *cChannel::ToText(cChannel *Channel)
 | 
			
		||||
     if (Channel->ppid && Channel->ppid != Channel->vpid)
 | 
			
		||||
        q += snprintf(q, sizeof(vpidbuf) - (q - vpidbuf), "+%d", Channel->ppid);
 | 
			
		||||
     *q = 0;
 | 
			
		||||
     char apidbuf[MAXAPIDS * 2 * 6 + 10]; // 2: Apids and Dpids, 6: 5 digits plus delimiting ',' or ';', 10: paranoia
 | 
			
		||||
     char apidbuf[MAXAPIDS * 2 * 10 + 10]; // 2: Apids and Dpids, 10: 5 digits plus delimiting ',' or ';' plus optional '=cod', +10: paranoia
 | 
			
		||||
     q = apidbuf;
 | 
			
		||||
     q += snprintf(q, sizeof(apidbuf), "%d", Channel->apid1);
 | 
			
		||||
     if (Channel->apid2)
 | 
			
		||||
        q += snprintf(q, sizeof(apidbuf) - (q - apidbuf), ",%d", Channel->apid2);
 | 
			
		||||
     if (Channel->dpid1 || Channel->dpid2)
 | 
			
		||||
        q += snprintf(q, sizeof(apidbuf) - (q - apidbuf), ";%d", Channel->dpid1);
 | 
			
		||||
     if (Channel->dpid2)
 | 
			
		||||
        q += snprintf(q, sizeof(apidbuf) - (q - apidbuf), ",%d", Channel->dpid2);
 | 
			
		||||
     q += IntArrayToString(q, Channel->apids, 10, Channel->alangs);
 | 
			
		||||
     if (Channel->dpids[0]) {
 | 
			
		||||
        *q++ = ';';
 | 
			
		||||
        q += IntArrayToString(q, Channel->dpids, 10, Channel->dlangs);
 | 
			
		||||
        }
 | 
			
		||||
     *q = 0;
 | 
			
		||||
     char caidbuf[MAXCAIDS * 5 + 10]; // 5: 4 digits plus delimiting ',', 10: paranoia
 | 
			
		||||
     q = caidbuf;
 | 
			
		||||
     for (int i = 0; i < MAXCAIDS; i++) {
 | 
			
		||||
         if (i == 0 || Channel->caids[i])
 | 
			
		||||
            q += snprintf(q, sizeof(caidbuf), "%s%X", i > 0 ? "," : "", Channel->caids[i]);
 | 
			
		||||
         if (!Channel->caids[i])
 | 
			
		||||
            break;
 | 
			
		||||
         }
 | 
			
		||||
     q += IntArrayToString(q, Channel->caids, 16);
 | 
			
		||||
     *q = 0;
 | 
			
		||||
     asprintf(&buffer, "%s:%d:%s:%s:%d:%s:%s:%d:%s:%d:%d:%d:%d\n", s, Channel->frequency, Channel->ParametersToString(), cSource::ToString(Channel->source), Channel->srate, vpidbuf, apidbuf, Channel->tpid, caidbuf, Channel->sid, Channel->nid, Channel->tid, Channel->rid);
 | 
			
		||||
     }
 | 
			
		||||
@@ -524,9 +536,9 @@ bool cChannel::Parse(const char *s, bool AllowNonUniqueID)
 | 
			
		||||
           caids[1] = 0;
 | 
			
		||||
           tpid = 0;
 | 
			
		||||
           }
 | 
			
		||||
        vpid  = ppid  = 0;
 | 
			
		||||
        apid1 = apid2 = 0;
 | 
			
		||||
        dpid1 = dpid2 = 0;
 | 
			
		||||
        vpid = ppid = 0;
 | 
			
		||||
        apids[0] = 0;
 | 
			
		||||
        dpids[0] = 0;
 | 
			
		||||
        ok = false;
 | 
			
		||||
        if (parambuf && sourcebuf && vpidbuf && apidbuf) {
 | 
			
		||||
           ok = StringToParameters(parambuf) && (source = cSource::FromString(sourcebuf)) >= 0;
 | 
			
		||||
@@ -540,12 +552,49 @@ bool cChannel::Parse(const char *s, bool AllowNonUniqueID)
 | 
			
		||||
           else
 | 
			
		||||
              ppid = vpid;
 | 
			
		||||
 | 
			
		||||
           p = strchr(apidbuf, ';');
 | 
			
		||||
           if (p)
 | 
			
		||||
              *p++ = 0;
 | 
			
		||||
           sscanf(apidbuf, "%d ,%d ", &apid1, &apid2);
 | 
			
		||||
           if (p)
 | 
			
		||||
              sscanf(p, "%d ,%d ", &dpid1, &dpid2);
 | 
			
		||||
           char *dpidbuf = strchr(apidbuf, ';');
 | 
			
		||||
           if (dpidbuf)
 | 
			
		||||
              *dpidbuf++ = 0;
 | 
			
		||||
           p = apidbuf;
 | 
			
		||||
           char *q;
 | 
			
		||||
           int NumApids = 0;
 | 
			
		||||
           while ((q = strtok(p, ",")) != NULL) {
 | 
			
		||||
                 if (NumApids < MAXAPIDS) {
 | 
			
		||||
                    char *l = strchr(q, '=');
 | 
			
		||||
                    if (l) {
 | 
			
		||||
                       *l++ = 0;
 | 
			
		||||
                       strn0cpy(alangs[NumApids], l, 4);
 | 
			
		||||
                       }
 | 
			
		||||
                    else
 | 
			
		||||
                       *alangs[NumApids] = 0;
 | 
			
		||||
                    apids[NumApids++] = strtol(q, NULL, 10);
 | 
			
		||||
                    }
 | 
			
		||||
                 else
 | 
			
		||||
                    esyslog("ERROR: too many APIDs!"); // no need to set ok to 'false'
 | 
			
		||||
                 p = NULL;
 | 
			
		||||
                 }
 | 
			
		||||
           apids[NumApids] = 0;
 | 
			
		||||
           if (dpidbuf) {
 | 
			
		||||
              char *p = dpidbuf;
 | 
			
		||||
              char *q;
 | 
			
		||||
              int NumDpids = 0;
 | 
			
		||||
              while ((q = strtok(p, ",")) != NULL) {
 | 
			
		||||
                    if (NumDpids < MAXAPIDS) {
 | 
			
		||||
                       char *l = strchr(q, '=');
 | 
			
		||||
                       if (l) {
 | 
			
		||||
                          *l++ = 0;
 | 
			
		||||
                          strn0cpy(dlangs[NumDpids], l, 4);
 | 
			
		||||
                          }
 | 
			
		||||
                       else
 | 
			
		||||
                          *dlangs[NumDpids] = 0;
 | 
			
		||||
                       dpids[NumDpids++] = strtol(q, NULL, 10);
 | 
			
		||||
                       }
 | 
			
		||||
                    else
 | 
			
		||||
                       esyslog("ERROR: too many DPIDs!"); // no need to set ok to 'false'
 | 
			
		||||
                    p = NULL;
 | 
			
		||||
                    }
 | 
			
		||||
              dpids[NumDpids] = 0;
 | 
			
		||||
              }
 | 
			
		||||
 | 
			
		||||
           if (caidbuf) {
 | 
			
		||||
              char *p = caidbuf;
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										164
									
								
								channels.conf
									
									
									
									
									
								
							
							
						
						
									
										164
									
								
								channels.conf
									
									
									
									
									
								
							@@ -1,92 +1,92 @@
 | 
			
		||||
RTL,RTL Television:12187:hC34:S19.2E:27500:163:104:105:0:12003:1:1089:0
 | 
			
		||||
SAT.1:12480:vC34:S19.2E:27500:1791:1792;1795:34:0:46:133:33:0
 | 
			
		||||
ProSieben:12480:vC34:S19.2E:27500:255:256;257:32:0:898:133:33:0
 | 
			
		||||
RTL2:12187:hC34:S19.2E:27500:166:128:68:0:12020:1:1089:0
 | 
			
		||||
Das Erste:11836:hC34:S19.2E:27500:101:102:104:0:28106:1:1101:0
 | 
			
		||||
Bayerisches FS:11836:hC34:S19.2E:27500:201:202:204:0:28107:1:1101:0
 | 
			
		||||
hessen fernsehen:11836:hC34:S19.2E:27500:301:302:304:0:28108:1:1101:0
 | 
			
		||||
NDR FS MV:12109:hC34:S19.2E:27500:2401:2402:2404:0:28224:1:1073:0
 | 
			
		||||
SR Fernsehen S<>dwest:11836:hC34:S19.2E:27500:501:502:504:0:28110:1:1101:0
 | 
			
		||||
WDR K<>ln:11836:hC34:S19.2E:27500:601:602:604:0:28111:1:1101:0
 | 
			
		||||
BR-alpha:11836:hC34:S19.2E:27500:701:702:704:0:28112:1:1101:0
 | 
			
		||||
S<EFBFBD>DWEST BW:11836:hC34:S19.2E:27500:801:802:804:0:28113:1:1101:0
 | 
			
		||||
Phoenix:11836:hC34:S19.2E:27500:901:902:904:0:28114:1:1101:0
 | 
			
		||||
ZDF:11953:hC34:S19.2E:27500:110:120;125:130:0:28006:1:1079:0
 | 
			
		||||
3sat:11953:hC34:S19.2E:27500:210:220:230:0:28007:1:1079:0
 | 
			
		||||
KiKa:11953:hC34:S19.2E:27500:310:320:330:0:28008:1:1079:0
 | 
			
		||||
arte:11836:hC34:S19.2E:27500:401:402,403:404:0:28109:1:1101:0
 | 
			
		||||
ORF 1:12692:hC56:S19.2E:22000:160:161,162;163:165:1762,D05,1702,1801:13001:1:1117:0
 | 
			
		||||
ORF 2:12692:hC56:S19.2E:22000:500:501;503:505:1762,D05,1702,1801:13002:1:1117:0
 | 
			
		||||
ZDFinfokanal:11953:hC34:S19.2E:27500:610:620:130:0:28011:1:1079:0
 | 
			
		||||
CNN Int.:11778:vC34:S19.2E:27500:165:100:47:0:28522:1:1068:0
 | 
			
		||||
S RTL,Super RTL:12187:hC34:S19.2E:27500:165:120:65:0:12040:1:1089:0
 | 
			
		||||
VOX:12187:hC34:S19.2E:27500:167:136:71:0:12060:1:1089:0
 | 
			
		||||
RTL,RTL Television:12187:hC34:S19.2E:27500:163:104=deu:105:0:12003:1:1089:0
 | 
			
		||||
SAT.1:12480:vC34:S19.2E:27500:1791:1792=deu;1795=deu:34:0:46:133:33:0
 | 
			
		||||
ProSieben:12480:vC34:S19.2E:27500:255:256=deu;257=deu:32:0:898:133:33:0
 | 
			
		||||
RTL2:12187:hC34:S19.2E:27500:166:128=deu:68:0:12020:1:1089:0
 | 
			
		||||
Das Erste:11836:hC34:S19.2E:27500:101:102=deu:104:0:28106:1:1101:0
 | 
			
		||||
Bayerisches FS:11836:hC34:S19.2E:27500:201:202=deu:204:0:28107:1:1101:0
 | 
			
		||||
hessen fernsehen:11836:hC34:S19.2E:27500:301:302=deu:304:0:28108:1:1101:0
 | 
			
		||||
NDR FS MV:12109:hC34:S19.2E:27500:2401:2402=deu:2404:0:28224:1:1073:0
 | 
			
		||||
SR Fernsehen S<>dwest:11836:hC34:S19.2E:27500:501:502=deu:504:0:28110:1:1101:0
 | 
			
		||||
WDR K<>ln:11836:hC34:S19.2E:27500:601:602=deu:604:0:28111:1:1101:0
 | 
			
		||||
BR-alpha:11836:hC34:S19.2E:27500:701:702=deu:704:0:28112:1:1101:0
 | 
			
		||||
S<EFBFBD>DWEST BW:11836:hC34:S19.2E:27500:801:802=deu:804:0:28113:1:1101:0
 | 
			
		||||
Phoenix:11836:hC34:S19.2E:27500:901:902=deu:904:0:28114:1:1101:0
 | 
			
		||||
ZDF:11953:hC34:S19.2E:27500:110:120=deu;125=deu:130:3:28006:1:1079:0
 | 
			
		||||
3sat:11953:hC34:S19.2E:27500:210:220=deu:230:0:28007:1:1079:0
 | 
			
		||||
KiKa:11953:hC34:S19.2E:27500:310:320=deu:330:0:28008:1:1079:0
 | 
			
		||||
arte:11836:hC34:S19.2E:27500:401:402=deu,403=fra:404:0:28109:1:1101:0
 | 
			
		||||
ORF 1:12692:hC56:S19.2E:22000:160:161=deu;163=deu:165:1762,D05,1702,1801:13001:1:1117:0
 | 
			
		||||
ORF 2:12692:hC56:S19.2E:22000:500:501=deu;503=deu:505:1762,D05,1702,1801:13002:1:1117:0
 | 
			
		||||
ZDFinfokanal:11953:hC34:S19.2E:27500:610:620=deu:130:0:28011:1:1079:0
 | 
			
		||||
CNN Int.:11778:vC34:S19.2E:27500:165:100=eng:47:0:28522:1:1068:0
 | 
			
		||||
S RTL,Super RTL:12187:hC34:S19.2E:27500:165:120=deu:65:0:12040:1:1089:0
 | 
			
		||||
VOX:12187:hC34:S19.2E:27500:167:136=deu:71:0:12060:1:1089:0
 | 
			
		||||
KABEL1:12480:vC34:S19.2E:27500:511:512:33:0:899:133:33:0
 | 
			
		||||
NEUN LIVE,NEUN LIVE Television:12480:vC34:S19.2E:27500:767:768:35:0:897:133:33:0
 | 
			
		||||
DSF:12480:vC34:S19.2E:27500:1023:1024:0:0:900:133:33:0
 | 
			
		||||
DSF:12480:vC34:S19.2E:27500:1023:1024=deu:0:0:900:133:33:0
 | 
			
		||||
HSEurope,Home Shopping Europe:12480:vC34:S19.2E:27500:1279:1280:37:0:40:133:33:0
 | 
			
		||||
Bloomberg TV Germany:12552:vC56:S19.2E:22000:162:99:0:0:12160:1:1108:0
 | 
			
		||||
EURONEWS:11817:vC34:S19.2E:27500:163:92,93:0:500,100:8004:1:1070:0
 | 
			
		||||
Sky News:11597:vC56:S19.2E:22000:305:306:0:0:28707:1:1026:0
 | 
			
		||||
Veronica/FoxKids:12574:hC56:S19.2E:22000:518+8190:92:38:622,602,100:5020:53:1109:0
 | 
			
		||||
BVN:12574:hC56:S19.2E:22000:515+8190:96:36:0:5025:53:1109:0
 | 
			
		||||
CNBC Europe:12610:vC56:S19.2E:22000:944:945:0:0:12200:1:1112:0
 | 
			
		||||
n-tv:12669:vC56:S19.2E:22000:162:96:55:0:12730:1:1116:0
 | 
			
		||||
Al Jazeera:11567:vC56:S19.2E:22000:55:56:0:0:9021:1:1024:0
 | 
			
		||||
TW1:12692:hC56:S19.2E:22000:166:167:168:0:13013:1:1117:0
 | 
			
		||||
Eurosport:11953:hC34:S19.2E:27500:410:420:430:0:28009:1:1079:0
 | 
			
		||||
EinsExtra:12109:hC34:S19.2E:27500:101:102:0:0:28201:1:1073:0
 | 
			
		||||
EinsFestival:12109:hC34:S19.2E:27500:201:202:0:0:28202:1:1073:0
 | 
			
		||||
EinsMuXx:12109:hC34:S19.2E:27500:301:302:0:0:28203:1:1073:0
 | 
			
		||||
Bloomberg TV Germany:12551:vC56:S19.2E:22000:162:99=deu:0:0:12160:1:1108:0
 | 
			
		||||
EURONEWS:11817:vC34:S19.2E:27500:163:92=fra,93=eng,94=ita,95=esl,91=rus,98=por,99=deu:0:500,100:8004:1:1070:0
 | 
			
		||||
Sky News:11597:vC56:S19.2E:22000:305:306=eng:0:0:28707:1:1026:0
 | 
			
		||||
Veronica/FoxKids:12574:hC56:S19.2E:22000:518+8190:92=dut:38:622,602,100:5020:53:1109:0
 | 
			
		||||
BVN:12574:hC56:S19.2E:22000:515+8190:96=dut:36:0:5025:53:1109:0
 | 
			
		||||
CNBC Europe:12610:vC56:S19.2E:22000:944:945=eng:0:0:12200:1:1112:0
 | 
			
		||||
n-tv:12669:vC56:S19.2E:22000:162:96=deu:55:0:12730:1:1116:0
 | 
			
		||||
Al Jazeera:11567:vC56:S19.2E:22000:55:56=ara:0:0:9021:1:1024:0
 | 
			
		||||
TW1:12692:hC56:S19.2E:22000:166:167=deu:168:0:13013:1:1117:0
 | 
			
		||||
Eurosport:11953:hC34:S19.2E:27500:410:420=deu:430:0:28009:1:1079:0
 | 
			
		||||
EinsExtra:12109:hC34:S19.2E:27500:101:102=deu:0:0:28201:1:1073:0
 | 
			
		||||
EinsFestival:12109:hC34:S19.2E:27500:201:202=deu:0:0:28202:1:1073:0
 | 
			
		||||
EinsMuXx:12109:hC34:S19.2E:27500:301:302=deu:0:0:28203:1:1073:0
 | 
			
		||||
ZDFtheaterkanal:11953:hC34:S19.2E:27500:1110:1120:130:0:28016:1:1079:0
 | 
			
		||||
ZDFdokukanal:11953:hC34:S19.2E:27500:660:670:130:0:28014:1:1079:0
 | 
			
		||||
MDR FERNSEHEN:12109:hC34:S19.2E:27500:401:402:404:0:28204:1:1073:0
 | 
			
		||||
RBB Brandenburg:12109:hC34:S19.2E:27500:501:502:504:0:28205:1:1073:0
 | 
			
		||||
RBB Berlin:12109:hC34:S19.2E:27500:601:602:604:0:28206:1:1073:0
 | 
			
		||||
ZDFdokukanal:11953:hC34:S19.2E:27500:660:670=deu:130:0:28014:1:1079:0
 | 
			
		||||
MDR FERNSEHEN:12109:hC34:S19.2E:27500:401:402=deu:404:0:28204:1:1073:0
 | 
			
		||||
RBB Brandenburg:12109:hC34:S19.2E:27500:501:502=deu:504:0:28205:1:1073:0
 | 
			
		||||
RBB Berlin:12109:hC34:S19.2E:27500:601:602=deu:604:0:28206:1:1073:0
 | 
			
		||||
:Premiere World
 | 
			
		||||
START,PREMIERE START:11797:hC34:S19.2E:27500:255:256:32:1702,1722,1801:8:133:2:0
 | 
			
		||||
PREM 1,PREMIERE 1:11797:hC34:S19.2E:27500:511:512,513;515:0:1702,1722,1801:10:133:2:0
 | 
			
		||||
PREM 2,PREMIERE 2:11797:hC34:S19.2E:27500:1791:1792,1793;1795:0:1702,1722,1801:11:133:2:0
 | 
			
		||||
PREM 3,PREMIERE 3:11797:hC34:S19.2E:27500:2303:2304,2305:0:1702,1722,1801:43:133:2:0
 | 
			
		||||
PREM 4,PREMIERE 4:11797:hC34:S19.2E:27500:767:768,769:0:1702,1722,1801:9:133:2:0
 | 
			
		||||
PREM 5,PREMIERE 5:11797:hC34:S19.2E:27500:1279:1280,1281:0:1702,1722,1801:29:133:2:0
 | 
			
		||||
PREM 6,PREMIERE 6:11797:hC34:S19.2E:27500:1535:1536:0:1702,1722,1801:41:133:2:0
 | 
			
		||||
PREM 7,PREMIERE 7:11797:hC34:S19.2E:27500:1023:1024:0:1702,1722,1801:20:133:2:0
 | 
			
		||||
DISNEY,DISNEY CHANNEL:11758:hC34:S19.2E:27500:2559:2560:0:1702,1722,1801:34:133:17:0
 | 
			
		||||
START,PREMIERE START:11797:hC34:S19.2E:27500:255:256=deu:32:1702,1722,1801:8:133:2:0
 | 
			
		||||
PREM 1,PREMIERE 1:11797:hC34:S19.2E:27500:511:512=deu;515=deu:0:1702,1722,1801:10:133:2:0
 | 
			
		||||
PREM 2,PREMIERE 2:11797:hC34:S19.2E:27500:1791:1792=deu;1795=deu:0:1702,1722,1801:11:133:2:0
 | 
			
		||||
PREM 3,PREMIERE 3:11797:hC34:S19.2E:27500:2303:2304=deu,2305=deu:0:1702,1722,1801:43:133:2:0
 | 
			
		||||
PREM 4,PREMIERE 4:11797:hC34:S19.2E:27500:767:768=deu:0:1702,1722,1801:9:133:2:0
 | 
			
		||||
PREM 5,PREMIERE 5:11797:hC34:S19.2E:27500:1279:1280=deu:0:1702,1722,1801:29:133:2:0
 | 
			
		||||
PREM 6,PREMIERE 6:11797:hC34:S19.2E:27500:1535:1536=deu:0:1702,1722,1801:41:133:2:0
 | 
			
		||||
PREM 7,PREMIERE 7:11797:hC34:S19.2E:27500:1023:1024=deu:0:1702,1722,1801:20:133:2:0
 | 
			
		||||
DISNEY,DISNEY CHANNEL:11758:hC34:S19.2E:27500:2559:2560=deu:0:1702,1722,1801:34:133:17:0
 | 
			
		||||
:Premiere Direkt
 | 
			
		||||
DIREKT,PREMIERE DIREKT:12031:hC34:S19.2E:27500:2815:2816,2817;2819:0:0:18:133:4:0
 | 
			
		||||
DIREKT,PREMIERE DIREKT:12031:hC34:S19.2E:27500:2815:2816=deu,2817=deu;2819=deu:0:0:18:133:4:0
 | 
			
		||||
:PW Erotic
 | 
			
		||||
B-UHSE,BEATE-UHSE.TV:12070:hC34:S19.2E:27500:1023:1024:0:1702,1722,1801:21:133:1:0
 | 
			
		||||
B-UHSE,BEATE-UHSE.TV:12070:hC34:S19.2E:27500:1023:1024=deu:0:1702,1722,1801:21:133:1:0
 | 
			
		||||
EROTIK,PREMIERE EROTIK:12031:hC34:S19.2E:27500:1279:0:0:1702,1722,1801:513:133:4:0
 | 
			
		||||
:Sportsworld
 | 
			
		||||
SPORT 1,PREMIERE SPORT 1:11719:hC34:S19.2E:27500:255:256,257:0:1702,1722,1801:17:133:3:0
 | 
			
		||||
SPORT 2,PREMIERE SPORT 2:12031:hC34:S19.2E:27500:3839:3840,3841:0:1702,1722,1801:27:133:4:0
 | 
			
		||||
SPORT 1,PREMIERE SPORT 1:11719:hC34:S19.2E:27500:255:256=deu,257=deu:0:1702,1722,1801:17:133:3:0
 | 
			
		||||
SPORT 2,PREMIERE SPORT 2:12031:hC34:S19.2E:27500:3839:3840=deu,3841=deu:0:1702,1722,1801:27:133:4:0
 | 
			
		||||
:Beta Digital
 | 
			
		||||
N24:12480:vC34:S19.2E:27500:2047:2048:36:0:47:133:33:0
 | 
			
		||||
Liberty TV.com:12610:vC56:S19.2E:22000:941:943:0:0:12199:1:1112:0
 | 
			
		||||
Liberty TV.com:12610:vC56:S19.2E:22000:941:943=deu:0:0:12199:1:1112:0
 | 
			
		||||
:-
 | 
			
		||||
ProSieben Austria:12051:vC34:S19.2E:27500:161:84:36:0:20002:1:1082:0
 | 
			
		||||
Kabel 1 Schweiz:12051:vC34:S19.2E:27500:162:163:165:0:20003:1:1082:0
 | 
			
		||||
Kabel 1 Austria:12051:vC34:S19.2E:27500:166:167:169:0:20004:1:1082:0
 | 
			
		||||
ProSieben Austria:12051:vC34:S19.2E:27500:161:84=deu:36:0:20002:1:1082:0
 | 
			
		||||
Kabel 1 Schweiz:12051:vC34:S19.2E:27500:162:163=deu:165:0:20003:1:1082:0
 | 
			
		||||
Kabel 1 Austria:12051:vC34:S19.2E:27500:166:167=deu:169:0:20004:1:1082:0
 | 
			
		||||
ProSieben Schweiz:12051:vC34:S19.2E:27500:289:290:33:0:20001:1:1082:0
 | 
			
		||||
FRANCE 5:12207:vC34:S19.2E:27500:160:80:32:0:8501:1:1090:0
 | 
			
		||||
LCP:12207:vC34:S19.2E:27500:165:100:0:0:8506:1:1090:0
 | 
			
		||||
FRANCE 5:12207:vC34:S19.2E:27500:160:80=fra:32:0:8501:1:1090:0
 | 
			
		||||
LCP:12207:vC34:S19.2E:27500:165:100=fra:0:0:8506:1:1090:0
 | 
			
		||||
ESCALES:12285:vC34:S19.2E:27500:165:100:0:500,100:17025:1:1094:0
 | 
			
		||||
CANAL CLUB:12324:vC34:S19.2E:27500:160:80:0:0:8612:1:1096:0
 | 
			
		||||
ASTRA-Mosaic:12552:vC56:S19.2E:22000:175:176:0:0:3988:1:1108:0
 | 
			
		||||
ASTRA-Mosaic 2:12552:vC56:S19.2E:22000:179:120:0:0:3987:1:1108:0
 | 
			
		||||
ASTRA-Mosaic 3:12552:vC56:S19.2E:22000:182:169:0:0:3986:1:1108:0
 | 
			
		||||
ASTRA-Mosaic 4:12552:vC56:S19.2E:22000:185:170:0:0:3985:1:1108:0
 | 
			
		||||
ASTRA-Mosaic 5:12552:vC56:S19.2E:22000:163:164:0:0:3984:1:1108:0
 | 
			
		||||
Chamber TV:12552:vC56:S19.2E:22000:55:56:0:0:12180:1:1108:0
 | 
			
		||||
RTL TELE Letzebuerg:12552:vC56:S19.2E:22000:168:144,146:74:0:3994:1:1108:0
 | 
			
		||||
Yorin:12574:hC56:S19.2E:22000:512+8190:84:33:622,602,100:5010:53:1109:0
 | 
			
		||||
MTV2 Pop Channel:12226:hC34:S19.2E:27500:513:661:577:0:28640:1:1091:0
 | 
			
		||||
CANAL CLUB:12324:vC34:S19.2E:27500:160:80=fra:0:0:8612:1:1096:0
 | 
			
		||||
ASTRA-Mosaic:12551:vC56:S19.2E:22000:175:176=fra:0:0:3988:1:1108:0
 | 
			
		||||
ASTRA-Mosaic 2:12551:vC56:S19.2E:22000:179:120=fra:0:0:3987:1:1108:0
 | 
			
		||||
ASTRA-Mosaic 3:12551:vC56:S19.2E:22000:182:169=fra:0:0:3986:1:1108:0
 | 
			
		||||
ASTRA-Mosaic 4:12551:vC56:S19.2E:22000:185:170=fra:0:0:3985:1:1108:0
 | 
			
		||||
ASTRA-Mosaic 5:12551:vC56:S19.2E:22000:163:164:0:0:3984:1:1108:0
 | 
			
		||||
Chamber TV:12551:vC56:S19.2E:22000:55:56=ltz:0:0:12180:1:1108:0
 | 
			
		||||
RTL TELE Letzebuerg:12551:vC56:S19.2E:22000:168:144=eng,146=fra,151=ltz:74:0:3994:1:1108:0
 | 
			
		||||
Yorin:12574:hC56:S19.2E:22000:512+8190:84=dut:33:622,602,100:5010:53:1109:0
 | 
			
		||||
MTV2 Pop Channel:12226:hC34:S19.2E:27500:513:661=deu:577:0:28640:1:1091:0
 | 
			
		||||
Via 1 - Sch<63>ner Reisen:12148:h:S19.2E:27500:511:512:0:0:44:0:0:0
 | 
			
		||||
VIVA:12669:vC56:S19.2E:22000:309:310:311:0:12732:1:1116:0
 | 
			
		||||
VIVA PLUS:12552:vC56:S19.2E:22000:171:172:173:0:12120:1:1108:0
 | 
			
		||||
VIVA:12669:vC56:S19.2E:22000:309:310=deu:311:0:12732:1:1116:0
 | 
			
		||||
VIVA PLUS:12551:vC56:S19.2E:22000:171:172=deu:173:0:12120:1:1108:0
 | 
			
		||||
MTV Central:11739:vC34:S19.2E:27500:3031:3032:3034:0:28653:1:1066:0
 | 
			
		||||
QVC GERMANY:12552:vC56:S19.2E:22000:165:166:167:0:12100:1:1108:0
 | 
			
		||||
QVC GERMANY:12551:vC56:S19.2E:22000:165:166:167:0:12100:1:1108:0
 | 
			
		||||
TELE 5:12480:vC34:S19.2E:27500:1535:1536:38:0:51:133:33:0
 | 
			
		||||
:@201 Sky
 | 
			
		||||
Sky One:106:h:S28.2E:0:160:80:0:30:222:0:0:0
 | 
			
		||||
@@ -95,14 +95,14 @@ itv2:226:h:S28.2E:0:160:80:0:30:451:0:0:0
 | 
			
		||||
sci-fi:130:h:S28.2E:0:160:80:0:30:161:0:0:0
 | 
			
		||||
Paramount Comedy:127:h:S28.2E:0:160:80:0:30:185:0:0:0
 | 
			
		||||
:@900 Some 'seed' channels
 | 
			
		||||
Chelsea TV:11778:vC23:S28.2E:27500:2308+2304:2309:0:960,961:9307:2:2004:0
 | 
			
		||||
Sky One:12285:vC23:S28.2E:27500:2311+2304:2312,2313:2307:960,961:4703:2:2030:0
 | 
			
		||||
WDR M<>nster:12421:hC34:S19.2E:27500:101:102:104:0:28310:1:1201:0
 | 
			
		||||
Going Places:10920:hC56:S28.2E:22000:2310+2304:2311:2312:0:5008:2:2055:0
 | 
			
		||||
Animal Plnt+:12070:hC23:S28.2E:27500:2315+2307:2316:0:960,961:50002:2:2019:0
 | 
			
		||||
S1T:12285:vC23:S28.2E:27500:2311+2304:2312,2313:2314:960,961:4409:2:2030:0
 | 
			
		||||
CNN:12051:vC23:S28.2E:27500:2309:2311:2310:0:7140:2:2018:0
 | 
			
		||||
BBC PARL'MNT:12129:vC23:S28.2E:27500:2306:2308,2309:2307:0:7300:2:2022:0
 | 
			
		||||
AL HAYAT:11200:vC56:S13.0E:27500:413:414:0:0:4733:318:13400:0
 | 
			
		||||
Chelsea TV:11778:vC23:S28.2E:27500:2308+2304:2309=eng:0:960,961:9307:2:2004:0
 | 
			
		||||
Sky One:12285:vC23:S28.2E:27500:2311+2304:2312=eng,2313=NAR:2307:960,961:4703:2:2030:0
 | 
			
		||||
WDR M<>nster:12421:hC34:S19.2E:27500:101:102=deu:104:0:28310:1:1201:0
 | 
			
		||||
Going Places:10920:hC56:S28.2E:22000:2310+2304:2311=eng:2312:0:5008:2:2055:0
 | 
			
		||||
Animal Plnt+:12070:hC23:S28.2E:27500:2315+2307:2316=eng:0:960,961:50002:2:2019:0
 | 
			
		||||
S1T:12285:vC23:S28.2E:27500:2311+2304:2312=eng,2313=NAR:2314:960,961:4409:2:2030:0
 | 
			
		||||
CNN:12051:vC23:S28.2E:27500:2309:2311=eng:2310:0:7140:2:2018:0
 | 
			
		||||
BBC PARL'MNT:12129:vC23:S28.2E:27500:2306:2308=eng,2309=eng:2307:0:7300:2:2022:0
 | 
			
		||||
AL HAYAT:11200:vC56:S13.0E:27500:413:414=eng:0:0:4733:318:13400:0
 | 
			
		||||
EURO1080:12168:vC34:S19.2E:27500:308:256:0:FF:21100:1:1088:0
 | 
			
		||||
:@1000 New channels
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										20
									
								
								channels.h
									
									
									
									
									
								
							
							
						
						
									
										20
									
								
								channels.h
									
									
									
									
									
								
							@@ -4,7 +4,7 @@
 | 
			
		||||
 * See the main source file 'vdr.c' for copyright information and
 | 
			
		||||
 * how to reach the author.
 | 
			
		||||
 *
 | 
			
		||||
 * $Id: channels.h 1.12 2004/01/11 15:20:18 kls Exp $
 | 
			
		||||
 * $Id: channels.h 1.13 2004/01/25 15:31:16 kls Exp $
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#ifndef __CHANNELS_H
 | 
			
		||||
@@ -26,7 +26,7 @@
 | 
			
		||||
#define CHANNELMOD_TRANSP   0x20
 | 
			
		||||
#define CHANNELMOD_RETUNE   (CHANNELMOD_PIDS | CHANNELMOD_CA | CHANNELMOD_TRANSP)
 | 
			
		||||
 | 
			
		||||
#define MAXAPIDS  2
 | 
			
		||||
#define MAXAPIDS 32
 | 
			
		||||
#define MAXCAIDS  8
 | 
			
		||||
 | 
			
		||||
struct tChannelParameterMap {
 | 
			
		||||
@@ -79,8 +79,10 @@ private:
 | 
			
		||||
  int srate;
 | 
			
		||||
  int vpid;
 | 
			
		||||
  int ppid;
 | 
			
		||||
  int apid1, apid2;
 | 
			
		||||
  int dpid1, dpid2;
 | 
			
		||||
  int apids[MAXAPIDS + 1]; // list is zero-terminated
 | 
			
		||||
  char alangs[MAXAPIDS][4];
 | 
			
		||||
  int dpids[MAXAPIDS + 1]; // list is zero-terminated
 | 
			
		||||
  char dlangs[MAXAPIDS][4];
 | 
			
		||||
  int tpid;
 | 
			
		||||
  int caids[MAXCAIDS + 1]; // list is zero-terminated
 | 
			
		||||
  int nid;
 | 
			
		||||
@@ -116,10 +118,10 @@ public:
 | 
			
		||||
  int Srate(void) const { return srate; }
 | 
			
		||||
  int Vpid(void) const { return vpid; }
 | 
			
		||||
  int Ppid(void) const { return ppid; }
 | 
			
		||||
  int Apid1(void) const { return apid1; }
 | 
			
		||||
  int Apid2(void) const { return apid2; }
 | 
			
		||||
  int Dpid1(void) const { return dpid1; }
 | 
			
		||||
  int Dpid2(void) const { return dpid2; }
 | 
			
		||||
  int Apid1(void) const { return apids[0]; }
 | 
			
		||||
  int Apid2(void) const { return apids[1]; }
 | 
			
		||||
  int Dpid1(void) const { return dpids[0]; }
 | 
			
		||||
  int Dpid2(void) const { return dpids[1]; }
 | 
			
		||||
  int Tpid(void) const { return tpid; }
 | 
			
		||||
  int Ca(int Index = 0) const { return Index < MAXCAIDS ? caids[Index] : 0; }
 | 
			
		||||
  int Nid(void) const { return nid; }
 | 
			
		||||
@@ -148,7 +150,7 @@ public:
 | 
			
		||||
  bool SetTerrTransponderData(int Source, int Frequency, int Bandwidth, int Modulation, int Hierarchy, int CodeRateH, int CodeRateL, int Guard, int Transmission, bool Log = true);
 | 
			
		||||
  void SetId(int Nid, int Tid, int Sid, int Rid = 0, bool Log = true);
 | 
			
		||||
  void SetName(const char *Name, bool Log = true);
 | 
			
		||||
  void SetPids(int Vpid, int Ppid, int Apid1, int Apid2, int Dpid1, int Dpid2, int Tpid);
 | 
			
		||||
  void SetPids(int Vpid, int Ppid, int *Apids, char ALangs[][4], int *Dpids, char DLangs[][4], int Tpid);
 | 
			
		||||
  void SetCaIds(const int *CaIds); // list must be zero-terminated
 | 
			
		||||
  void SetCaDescriptors(int Level);
 | 
			
		||||
  };
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										4
									
								
								config.c
									
									
									
									
									
								
							
							
						
						
									
										4
									
								
								config.c
									
									
									
									
									
								
							@@ -4,7 +4,7 @@
 | 
			
		||||
 * See the main source file 'vdr.c' for copyright information and
 | 
			
		||||
 * how to reach the author.
 | 
			
		||||
 *
 | 
			
		||||
 * $Id: config.c 1.120 2004/01/11 15:38:11 kls Exp $
 | 
			
		||||
 * $Id: config.c 1.121 2004/01/25 14:41:10 kls Exp $
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#include "config.h"
 | 
			
		||||
@@ -403,7 +403,7 @@ void cSetup::StoreLanguages(const char *Name, int *Values)
 | 
			
		||||
  for (int i = 0; i < I18nNumLanguages; i++) {
 | 
			
		||||
      if (Values[i] < 0)
 | 
			
		||||
         break;
 | 
			
		||||
      const char *s = I18nLanguageAbbreviation(Values[i]);
 | 
			
		||||
      const char *s = I18nLanguageCode(Values[i]);
 | 
			
		||||
      if (s) {
 | 
			
		||||
         if (q > buffer)
 | 
			
		||||
            *q++ = ' ';
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										6
									
								
								config.h
									
									
									
									
									
								
							
							
						
						
									
										6
									
								
								config.h
									
									
									
									
									
								
							@@ -4,7 +4,7 @@
 | 
			
		||||
 * See the main source file 'vdr.c' for copyright information and
 | 
			
		||||
 * how to reach the author.
 | 
			
		||||
 *
 | 
			
		||||
 * $Id: config.h 1.183 2004/01/11 21:42:23 kls Exp $
 | 
			
		||||
 * $Id: config.h 1.184 2004/01/24 10:03:55 kls Exp $
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#ifndef __CONFIG_H
 | 
			
		||||
@@ -20,8 +20,8 @@
 | 
			
		||||
#include "i18n.h"
 | 
			
		||||
#include "tools.h"
 | 
			
		||||
 | 
			
		||||
#define VDRVERSION  "1.3.2"
 | 
			
		||||
#define VDRVERSNUM   10302  // Version * 10000 + Major * 100 + Minor
 | 
			
		||||
#define VDRVERSION  "1.3.3"
 | 
			
		||||
#define VDRVERSNUM   10303  // Version * 10000 + Major * 100 + Minor
 | 
			
		||||
 | 
			
		||||
#define MAXPRIORITY 99
 | 
			
		||||
#define MAXLIFETIME 99
 | 
			
		||||
 
 | 
			
		||||
@@ -4,7 +4,7 @@
 | 
			
		||||
 * See the main source file 'vdr.c' for copyright information and
 | 
			
		||||
 * how to reach the author.
 | 
			
		||||
 *
 | 
			
		||||
 * $Id: dvbdevice.c 1.78 2004/01/10 12:21:41 kls Exp $
 | 
			
		||||
 * $Id: dvbdevice.c 1.79 2004/01/25 13:50:21 kls Exp $
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#include "dvbdevice.h"
 | 
			
		||||
@@ -272,7 +272,7 @@ void cDvbTuner::Action(void)
 | 
			
		||||
           if (ciHandler->Process() && useCa) {
 | 
			
		||||
              if (tunerStatus == tsLocked) {
 | 
			
		||||
                 for (int Slot = 0; Slot < ciHandler->NumSlots(); Slot++) {
 | 
			
		||||
                     cCiCaPmt CaPmt(channel.Source(), channel.Frequency(), channel.Sid(), ciHandler->GetCaSystemIds(Slot));
 | 
			
		||||
                     cCiCaPmt CaPmt(channel.Source(), channel.Transponder(), channel.Sid(), ciHandler->GetCaSystemIds(Slot));
 | 
			
		||||
                     if (CaPmt.Valid()) {
 | 
			
		||||
                        CaPmt.AddPid(channel.Vpid(), 2);
 | 
			
		||||
                        CaPmt.AddPid(channel.Apid1(), 4);
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										23
									
								
								i18n.c
									
									
									
									
									
								
							
							
						
						
									
										23
									
								
								i18n.c
									
									
									
									
									
								
							@@ -4,7 +4,7 @@
 | 
			
		||||
 * See the main source file 'vdr.c' for copyright information and
 | 
			
		||||
 * how to reach the author.
 | 
			
		||||
 *
 | 
			
		||||
 * $Id: i18n.c 1.143 2004/01/17 14:39:38 kls Exp $
 | 
			
		||||
 * $Id: i18n.c 1.146 2004/01/25 14:41:02 kls Exp $
 | 
			
		||||
 *
 | 
			
		||||
 * Translations provided by:
 | 
			
		||||
 *
 | 
			
		||||
@@ -827,7 +827,7 @@ const tI18nPhrase Phrases[] = {
 | 
			
		||||
    "",//TODO
 | 
			
		||||
    "",//TODO
 | 
			
		||||
    "",//TODO
 | 
			
		||||
    "",//TODO
 | 
			
		||||
    "P<EFBFBD>ivit<EFBFBD>",
 | 
			
		||||
    "",//TODO
 | 
			
		||||
    "",//TODO
 | 
			
		||||
    "",//TODO
 | 
			
		||||
@@ -4233,24 +4233,27 @@ const char * const * I18nCharSets(void)
 | 
			
		||||
  return &Phrases[1][0];
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
const char * I18nLanguageAbbreviation(int Index)
 | 
			
		||||
const char * I18nLanguageCode(int Index)
 | 
			
		||||
{
 | 
			
		||||
  return Index < I18nNumLanguages ? Phrases[2][Index] : NULL;
 | 
			
		||||
  return 0 <= Index && Index < I18nNumLanguages ? Phrases[2][Index] : NULL;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
int I18nLanguageIndex(const char Code[3])
 | 
			
		||||
int I18nLanguageIndex(const char *Code)
 | 
			
		||||
{
 | 
			
		||||
  char s[4];
 | 
			
		||||
  memcpy(s, Code, 3);
 | 
			
		||||
  s[3] = 0;
 | 
			
		||||
  for (int i = 0; i < I18nNumLanguages; i++) {
 | 
			
		||||
      if (strcasestr(Phrases[2][i], s))
 | 
			
		||||
      if (strcasestr(Phrases[2][i], Code))
 | 
			
		||||
         return i;
 | 
			
		||||
      }
 | 
			
		||||
  //dsyslog("unknown language code: '%s'", s);
 | 
			
		||||
  //dsyslog("unknown language code: '%s'", Code);
 | 
			
		||||
  return -1;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
const char *I18nNormalizeLanguageCode(const char *Code)
 | 
			
		||||
{
 | 
			
		||||
  int n = I18nLanguageIndex(Code);
 | 
			
		||||
  return n >= 0 ? I18nLanguageCode(n) : Code;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
bool I18nIsPreferredLanguage(int *PreferredLanguages, int LanguageIndex, int &OldPreference)
 | 
			
		||||
{
 | 
			
		||||
  for (int i = 0; i < I18nNumLanguages; i++) {
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										7
									
								
								i18n.h
									
									
									
									
									
								
							
							
						
						
									
										7
									
								
								i18n.h
									
									
									
									
									
								
							@@ -4,7 +4,7 @@
 | 
			
		||||
 * See the main source file 'vdr.c' for copyright information and
 | 
			
		||||
 * how to reach the author.
 | 
			
		||||
 *
 | 
			
		||||
 * $Id: i18n.h 1.9 2004/01/16 12:43:47 kls Exp $
 | 
			
		||||
 * $Id: i18n.h 1.11 2004/01/25 14:40:50 kls Exp $
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#ifndef __I18N_H
 | 
			
		||||
@@ -22,8 +22,9 @@ const char *I18nTranslate(const char *s, const char *Plugin = NULL);
 | 
			
		||||
 | 
			
		||||
const char * const * I18nLanguages(void);
 | 
			
		||||
const char * const * I18nCharSets(void);
 | 
			
		||||
const char * I18nLanguageAbbreviation(int Index);
 | 
			
		||||
int I18nLanguageIndex(const char Code[3]);
 | 
			
		||||
const char * I18nLanguageCode(int Index);
 | 
			
		||||
int I18nLanguageIndex(const char *Code);
 | 
			
		||||
const char *I18nNormalizeLanguageCode(const char *Code);
 | 
			
		||||
bool I18nIsPreferredLanguage(int *PreferredLanguages, int LanguageIndex, int &OldPreference);
 | 
			
		||||
 | 
			
		||||
#ifdef PLUGIN_NAME_I18N
 | 
			
		||||
 
 | 
			
		||||
@@ -6,7 +6,7 @@
 | 
			
		||||
 *   the Free Software Foundation; either version 2 of the License, or     *
 | 
			
		||||
 *   (at your option) any later version.                                   *
 | 
			
		||||
 *                                                                         *
 | 
			
		||||
 *   $Id: descriptor.c 1.3 2004/01/12 16:17:20 kls Exp $
 | 
			
		||||
 *   $Id: descriptor.c 1.5 2004/01/24 14:52:41 kls Exp $
 | 
			
		||||
 *                                                                         *
 | 
			
		||||
 ***************************************************************************/
 | 
			
		||||
 | 
			
		||||
@@ -22,6 +22,7 @@ void ShortEventDescriptor::Parse() {
 | 
			
		||||
   languageCode[0]=s->lang_code1;
 | 
			
		||||
   languageCode[1]=s->lang_code2;
 | 
			
		||||
   languageCode[2]=s->lang_code3;
 | 
			
		||||
   languageCode[3]=0;
 | 
			
		||||
   name.setDataAndOffset(data+offset, s->event_name_length, offset);
 | 
			
		||||
   const descr_short_event_mid *mid;
 | 
			
		||||
   data.setPointerAndOffset<const descr_short_event_mid>(mid, offset);
 | 
			
		||||
@@ -42,6 +43,7 @@ void ExtendedEventDescriptor::Parse() {
 | 
			
		||||
   languageCode[0]=s->lang_code1;
 | 
			
		||||
   languageCode[1]=s->lang_code2;
 | 
			
		||||
   languageCode[2]=s->lang_code3;
 | 
			
		||||
   languageCode[3]=0;
 | 
			
		||||
   itemLoop.setDataAndOffset(data+offset, s->length_of_items, offset);
 | 
			
		||||
   const descr_extended_event_mid *mid;
 | 
			
		||||
   data.setPointerAndOffset<const descr_extended_event_mid>(mid, offset);
 | 
			
		||||
@@ -183,6 +185,7 @@ void ParentalRatingDescriptor::Rating::Parse() {
 | 
			
		||||
   languageCode[0]=s->lang_code1;
 | 
			
		||||
   languageCode[1]=s->lang_code2;
 | 
			
		||||
   languageCode[2]=s->lang_code3;
 | 
			
		||||
   languageCode[3]=0;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
int CaDescriptor::getCaType() const {
 | 
			
		||||
@@ -398,6 +401,7 @@ void ComponentDescriptor::Parse() {
 | 
			
		||||
   languageCode[0]=s->lang_code1;
 | 
			
		||||
   languageCode[1]=s->lang_code2;
 | 
			
		||||
   languageCode[2]=s->lang_code3;
 | 
			
		||||
   languageCode[3]=0;
 | 
			
		||||
   description.setData(data+offset, getLength()-offset);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@@ -462,6 +466,7 @@ void MultilingualNameDescriptor::Name::Parse() {
 | 
			
		||||
   languageCode[0]=s->lang_code1;
 | 
			
		||||
   languageCode[1]=s->lang_code2;
 | 
			
		||||
   languageCode[2]=s->lang_code3;
 | 
			
		||||
   languageCode[3]=0;
 | 
			
		||||
   name.setData(data+offset, s->text_length);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@@ -486,6 +491,7 @@ void MultilingualServiceNameDescriptor::Name::Parse() {
 | 
			
		||||
   languageCode[0]=s->lang_code1;
 | 
			
		||||
   languageCode[1]=s->lang_code2;
 | 
			
		||||
   languageCode[2]=s->lang_code3;
 | 
			
		||||
   languageCode[3]=0;
 | 
			
		||||
   providerName.setDataAndOffset(data+offset, s->text_length, offset);
 | 
			
		||||
   const entry_multilingual_service_name_mid *mid;
 | 
			
		||||
   data.setPointerAndOffset<const entry_multilingual_service_name_mid>(mid, offset);
 | 
			
		||||
@@ -514,6 +520,15 @@ LinkageType LinkageDescriptor::getLinkageType() const {
 | 
			
		||||
   return (LinkageType)s->linkage_type;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void ISO639LanguageDescriptor::Parse() {
 | 
			
		||||
   unsigned int offset=0;
 | 
			
		||||
   data.setPointerAndOffset<const descr_iso_639_language>(s, offset);
 | 
			
		||||
   languageCode[0]=s->lang_code1;
 | 
			
		||||
   languageCode[1]=s->lang_code2;
 | 
			
		||||
   languageCode[2]=s->lang_code3;
 | 
			
		||||
   languageCode[3]=0;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void ApplicationSignallingDescriptor::Parse() {
 | 
			
		||||
   entryLoop.setData(data+sizeof(descr_application_signalling), getLength()-sizeof(descr_application_signalling));
 | 
			
		||||
}
 | 
			
		||||
@@ -582,6 +597,7 @@ void MHP_ApplicationNameDescriptor::NameEntry::Parse() {
 | 
			
		||||
   languageCode[0]=s->lang_code1;
 | 
			
		||||
   languageCode[1]=s->lang_code2;
 | 
			
		||||
   languageCode[2]=s->lang_code3;
 | 
			
		||||
   languageCode[3]=0;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
int MHP_TransportProtocolDescriptor::getProtocolId() const {
 | 
			
		||||
 
 | 
			
		||||
@@ -6,7 +6,7 @@
 | 
			
		||||
 *   the Free Software Foundation; either version 2 of the License, or     *
 | 
			
		||||
 *   (at your option) any later version.                                   *
 | 
			
		||||
 *                                                                         *
 | 
			
		||||
 *   $Id: descriptor.h 1.3 2004/01/12 16:17:47 kls Exp $
 | 
			
		||||
 *   $Id: descriptor.h 1.5 2004/01/24 14:52:05 kls Exp $
 | 
			
		||||
 *                                                                         *
 | 
			
		||||
 ***************************************************************************/
 | 
			
		||||
 | 
			
		||||
@@ -20,7 +20,7 @@ namespace SI {
 | 
			
		||||
 | 
			
		||||
class ShortEventDescriptor : public Descriptor {
 | 
			
		||||
public:
 | 
			
		||||
   char languageCode[3];
 | 
			
		||||
   char languageCode[4];
 | 
			
		||||
   String name; //name of the event
 | 
			
		||||
   String text; //short description
 | 
			
		||||
protected:
 | 
			
		||||
@@ -37,7 +37,7 @@ public:
 | 
			
		||||
   protected:
 | 
			
		||||
      virtual void Parse();
 | 
			
		||||
   };
 | 
			
		||||
   char languageCode[3];
 | 
			
		||||
   char languageCode[4];
 | 
			
		||||
   int getDescriptorNumber();
 | 
			
		||||
   int getLastDescriptorNumber();
 | 
			
		||||
   StructureLoop<Item> itemLoop;
 | 
			
		||||
@@ -93,7 +93,7 @@ class ParentalRatingDescriptor : public Descriptor {
 | 
			
		||||
public:
 | 
			
		||||
   class Rating : public LoopElement {
 | 
			
		||||
   public:
 | 
			
		||||
      char languageCode[3];
 | 
			
		||||
      char languageCode[4];
 | 
			
		||||
      int getRating() const;
 | 
			
		||||
      virtual int getLength() { return sizeof(parental_rating); }
 | 
			
		||||
   protected:
 | 
			
		||||
@@ -258,7 +258,7 @@ public:
 | 
			
		||||
   int getStreamContent() const;
 | 
			
		||||
   int getComponentType() const;
 | 
			
		||||
   int getComponentTag() const;
 | 
			
		||||
   char languageCode[3];
 | 
			
		||||
   char languageCode[4];
 | 
			
		||||
   String description;
 | 
			
		||||
protected:
 | 
			
		||||
   virtual void Parse();
 | 
			
		||||
@@ -317,7 +317,7 @@ class MultilingualNameDescriptor : public Descriptor {
 | 
			
		||||
public:
 | 
			
		||||
   class Name : public LoopElement {
 | 
			
		||||
   public:
 | 
			
		||||
      char languageCode[3];
 | 
			
		||||
      char languageCode[4];
 | 
			
		||||
      String name;
 | 
			
		||||
      virtual int getLength() { return sizeof(entry_multilingual_name)+name.getLength(); }
 | 
			
		||||
   protected:
 | 
			
		||||
@@ -374,6 +374,15 @@ private:
 | 
			
		||||
   const descr_linkage *s;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
class ISO639LanguageDescriptor : public Descriptor {
 | 
			
		||||
public:
 | 
			
		||||
   char languageCode[4];
 | 
			
		||||
protected:
 | 
			
		||||
   virtual void Parse();
 | 
			
		||||
private:
 | 
			
		||||
   const descr_iso_639_language *s;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
//a descriptor currently unimplemented in this library
 | 
			
		||||
class UnimplementedDescriptor : public Descriptor {
 | 
			
		||||
protected:
 | 
			
		||||
@@ -427,7 +436,7 @@ public:
 | 
			
		||||
   class NameEntry : public LoopElement {
 | 
			
		||||
   public:
 | 
			
		||||
      virtual int getLength() { return sizeof(descr_application_name_entry)+name.getLength(); }
 | 
			
		||||
      char languageCode[3];
 | 
			
		||||
      char languageCode[4];
 | 
			
		||||
      String name;
 | 
			
		||||
   protected:
 | 
			
		||||
      virtual void Parse();
 | 
			
		||||
 
 | 
			
		||||
@@ -6,7 +6,7 @@
 | 
			
		||||
 *   the Free Software Foundation; either version 2 of the License, or     *
 | 
			
		||||
 *   (at your option) any later version.                                   *
 | 
			
		||||
 *                                                                         *
 | 
			
		||||
 *   $Id: si.c 1.5 2004/01/12 22:19:34 kls Exp $
 | 
			
		||||
 *   $Id: si.c 1.6 2004/01/23 14:27:45 kls Exp $
 | 
			
		||||
 *                                                                         *
 | 
			
		||||
 ***************************************************************************/
 | 
			
		||||
 | 
			
		||||
@@ -323,6 +323,9 @@ Descriptor *Descriptor::getDescriptor(CharArray da, DescriptorTagDomain domain)
 | 
			
		||||
         case LinkageDescriptorTag:
 | 
			
		||||
            d=new LinkageDescriptor();
 | 
			
		||||
            break;
 | 
			
		||||
         case ISO639LanguageDescriptorTag:
 | 
			
		||||
            d=new ISO639LanguageDescriptor();
 | 
			
		||||
            break;
 | 
			
		||||
 | 
			
		||||
         //note that it is no problem to implement one
 | 
			
		||||
         //of the unimplemented descriptors.
 | 
			
		||||
@@ -335,7 +338,6 @@ Descriptor *Descriptor::getDescriptor(CharArray da, DescriptorTagDomain domain)
 | 
			
		||||
         case DataStreamAlignmentDescriptorTag:
 | 
			
		||||
         case TargetBackgroundGridDescriptorTag:
 | 
			
		||||
         case VideoWindowDescriptorTag:
 | 
			
		||||
         case ISO639LanguageDescriptorTag:
 | 
			
		||||
         case SystemClockDescriptorTag:
 | 
			
		||||
         case MultiplexBufferUtilizationDescriptorTag:
 | 
			
		||||
         case CopyrightDescriptorTag:
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										10
									
								
								menu.c
									
									
									
									
									
								
							
							
						
						
									
										10
									
								
								menu.c
									
									
									
									
									
								
							@@ -4,7 +4,7 @@
 | 
			
		||||
 * See the main source file 'vdr.c' for copyright information and
 | 
			
		||||
 * how to reach the author.
 | 
			
		||||
 *
 | 
			
		||||
 * $Id: menu.c 1.281 2004/01/17 14:17:00 kls Exp $
 | 
			
		||||
 * $Id: menu.c 1.282 2004/01/24 13:22:04 kls Exp $
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#include "menu.h"
 | 
			
		||||
@@ -577,10 +577,10 @@ void cMenuEditChannel::Setup(void)
 | 
			
		||||
  Add(new cMenuEditIntItem( tr("Frequency"),    &data.frequency));
 | 
			
		||||
  Add(new cMenuEditIntItem( tr("Vpid"),         &data.vpid,  0, 0x1FFF));
 | 
			
		||||
  Add(new cMenuEditIntItem( tr("Ppid"),         &data.ppid,  0, 0x1FFF));
 | 
			
		||||
  Add(new cMenuEditIntItem( tr("Apid1"),        &data.apid1, 0, 0x1FFF));
 | 
			
		||||
  Add(new cMenuEditIntItem( tr("Apid2"),        &data.apid2, 0, 0x1FFF));
 | 
			
		||||
  Add(new cMenuEditIntItem( tr("Dpid1"),        &data.dpid1, 0, 0x1FFF));
 | 
			
		||||
  Add(new cMenuEditIntItem( tr("Dpid2"),        &data.dpid2, 0, 0x1FFF));
 | 
			
		||||
  Add(new cMenuEditIntItem( tr("Apid1"),        &data.apids[0], 0, 0x1FFF));
 | 
			
		||||
  Add(new cMenuEditIntItem( tr("Apid2"),        &data.apids[1], 0, 0x1FFF));
 | 
			
		||||
  Add(new cMenuEditIntItem( tr("Dpid1"),        &data.dpids[0], 0, 0x1FFF));
 | 
			
		||||
  Add(new cMenuEditIntItem( tr("Dpid2"),        &data.dpids[1], 0, 0x1FFF));
 | 
			
		||||
  Add(new cMenuEditIntItem( tr("Tpid"),         &data.tpid,  0, 0x1FFF));
 | 
			
		||||
  Add(new cMenuEditCaItem(  tr("CA"),           &data.caids[0], true));//XXX
 | 
			
		||||
  Add(new cMenuEditIntItem( tr("Sid"),          &data.sid, 0));
 | 
			
		||||
 
 | 
			
		||||
@@ -4,7 +4,7 @@
 | 
			
		||||
 * See the main source file 'vdr.c' for copyright information and
 | 
			
		||||
 * how to reach the author.
 | 
			
		||||
 *
 | 
			
		||||
 * $Id: menuitems.c 1.13 2003/04/12 09:21:33 kls Exp $
 | 
			
		||||
 * $Id: menuitems.c 1.14 2004/01/25 15:40:55 kls Exp $
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#include "menuitems.h"
 | 
			
		||||
@@ -37,6 +37,7 @@ void cMenuEditItem::SetValue(const char *Value)
 | 
			
		||||
  asprintf(&buffer, "%s:\t%s", name, value);
 | 
			
		||||
  SetText(buffer, false);
 | 
			
		||||
  Display();
 | 
			
		||||
  cStatus::MsgOsdCurrentItem(buffer);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// --- cMenuEditIntItem ------------------------------------------------------
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										49
									
								
								pat.c
									
									
									
									
									
								
							
							
						
						
									
										49
									
								
								pat.c
									
									
									
									
									
								
							@@ -4,7 +4,7 @@
 | 
			
		||||
 * See the main source file 'vdr.c' for copyright information and
 | 
			
		||||
 * how to reach the author.
 | 
			
		||||
 *
 | 
			
		||||
 * $Id: pat.c 1.5 2004/01/16 15:43:34 kls Exp $
 | 
			
		||||
 * $Id: pat.c 1.7 2004/01/25 15:12:53 kls Exp $
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#include "pat.h"
 | 
			
		||||
@@ -109,7 +109,7 @@ bool cCaDescriptors::Is(int Source, int Transponder, int ServiceId)
 | 
			
		||||
  return source == Source && transponder == Transponder && serviceId == ServiceId;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
bool cCaDescriptors::Is(cCaDescriptors * CaDescriptors)
 | 
			
		||||
bool cCaDescriptors::Is(cCaDescriptors *CaDescriptors)
 | 
			
		||||
{
 | 
			
		||||
  return Is(CaDescriptors->source, CaDescriptors->transponder, CaDescriptors->serviceId);
 | 
			
		||||
}
 | 
			
		||||
@@ -324,6 +324,8 @@ void cPatFilter::Process(u_short Pid, u_char Tid, const u_char *Data, int Length
 | 
			
		||||
        int Ppid = pmt.getPCRPid();
 | 
			
		||||
        int Apids[MAXAPIDS] = { 0 };
 | 
			
		||||
        int Dpids[MAXAPIDS] = { 0 };
 | 
			
		||||
        char ALangs[MAXAPIDS][4];
 | 
			
		||||
        char DLangs[MAXAPIDS][4];
 | 
			
		||||
        int Tpid = 0;
 | 
			
		||||
        int NumApids = 0;
 | 
			
		||||
        int NumDpids = 0;
 | 
			
		||||
@@ -337,28 +339,59 @@ void cPatFilter::Process(u_short Pid, u_char Tid, const u_char *Data, int Length
 | 
			
		||||
              case 3: // STREAMTYPE_11172_AUDIO
 | 
			
		||||
              case 4: // STREAMTYPE_13818_AUDIO
 | 
			
		||||
                      {
 | 
			
		||||
                      if (NumApids < MAXAPIDS)
 | 
			
		||||
                         Apids[NumApids++] = stream.getPid();
 | 
			
		||||
                      if (NumApids < MAXAPIDS) {
 | 
			
		||||
                         Apids[NumApids] = stream.getPid();
 | 
			
		||||
                         *ALangs[NumApids] = 0;
 | 
			
		||||
                         SI::Descriptor *d;
 | 
			
		||||
                         for (SI::Loop::Iterator it; (d = stream.streamDescriptors.getNext(it)); ) {
 | 
			
		||||
                             switch (d->getDescriptorTag()) {
 | 
			
		||||
                               case SI::ISO639LanguageDescriptorTag: {
 | 
			
		||||
                                    SI::ISO639LanguageDescriptor *ld = (SI::ISO639LanguageDescriptor *)d;
 | 
			
		||||
                                    if (*ld->languageCode != '-') { // some use "---" to indicate "none"
 | 
			
		||||
                                       strn0cpy(ALangs[NumApids], I18nNormalizeLanguageCode(ld->languageCode), 4);
 | 
			
		||||
                                       ALangs[NumApids][4] = 0;
 | 
			
		||||
                                       }
 | 
			
		||||
                                    }
 | 
			
		||||
                                    break;
 | 
			
		||||
                               default: ;
 | 
			
		||||
                               }
 | 
			
		||||
                             delete d;
 | 
			
		||||
                             }
 | 
			
		||||
                         NumApids++;
 | 
			
		||||
                         }
 | 
			
		||||
                      }
 | 
			
		||||
                      break;
 | 
			
		||||
              case 5: // STREAMTYPE_13818_PRIVATE
 | 
			
		||||
              case 6: // STREAMTYPE_13818_PES_PRIVATE
 | 
			
		||||
              //XXX case 8: // STREAMTYPE_13818_DSMCC
 | 
			
		||||
                      {
 | 
			
		||||
                      int dpid = 0;
 | 
			
		||||
                      char lang[4] = { 0 };
 | 
			
		||||
                      SI::Descriptor *d;
 | 
			
		||||
                      for (SI::Loop::Iterator it; (d = stream.streamDescriptors.getNext(it)); ) {
 | 
			
		||||
                          switch (d->getDescriptorTag()) {
 | 
			
		||||
                            case SI::AC3DescriptorTag:
 | 
			
		||||
                                 if (NumDpids < MAXAPIDS)
 | 
			
		||||
                                    Dpids[NumDpids++] = stream.getPid();
 | 
			
		||||
                                 dpid = stream.getPid();
 | 
			
		||||
                                 break;
 | 
			
		||||
                            case SI::TeletextDescriptorTag:
 | 
			
		||||
                                 Tpid = stream.getPid();
 | 
			
		||||
                                 break;
 | 
			
		||||
                            case SI::ISO639LanguageDescriptorTag: {
 | 
			
		||||
                                 SI::ISO639LanguageDescriptor *ld = (SI::ISO639LanguageDescriptor *)d;
 | 
			
		||||
                                 strn0cpy(lang, I18nNormalizeLanguageCode(ld->languageCode), 4);
 | 
			
		||||
                                 }
 | 
			
		||||
                                 break;
 | 
			
		||||
                            default: ;
 | 
			
		||||
                            }
 | 
			
		||||
                          delete d;
 | 
			
		||||
                          }
 | 
			
		||||
                      if (dpid) {
 | 
			
		||||
                         if (NumDpids < MAXAPIDS) {
 | 
			
		||||
                            Dpids[NumDpids] = dpid;
 | 
			
		||||
                            strn0cpy(DLangs[NumDpids], lang, 4);
 | 
			
		||||
                            NumDpids++;
 | 
			
		||||
                            }
 | 
			
		||||
                         }
 | 
			
		||||
                      }
 | 
			
		||||
                      break;
 | 
			
		||||
              //default: printf("PID: %5d %5d %2d %3d %3d\n", pmt.getServiceId(), stream.getPid(), stream.getStreamType(), pmt.getVersionNumber(), Channel->Number());//XXX
 | 
			
		||||
@@ -369,10 +402,10 @@ void cPatFilter::Process(u_short Pid, u_char Tid, const u_char *Data, int Length
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
        if (Setup.UpdateChannels >= 2) {
 | 
			
		||||
           Channel->SetPids(Vpid, Vpid ? Ppid : 0, Apids[0], Apids[1], Dpids[0], Dpids[1], Tpid);
 | 
			
		||||
           Channel->SetPids(Vpid, Vpid ? Ppid : 0, Apids, ALangs, Dpids, DLangs, Tpid);
 | 
			
		||||
           Channel->SetCaIds(CaDescriptors->CaIds());
 | 
			
		||||
           Channel->SetCaDescriptors(CaDescriptorHandler.AddCaDescriptors(CaDescriptors));
 | 
			
		||||
           }
 | 
			
		||||
        Channel->SetCaDescriptors(CaDescriptorHandler.AddCaDescriptors(CaDescriptors));
 | 
			
		||||
        }
 | 
			
		||||
     lastPmtScan = 0; // this triggers the next scan
 | 
			
		||||
     Channels.Unlock();
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										12
									
								
								vdr.5
									
									
									
									
									
								
							
							
						
						
									
										12
									
								
								vdr.5
									
									
									
									
									
								
							@@ -8,7 +8,7 @@
 | 
			
		||||
.\" License as specified in the file COPYING that comes with the
 | 
			
		||||
.\" vdr distribution.
 | 
			
		||||
.\"
 | 
			
		||||
.\" $Id: vdr.5 1.22 2004/01/05 15:26:33 kls Exp $
 | 
			
		||||
.\" $Id: vdr.5 1.23 2004/01/25 14:44:59 kls Exp $
 | 
			
		||||
.\"
 | 
			
		||||
.TH vdr 5 "1 Jun 2003" "1.2.0" "Video Disk Recorder Files"
 | 
			
		||||
.SH NAME
 | 
			
		||||
@@ -117,10 +117,18 @@ plus sign, as in
 | 
			
		||||
.B ...:164+17:...
 | 
			
		||||
.TP
 | 
			
		||||
.B APID
 | 
			
		||||
The audio PID (either one number, or two, separated by a comma).
 | 
			
		||||
The audio PID (either one number, or several, separated by commas).
 | 
			
		||||
If this channel also carries Dolby Digital sound, the Dolby PIDs follow
 | 
			
		||||
the audio PIDs, separated by a semicolon, as in
 | 
			
		||||
 | 
			
		||||
.B ...:101,102;103,104:...
 | 
			
		||||
 | 
			
		||||
If certain audio PIDs broadcast in specific languages, the language
 | 
			
		||||
codes for these can be appended to the individual audio or Dolby PID, separated
 | 
			
		||||
by an '=' sign, as in
 | 
			
		||||
 | 
			
		||||
.B ...:101=deu,102=eng;103=deu,104=eng:...
 | 
			
		||||
 | 
			
		||||
.TP
 | 
			
		||||
.B TPID
 | 
			
		||||
The teletext PID.
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user