aboutsummaryrefslogtreecommitdiff
path: root/lib/dvb/pmt.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'lib/dvb/pmt.cpp')
-rw-r--r--lib/dvb/pmt.cpp20
1 files changed, 20 insertions, 0 deletions
diff --git a/lib/dvb/pmt.cpp b/lib/dvb/pmt.cpp
index f6f33b52..555ffa79 100644
--- a/lib/dvb/pmt.cpp
+++ b/lib/dvb/pmt.cpp
@@ -231,6 +231,7 @@ int eDVBServicePMTHandler::getProgramInfo(struct program &program)
}
//break; fall through !!!
case 0x06: // PES Private
+ case 0x81: // user private
/* PES private can contain AC-3, DTS or lots of other stuff.
check descriptors to get the exact type. */
for (DescriptorConstIterator desc = (*es)->getDescriptors()->begin();
@@ -313,6 +314,25 @@ int eDVBServicePMTHandler::getProgramInfo(struct program &program)
program.caids.insert(descr->getCaSystemId());
break;
}
+ case REGISTRATION_DESCRIPTOR: /* some services don't have a separate AC3 descriptor */
+ {
+ /* libdvbsi++ doesn't yet support this descriptor type, so work around. */
+ if ((*desc)->getLength() != 4)
+ break;
+ unsigned char descr[6];
+ (*desc)->writeToBuffer(descr);
+ int format_identifier = (descr[2] << 24) | (descr[3] << 16) | (descr[4] << 8) | (descr[5]);
+ switch (format_identifier)
+ {
+ case 0x41432d33:
+ isaudio = 1;
+ audio.type = audioStream::atAC3;
+ break;
+ default:
+ break;
+ }
+ break;
+ }
}
}
break;