add new tuneExt function to eDVBServicePMTHandler to make the class more reusable
[vuplus_dvbapp] / lib / dvb / pmt.cpp
index 9bd065b..ba5a3ad 100644 (file)
@@ -75,6 +75,9 @@ void eDVBServicePMTHandler::channelEvent(iDVBChannel *channel, int event)
 {
        switch (event)
        {
+       case iDVBChannel::evtPreStart:
+               serviceEvent(eventPreStart);
+               break;
        case iDVBChannel::evtEOF:
                serviceEvent(eventEOF);
                break;
@@ -130,11 +133,11 @@ void eDVBServicePMTHandler::PATready(int)
        {
                int pmtpid = -1;
                std::vector<ProgramAssociationSection*>::const_iterator i;
-               for (i = ptr->getSections().begin(); i != ptr->getSections().end(); ++i)
+               for (i = ptr->getSections().begin(); pmtpid == -1 && i != ptr->getSections().end(); ++i)
                {
                        const ProgramAssociationSection &pat = **i;
                        ProgramAssociationConstIterator program;
-                       for (program = pat.getPrograms()->begin(); program != pat.getPrograms()->end(); ++program)
+                       for (program = pat.getPrograms()->begin(); pmtpid == -1 && program != pat.getPrograms()->end(); ++program)
                                if (eServiceID((*program)->getProgramNumber()) == m_reference.getServiceID())
                                        pmtpid = (*program)->getProgramMapPid();
                }
@@ -672,6 +675,12 @@ void eDVBServicePMTHandler::SDTScanEvent(int event)
 
 int eDVBServicePMTHandler::tune(eServiceReferenceDVB &ref, int use_decode_demux, eCueSheet *cue, bool simulate, eDVBService *service)
 {
+       ePtr<iDataSource> s;
+       return tuneExt(ref, use_decode_demux, s, cue, simulate, service);
+}
+
+int eDVBServicePMTHandler::tuneExt(eServiceReferenceDVB &ref, int use_decode_demux, ePtr<iDataSource> &source, eCueSheet *cue, bool simulate, eDVBService *service)
+{
        RESULT res=0;
        m_reference = ref;
        
@@ -754,7 +763,10 @@ int eDVBServicePMTHandler::tune(eServiceReferenceDVB &ref, int use_decode_demux,
                if (m_pvr_channel)
                {
                        m_pvr_channel->setCueSheet(cue);
-                       m_pvr_channel->playFile(ref.path.c_str());
+                       if (source)
+                               m_pvr_channel->playSource(source);
+                       else
+                               m_pvr_channel->playFile(ref.path.c_str());
                }
        }