diff --git a/CONTRIBUTORS b/CONTRIBUTORS index eee034cd..0137743c 100644 --- a/CONTRIBUTORS +++ b/CONTRIBUTORS @@ -2946,3 +2946,8 @@ Oliver Schinagl Andrey Pridvorov for reporting a problem with detecting frames in MPEG 4 video, and pointing towards a better way of doing it + +Jens Vogel + for suggesting to make cPatPmtParser::ParsePmt() also recognize stream type 0x81 + as "AC3", so that recordings that have been converted from the old PES format to + TS can be played diff --git a/HISTORY b/HISTORY index ea1e03f7..028fa5ac 100644 --- a/HISTORY +++ b/HISTORY @@ -7235,7 +7235,7 @@ Video Disk Recorder Revision History function in order to make use of this new feature. See, for instance, the function cSkinClassicDisplayMenu::SetButtons() in skinclassic.c for details. -2012-09-18: Version 1.7.31 +2012-09-19: Version 1.7.31 - If regenerating an index file fails and no data is written to the file, VDR now reports this error and removes the empty index file. @@ -7246,3 +7246,6 @@ Video Disk Recorder Revision History - The script given to VDR with the '-r' option is now also called whenever a recording is deleted (thanks to Alexander Wenzel). - Improved detecting frames in MPEG 4 video (reported by Andrey Pridvorov). +- cPatPmtParser::ParsePmt() now also recognizes stream type 0x81 as "AC3", so that + recordings that have been converted from the old PES format to TS can be played + (suggested by Jens Vogel). diff --git a/remux.c b/remux.c index 710a091f..6450da40 100644 --- a/remux.c +++ b/remux.c @@ -4,7 +4,7 @@ * See the main source file 'vdr.c' for copyright information and * how to reach the author. * - * $Id: remux.c 2.66 2012/09/18 09:11:24 kls Exp $ + * $Id: remux.c 2.67 2012/09/19 10:28:42 kls Exp $ */ #include "remux.h" @@ -622,6 +622,34 @@ void cPatPmtParser::ParsePmt(const uchar *Data, int Length) } } break; + case 0x81: // STREAMTYPE_USER_PRIVATE + { + dbgpatpmt(" AC3"); + 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; + dbgpatpmt(" '%s'", ld->languageCode); + strn0cpy(lang, I18nNormalizeLanguageCode(ld->languageCode), MAXLANGCODE1); + } + break; + default: ; + } + delete d; + } + if (NumDpids < MAXDPIDS) { + dpids[NumDpids] = stream.getPid(); + dtypes[NumDpids] = SI::AC3DescriptorTag; + strn0cpy(dlangs[NumDpids], lang, sizeof(dlangs[NumDpids])); + if (updatePrimaryDevice && Setup.UseDolbyDigital) + cDevice::PrimaryDevice()->SetAvailableTrack(ttDolby, NumDpids, stream.getPid(), lang); + NumDpids++; + dpids[NumDpids]= 0; + } + } + break; default: ; } dbgpatpmt("\n");