diff -ur vdr-1.7.13.orig/dvbdevice.c vdr-1.7.13/dvbdevice.c --- vdr-1.7.13.orig/dvbdevice.c 2010-02-21 12:10:35.000000000 -0500 +++ vdr-1.7.13/dvbdevice.c 2010-03-01 12:25:45.000000000 -0500 @@ -27,6 +27,8 @@ #define DVBC_LOCK_TIMEOUT 2000 //ms #define DVBT_TUNE_TIMEOUT 9000 //ms #define DVBT_LOCK_TIMEOUT 2000 //ms +#define ATSC_TUNE_TIMEOUT 9000 //ms +#define ATSC_LOCK_TIMEOUT 2000 //ms // --- DVB Parameter Maps ---------------------------------------------------- @@ -184,17 +186,17 @@ char buffer[64]; char *q = buffer; *q = 0; - ST(" S ") q += sprintf(q, "%c", polarization); - ST(" T") q += PrintParameter(q, 'B', MapToUser(bandwidth, BandwidthValues)); - ST("CST") q += PrintParameter(q, 'C', MapToUser(coderateH, CoderateValues)); - ST(" T") q += PrintParameter(q, 'D', MapToUser(coderateL, CoderateValues)); - ST(" T") q += PrintParameter(q, 'G', MapToUser(guard, GuardValues)); - ST("CST") q += PrintParameter(q, 'I', MapToUser(inversion, InversionValues)); - ST("CST") q += PrintParameter(q, 'M', MapToUser(modulation, ModulationValues)); - ST(" S ") q += PrintParameter(q, 'O', MapToUser(rollOff, RollOffValues)); - ST(" S ") q += PrintParameter(q, 'S', MapToUser(system, SystemValues)); - ST(" T") q += PrintParameter(q, 'T', MapToUser(transmission, TransmissionValues)); - ST(" T") q += PrintParameter(q, 'Y', MapToUser(hierarchy, HierarchyValues)); + ST(" S ") q += sprintf(q, "%c", polarization); + ST(" T") q += PrintParameter(q, 'B', MapToUser(bandwidth, BandwidthValues)); + ST(" CST") q += PrintParameter(q, 'C', MapToUser(coderateH, CoderateValues)); + ST(" T") q += PrintParameter(q, 'D', MapToUser(coderateL, CoderateValues)); + ST(" T") q += PrintParameter(q, 'G', MapToUser(guard, GuardValues)); + ST("ACST") q += PrintParameter(q, 'I', MapToUser(inversion, InversionValues)); + ST("ACST") q += PrintParameter(q, 'M', MapToUser(modulation, ModulationValues)); + ST(" S ") q += PrintParameter(q, 'O', MapToUser(rollOff, RollOffValues)); + ST(" S ") q += PrintParameter(q, 'S', MapToUser(system, SystemValues)); + ST(" T") q += PrintParameter(q, 'T', MapToUser(transmission, TransmissionValues)); + ST(" T") q += PrintParameter(q, 'Y', MapToUser(hierarchy, HierarchyValues)); return buffer; } @@ -486,6 +488,16 @@ tuneTimeout = DVBT_TUNE_TIMEOUT; lockTimeout = DVBT_LOCK_TIMEOUT; } + else if (frontendType == SYS_ATSC) { + // ATSC + SETCMD(DTV_DELIVERY_SYSTEM, frontendType); + SETCMD(DTV_FREQUENCY, FrequencyToHz(channel.Frequency())); + SETCMD(DTV_INVERSION, dtp.Inversion()); + SETCMD(DTV_MODULATION, dtp.Modulation()); + + tuneTimeout = ATSC_TUNE_TIMEOUT; + lockTimeout = ATSC_LOCK_TIMEOUT; + } else { esyslog("ERROR: attempt to set channel with unknown DVB frontend type"); return false; @@ -598,18 +610,18 @@ #undef ST #define ST(s) if (strchr(s, type)) switch (param++) { - case 0: ST(" S ") return new cMenuEditChrItem( tr("Polarization"), &dtp.polarization, "hvlr"); else return GetOsdItem(); - case 1: ST(" S ") return new cMenuEditMapItem( tr("System"), &dtp.system, SystemValues); else return GetOsdItem(); - case 2: ST("CS ") return new cMenuEditIntItem( tr("Srate"), &data.srate); else return GetOsdItem(); - case 3: ST("CST") return new cMenuEditMapItem( tr("Inversion"), &dtp.inversion, InversionValues); else return GetOsdItem(); - case 4: ST("CST") return new cMenuEditMapItem( tr("CoderateH"), &dtp.coderateH, CoderateValues); else return GetOsdItem(); - case 5: ST(" T") return new cMenuEditMapItem( tr("CoderateL"), &dtp.coderateL, CoderateValues); else return GetOsdItem(); - case 6: ST("CST") return new cMenuEditMapItem( tr("Modulation"), &dtp.modulation, ModulationValues); else return GetOsdItem(); - case 7: ST(" T") return new cMenuEditMapItem( tr("Bandwidth"), &dtp.bandwidth, BandwidthValues); else return GetOsdItem(); - case 8: ST(" T") return new cMenuEditMapItem( tr("Transmission"), &dtp.transmission, TransmissionValues); else return GetOsdItem(); - case 9: ST(" T") return new cMenuEditMapItem( tr("Guard"), &dtp.guard, GuardValues); else return GetOsdItem(); - case 10: ST(" T") return new cMenuEditMapItem( tr("Hierarchy"), &dtp.hierarchy, HierarchyValues); else return GetOsdItem(); - case 11: ST(" S ") return new cMenuEditMapItem( tr("Rolloff"), &dtp.rollOff, RollOffValues); else return GetOsdItem(); + case 0: ST(" S ") return new cMenuEditChrItem( tr("Polarization"), &dtp.polarization, "hvlr"); else return GetOsdItem(); + case 1: ST(" S ") return new cMenuEditMapItem( tr("System"), &dtp.system, SystemValues); else return GetOsdItem(); + case 2: ST(" CS ") return new cMenuEditIntItem( tr("Srate"), &data.srate); else return GetOsdItem(); + case 3: ST("ACST") return new cMenuEditMapItem( tr("Inversion"), &dtp.inversion, InversionValues); else return GetOsdItem(); + case 4: ST(" CST") return new cMenuEditMapItem( tr("CoderateH"), &dtp.coderateH, CoderateValues); else return GetOsdItem(); + case 5: ST(" T") return new cMenuEditMapItem( tr("CoderateL"), &dtp.coderateL, CoderateValues); else return GetOsdItem(); + case 6: ST("ACST") return new cMenuEditMapItem( tr("Modulation"), &dtp.modulation, ModulationValues); else return GetOsdItem(); + case 7: ST(" T") return new cMenuEditMapItem( tr("Bandwidth"), &dtp.bandwidth, BandwidthValues); else return GetOsdItem(); + case 8: ST(" T") return new cMenuEditMapItem( tr("Transmission"), &dtp.transmission, TransmissionValues); else return GetOsdItem(); + case 9: ST(" T") return new cMenuEditMapItem( tr("Guard"), &dtp.guard, GuardValues); else return GetOsdItem(); + case 10: ST(" T") return new cMenuEditMapItem( tr("Hierarchy"), &dtp.hierarchy, HierarchyValues); else return GetOsdItem(); + case 11: ST(" S ") return new cMenuEditMapItem( tr("Rolloff"), &dtp.rollOff, RollOffValues); else return GetOsdItem(); default: return NULL; } return NULL; @@ -745,6 +757,7 @@ bool cDvbDevice::Initialize(void) { + new cDvbSourceParam('A', "ATSC"); new cDvbSourceParam('C', "DVB-C"); new cDvbSourceParam('S', "DVB-S"); new cDvbSourceParam('T', "DVB-T"); @@ -863,6 +876,7 @@ { int type = Source & cSource::st_Mask; return type == cSource::stNone + || type == cSource::stAtsc && (frontendType == SYS_ATSC) || type == cSource::stCable && (frontendType == SYS_DVBC_ANNEX_AC || frontendType == SYS_DVBC_ANNEX_B) || type == cSource::stSat && (frontendType == SYS_DVBS || frontendType == SYS_DVBS2) || type == cSource::stTerr && (frontendType == SYS_DVBT); diff -ur vdr-1.7.13.orig/pat.c vdr-1.7.13/pat.c --- vdr-1.7.13.orig/pat.c 2010-01-01 10:40:05.000000000 -0500 +++ vdr-1.7.13/pat.c 2010-03-01 13:36:01.000000000 -0500 @@ -447,6 +447,29 @@ } } break; + case 0x81: // ATSC AC-3 + { + char lang[MAXLANGCODE1] = { 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; + strn0cpy(lang, I18nNormalizeLanguageCode(ld->languageCode), MAXLANGCODE1); + } + break; + default: ; + } + delete d; + } + if (NumDpids < MAXDPIDS) { + Dpids[NumDpids] = esPid; + strn0cpy(DLangs[NumDpids], lang, MAXLANGCODE1); + NumDpids++; + } + ProcessCaDescriptors = true; + } + break; default: ;//printf("PID: %5d %5d %2d %3d %3d\n", pmt.getServiceId(), stream.getPid(), stream.getStreamType(), pmt.getVersionNumber(), Channel->Number()); } if (ProcessCaDescriptors) { diff -ur vdr-1.7.13.orig/sourceparams.c vdr-1.7.13/sourceparams.c --- vdr-1.7.13.orig/sourceparams.c 2010-02-28 07:15:49.000000000 -0500 +++ vdr-1.7.13/sourceparams.c 2010-03-01 12:22:55.000000000 -0500 @@ -21,7 +21,7 @@ return; } SourceParams.Add(this); - if (Source != 'C' && Source != 'S' && Source != 'T') + if (Source != 'A' && Source != 'C' && Source != 'S' && Source != 'T') Sources.Add(new cSource(Source, Description)); dsyslog("registered source parameters for '%c - %s'", source, Description); } diff -ur vdr-1.7.13.orig/sources.conf vdr-1.7.13/sources.conf --- vdr-1.7.13.orig/sources.conf 2010-02-28 07:05:32.000000000 -0500 +++ vdr-1.7.13/sources.conf 2010-03-01 12:21:54.000000000 -0500 @@ -195,3 +195,7 @@ # Terrestrial T DVB-T + +# ATSC + +A ATSC diff -ur vdr-1.7.13.orig/sources.h vdr-1.7.13/sources.h --- vdr-1.7.13.orig/sources.h 2010-02-21 11:11:19.000000000 -0500 +++ vdr-1.7.13/sources.h 2010-03-01 12:21:59.000000000 -0500 @@ -16,6 +16,7 @@ public: enum eSourceType { stNone = 0x00000000, + stAtsc = ('A' << 24), stCable = ('C' << 24), stSat = ('S' << 24), stTerr = ('T' << 24),