X-Git-Url: https://git.cweiske.de/enigma2.git/blobdiff_plain/109805bc36dda9d5bc9a8cff1a95091751d1dc40..6f50f87ade33d60f05939a38de1ae0f4117b414b:/lib/dvb/pmt.cpp diff --git a/lib/dvb/pmt.cpp b/lib/dvb/pmt.cpp index fc433386..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; @@ -566,7 +586,10 @@ int eDVBServicePMTHandler::tune(eServiceReferenceDVB &ref, int use_decode_demux, } } else { - serviceEvent(eventNoResources); + if (res == eDVBResourceManager::errAllSourcesBusy) + serviceEvent(eventNoResources); + else /* errChidNotFound, errNoChannelList, errChannelNotInList, errNoSourceFound */ + serviceEvent(eventMisconfiguration); return res; }