cPatPmtParser::ParsePmt() now also recognizes stream type 0x81 as "AC3"

This commit is contained in:
Klaus Schmidinger 2012-09-19 10:46:17 +02:00
parent ed456adc80
commit e11908cae6
3 changed files with 38 additions and 2 deletions

View File

@ -2946,3 +2946,8 @@ Oliver Schinagl <oliver@schinagl.nl>
Andrey Pridvorov <ua0lnj@bk.ru>
for reporting a problem with detecting frames in MPEG 4 video, and pointing towards
a better way of doing it
Jens Vogel <jens.vogel@akjv.de>
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

View File

@ -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).

30
remux.c
View File

@ -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");