diff options
| author | Andreas Monzner <andreas.monzner@multimedia-labs.de> | 2005-08-15 23:46:05 +0000 |
|---|---|---|
| committer | Andreas Monzner <andreas.monzner@multimedia-labs.de> | 2005-08-15 23:46:05 +0000 |
| commit | 8aabe6351fdaff2bd5529be670846357e221a16a (patch) | |
| tree | e664fa0bd656a09c89f25336952d6b552d90db99 /lib/dvb/pmt.cpp | |
| parent | 7544e052e6ed6a5d1e0fd783bd04f4b8aa0d45ce (diff) | |
| download | enigma2-8aabe6351fdaff2bd5529be670846357e221a16a.tar.gz enigma2-8aabe6351fdaff2bd5529be670846357e221a16a.zip | |
add pid cache
Diffstat (limited to 'lib/dvb/pmt.cpp')
| -rw-r--r-- | lib/dvb/pmt.cpp | 63 |
1 files changed, 53 insertions, 10 deletions
diff --git a/lib/dvb/pmt.cpp b/lib/dvb/pmt.cpp index d80897b9..541a248c 100644 --- a/lib/dvb/pmt.cpp +++ b/lib/dvb/pmt.cpp @@ -1,4 +1,4 @@ -#include <lib/base/eerror.h> + #include <lib/base/eerror.h> #include <lib/dvb/pmt.h> #include <lib/dvb/specs.h> #include <lib/dvb/dvb.h> @@ -6,9 +6,7 @@ eDVBServicePMTHandler::eDVBServicePMTHandler() { - ePtr<eDVBResourceManager> mgr; - eDVBResourceManager::getInstance(mgr); - m_resourceManager = mgr; + eDVBResourceManager::getInstance(m_resourceManager); CONNECT(m_PMT.tableReady, eDVBServicePMTHandler::PMTready); CONNECT(m_PAT.tableReady, eDVBServicePMTHandler::PATready); } @@ -34,6 +32,9 @@ void eDVBServicePMTHandler::channelStateChanged(iDVBChannel *channel) /* emit */ m_resourceManager->m_channelRunning(channel); m_PAT.begin(eApp, eDVBPATSpec(), m_demux); + + if ( m_service && !m_service->cacheEmpty() ) + serviceEvent(eventNewProgramInfo); } } } @@ -74,11 +75,11 @@ int eDVBServicePMTHandler::getProgramInfo(struct program &program) { eDebug("got PMT"); ePtr<eTable<ProgramMapTable> > ptr; - + program.videoStreams.clear(); program.audioStreams.clear(); program.pcrPid = -1; - + if (!m_PMT.getCurrent(ptr)) { ProgramMapTableConstIterator i; @@ -116,8 +117,46 @@ int eDVBServicePMTHandler::getProgramInfo(struct program &program) } } return 0; - } else - return -1; + } + else if ( m_service && !m_service->cacheEmpty() ) + { + int vpid = m_service->getCachePID(eDVBService::cVPID), + apid_ac3 = m_service->getCachePID(eDVBService::cAPID), + apid_mpeg = m_service->getCachePID(eDVBService::cAC3PID), + pcrpid = m_service->getCachePID(eDVBService::cPCRPID), + cnt=0; + if ( vpid != -1 ) + { + videoStream s; + s.pid = vpid; + program.videoStreams.push_back(s); + ++cnt; + } + if ( apid_ac3 != -1 ) + { + audioStream s; + s.type = audioStream::atAC3; + s.pid = apid_ac3; + program.audioStreams.push_back(s); + ++cnt; + } + if ( apid_mpeg != -1 ) + { + audioStream s; + s.type = audioStream::atMPEG; + s.pid = apid_mpeg; + program.audioStreams.push_back(s); + ++cnt; + } + if ( pcrpid != -1 ) + { + ++cnt; + program.pcrPid = pcrpid; + } + if ( cnt ) + return 0; + } + return -1; } int eDVBServicePMTHandler::getDemux(ePtr<iDVBDemux> &demux) @@ -167,9 +206,13 @@ int eDVBServicePMTHandler::tune(eServiceReferenceDVB &ref) m_last_channel_state = -1; channelStateChanged(m_channel); } - + if (m_pvr_channel) m_pvr_channel->playFile(ref.path.c_str()); - + + ePtr<iDVBChannelList> db; + if (!m_resourceManager->getChannelList(db)) + db->getService((eServiceReferenceDVB&)m_reference, m_service); + return res; } |
