I've just moved to the US from Europe and trying to get my head around ATSC. I have a Hauppauge HVR950q which works in Windoze and Linux (With Kaffeine) and almost with VDR (my preferred platform).
I have it normally connected to Comcast cable which should pipe through a bunch of FTV channels using QAM256. These I can see and hear in kaffeine with AC97 audio. However, in VDR it appears to change the pids automatically so that the audio stops working. If I manually change VDR to not auto update and put the APID in then it squeeks rather than works. However, streaming to mplayer using streamdev seems to work. (It does the same this with OTA channels too - although I can only get 4 with a portable antenna.)
I am using Ubuntu's VDR source 1.6.0 something or other, but patched with the ATSC patch.
I had a really hard time trying to work out the channels.conf file, and in the end settled for something like:
WIFR-Wx�;(null):495000:M256:C:0:1984:0:0:0:2:0:0:0 WQRF-DT�;(null):495000:M256:C:0:2048:0:0:0:3:0:0:0 WIFR-HD�;(null):495000:M256:C:0:2112:0:0:0:1:0:0:0
This is after VDR has eaten the audio pid away. Normally this is one number higher than the vpid. So for WIFR 1985, WQRF 2049 etc.
I'm willing to believe I've cocked it up as nothing I had would automatically scan the QAM channels. In the end I used scan and it added "VDR Doesn't support ATSC yet" instead of M256:C:0.
Thanks guys... Fairly soon my shipping will arrive from Italy with my main server, sat cards and Hauppauge MVP's to stick around the house. I wonder what could possibly go wrong?
On Tue, Jun 23, 2009 at 12:43 PM, Rob Davisrob@davis-family.info wrote:
The streamtype for those AC3 PIDs is 0x81. Adding this to pat.c will add the digital PIDs correctly.
--- pat.c~ 2009-06-22 12:28:08.000000000 -0400 +++ pat.c 2009-06-22 13:32:48.461538560 -0400 @@ -432,6 +432,9 @@ } } break; + case 0x81: // AC3 DPIDs + Dpids[NumDpids++] = stream.getPid(); + break; //default: printf("PID: %5d %5d %2d %3d %3d\n", pmt.getServiceId(), stream.getPid(), stream.getStreamType(), pmt.getVersionNumber(), Channel->Number());//XXX } for (SI::Loop::Iterator it; (d = (SI::CaDescriptor*)stream.streamDescriptors.getNext(it, SI::CaDescriptorTag)); ) {
On 07/30/09 01:05, Rob Davis wrote:
Can you try if this also works if you insert the line
case 0x81: // AC3 DPIDs
after the line
//XXX case 8: // STREAMTYPE_13818_DSMCC
instead? I'm asking because I'd like to see whether there are also language descriptors available...
Klaus
Klaus Schmidinger wrote:
Sure, please see the attached patch.
diff -ur vdr-1.7.10.orig/dvbdevice.c vdr-1.7.10/dvbdevice.c --- vdr-1.7.10.orig/dvbdevice.c 2009-06-06 07:17:20.000000000 -0400 +++ vdr-1.7.10/dvbdevice.c 2009-11-22 13:26:57.000000000 -0500 @@ -319,6 +319,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, channel.Inversion()); + SETCMD(DTV_MODULATION, channel.Modulation()); + + tuneTimeout = DVBT_TUNE_TIMEOUT; + lockTimeout = DVBT_LOCK_TIMEOUT; + } else { esyslog("ERROR: attempt to set channel with unknown DVB frontend type"); return false; @@ -904,7 +914,7 @@ return type == cSource::stNone || 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); + || type == cSource::stTerr && (frontendType == SYS_DVBT || frontendType == SYS_ATSC); }
bool cDvbDevice::ProvidesTransponder(const cChannel *Channel) const diff -ur vdr-1.7.10.orig/pat.c vdr-1.7.10/pat.c --- vdr-1.7.10.orig/pat.c 2009-08-16 11:01:03.000000000 -0400 +++ vdr-1.7.10/pat.c 2009-11-22 13:31:37.000000000 -0500 @@ -389,6 +389,7 @@ break; case 5: // STREAMTYPE_13818_PRIVATE case 6: // STREAMTYPE_13818_PES_PRIVATE + case 0x81: // ATSC AC-3 //XXX case 8: // STREAMTYPE_13818_DSMCC { int dpid = 0; @@ -397,6 +398,7 @@ for (SI::Loop::Iterator it; (d = stream.streamDescriptors.getNext(it)); ) { switch (d->getDescriptorTag()) { case SI::AC3DescriptorTag: + case 0x81: // ATSC AC-3 descriptor tag dpid = esPid; break; case SI::SubtitlingDescriptorTag: diff -ur vdr-1.7.10.orig/remux.c vdr-1.7.10/remux.c --- vdr-1.7.10.orig/remux.c 2009-11-22 06:23:27.000000000 -0500 +++ vdr-1.7.10/remux.c 2009-11-22 13:31:28.000000000 -0500 @@ -532,6 +532,7 @@ } break; case 0x06: // STREAMTYPE_13818_PES_PRIVATE + case 0x81: // ATSC AC-3 { int dpid = 0; char lang[MAXLANGCODE1] = ""; @@ -539,6 +540,7 @@ for (SI::Loop::Iterator it; (d = stream.streamDescriptors.getNext(it)); ) { switch (d->getDescriptorTag()) { case SI::AC3DescriptorTag: + case 0x81: // ATSC AC-3 descriptor tag dbgpatpmt(" AC3"); dpid = stream.getPid(); break;
My Cable provider or VDR seems to mess up the audio pid regularly for various channels. Is there a way (or patch) that I can keep the update pids on, except for the apids? They move the vpids around about once a month, so keeping vpid updating depending on sid is worthwhile, otherwise I would turn off the updatepids line.
On Mon, 2009-12-14 at 00:03 -0500, Alex Lasnier wrote: