X-Git-Url: https://git.cweiske.de/enigma2.git/blobdiff_plain/68271eeaf83872270f13cc01e98960367d7d553f..54e57557c7867d3d492ce9bd658ec2d672cd0168:/lib/dvb/pmt.cpp diff --git a/lib/dvb/pmt.cpp b/lib/dvb/pmt.cpp index c0c65b27..fdee5b40 100644 --- a/lib/dvb/pmt.cpp +++ b/lib/dvb/pmt.cpp @@ -6,6 +6,8 @@ #include #include #include +#include +#include eDVBServicePMTHandler::eDVBServicePMTHandler(int record) :m_ca_servicePtr(0) @@ -50,8 +52,6 @@ void eDVBServicePMTHandler::channelStateChanged(iDVBChannel *channel) { eDebug("ok ... now we start!!"); - /* emit */ m_resourceManager->m_channelRunning(channel); - m_PAT.begin(eApp, eDVBPATSpec(), m_demux); if ( m_service && !m_service->cacheEmpty() ) @@ -143,6 +143,7 @@ int eDVBServicePMTHandler::getProgramInfo(struct program &program) int isaudio = 0, isvideo = 0; videoStream video; audioStream audio; + audio.component_tag=-1; video.pid = (*es)->getPid(); audio.pid = (*es)->getPid(); @@ -175,7 +176,30 @@ int eDVBServicePMTHandler::getProgramInfo(struct program &program) break; } if (isaudio) + { + for (DescriptorConstIterator desc = (*es)->getDescriptors()->begin(); + desc != (*es)->getDescriptors()->end(); ++desc) + { + switch ((*desc)->getTag()) + { + case ISO_639_LANGUAGE_DESCRIPTOR: + { + const Iso639LanguageList *languages = ((Iso639LanguageDescriptor*)*desc)->getIso639Languages(); + + /* use last language code */ + for (Iso639LanguageConstIterator i(languages->begin()); i != languages->end(); ++i) + audio.language_code = (*i)->getIso639LanguageCode(); + + break; + } + case STREAM_IDENTIFIER_DESCRIPTOR: + audio.component_tag = ((StreamIdentifierDescriptor*)*desc)->getComponentTag(); + break; + } + } + program.audioStreams.push_back(audio); + } if (isvideo) program.videoStreams.push_back(video); } @@ -327,7 +351,7 @@ RESULT eDVBCAService::register_service( const eServiceReferenceDVB &ref, int dem { caservice = (exist[ref]=new eDVBCAService()); caservice->m_service = ref; - eDebug("[eDVBCAHandler] new service %s", ref.toString().c_str() ); + eDebug("[eDVBCAService] new service %s", ref.toString().c_str() ); } // search free demux entry int iter=0, max_demux_slots = sizeof(caservice->m_used_demux); @@ -338,11 +362,11 @@ RESULT eDVBCAService::register_service( const eServiceReferenceDVB &ref, int dem if ( iter < max_demux_slots ) { caservice->m_used_demux[iter] = demux_num & 0xFF; - eDebug("[eDVBCAHandler] add demux %d to slot %d service %s", demux_num, iter, ref.toString().c_str()); + eDebug("[eDVBCAService] add demux %d to slot %d service %s", demux_num, iter, ref.toString().c_str()); } else { - eDebug("[eDVBCAHandler] no more demux slots free for service %s!!", ref.toString().c_str()); + eDebug("[eDVBCAService] no more demux slots free for service %s!!", ref.toString().c_str()); return -1; } return 0; @@ -353,7 +377,7 @@ RESULT eDVBCAService::unregister_service( const eServiceReferenceDVB &ref, int d CAServiceMap::iterator it = exist.find(ref); if ( it == exist.end() ) { - eDebug("[eDVBCAHandler] try to unregister non registered %s", ref.toString().c_str()); + eDebug("[eDVBCAService] try to unregister non registered %s", ref.toString().c_str()); return -1; } else @@ -393,7 +417,7 @@ RESULT eDVBCAService::unregister_service( const eServiceReferenceDVB &ref, int d if (ptr) it->second->buildCAPMT(ptr); else - eDebug("[eDVBCAHandler] can not send updated demux info"); + eDebug("[eDVBCAService] can not send updated demux info"); } } return 0; @@ -536,7 +560,7 @@ void eDVBCAService::sendCAPMT() if ( write(m_sock, m_capmt, wp) == wp ) { m_sendstate=0xFFFFFFFF; - eDebug("[eDVBCAHandler] send %d bytes",wp); + eDebug("[eDVBCAService] send %d bytes",wp); #if 1 for(int i=0;i