use correct eDVBServicePMTHandler to get program info
[enigma2.git] / lib / service / servicedvb.cpp
index b63420ae39ecaacbcb505d4a6343c8a80f5fc4db..725909a71beb5291ecaecd38341841c552e70e06 100644 (file)
@@ -1157,7 +1157,9 @@ int eDVBServicePlay::getInfo(int w)
        if (w == sCAIDs)
                return resIsPyObject;
 
-       if (m_service_handler.getProgramInfo(program))
+       eDVBServicePMTHandler &h = m_timeshift_active ? m_service_handler_timeshift : m_service_handler;
+       
+       if (h.getProgramInfo(program))
                return -1;
        
        switch (w)
@@ -1246,7 +1248,8 @@ PyObject *eDVBServicePlay::getInfoObject(int w)
 int eDVBServicePlay::getNumberOfTracks()
 {
        eDVBServicePMTHandler::program program;
-       if (m_service_handler.getProgramInfo(program))
+       eDVBServicePMTHandler &h = m_timeshift_active ? m_service_handler_timeshift : m_service_handler;
+       if (h.getProgramInfo(program))
                return 0;
        return program.audioStreams.size();
 }
@@ -1264,8 +1267,9 @@ RESULT eDVBServicePlay::selectTrack(unsigned int i)
 RESULT eDVBServicePlay::getTrackInfo(struct iAudioTrackInfo &info, unsigned int i)
 {
        eDVBServicePMTHandler::program program;
+       eDVBServicePMTHandler &h = m_timeshift_active ? m_service_handler_timeshift : m_service_handler;
 
-       if (m_service_handler.getProgramInfo(program))
+       if (h.getProgramInfo(program))
                return -1;
        
        if (i >= program.audioStreams.size())
@@ -1302,8 +1306,9 @@ RESULT eDVBServicePlay::getTrackInfo(struct iAudioTrackInfo &info, unsigned int
 int eDVBServicePlay::selectAudioStream(int i)
 {
        eDVBServicePMTHandler::program program;
+       eDVBServicePMTHandler &h = m_timeshift_active ? m_service_handler_timeshift : m_service_handler;
 
-       if (m_service_handler.getProgramInfo(program))
+       if (h.getProgramInfo(program))
                return -1;
        
        if ((unsigned int)i >= program.audioStreams.size())
@@ -1588,7 +1593,9 @@ void eDVBServicePlay::updateTimeshiftPids()
                return;
        
        eDVBServicePMTHandler::program program;
-       if (m_service_handler.getProgramInfo(program))
+       eDVBServicePMTHandler &h = m_timeshift_active ? m_service_handler_timeshift : m_service_handler;
+
+       if (h.getProgramInfo(program))
                return;
        else
        {
@@ -1640,9 +1647,11 @@ void eDVBServicePlay::switchToLive()
        m_decode_demux = 0;
        m_teletext_parser = 0;
        m_radiotext_parser = 0;
+       m_subtitle_parser = 0;
+       m_new_dvb_subtitle_region_connection = 0;
        m_new_subtitle_page_connection = 0;
        m_radiotext_updated_connection = 0;
-       
+
                /* free the timeshift service handler, we need the resources */
        m_service_handler_timeshift.free();
        m_timeshift_active = 0;
@@ -1661,7 +1670,9 @@ void eDVBServicePlay::switchToTimeshift()
        m_decoder = 0;
        m_teletext_parser = 0;
        m_radiotext_parser = 0;
+       m_subtitle_parser = 0;
        m_new_subtitle_page_connection = 0;
+       m_new_dvb_subtitle_region_connection = 0;
        m_radiotext_updated_connection = 0;
 
        m_timeshift_active = 1;
@@ -1751,6 +1762,8 @@ void eDVBServicePlay::updateDecoder()
                m_teletext_parser = new eDVBTeletextParser(m_decode_demux);
                m_teletext_parser->connectNewPage(slot(*this, &eDVBServicePlay::newSubtitlePage), m_new_subtitle_page_connection);
 #endif
+               m_subtitle_parser = new eDVBSubtitleParser(m_decode_demux);
+               m_subtitle_parser->connectNewRegion(slot(*this, &eDVBServicePlay::newDVBSubtitleRegion), m_new_dvb_subtitle_region_connection);
        }
 
        if (m_decoder)
@@ -1813,6 +1826,9 @@ void eDVBServicePlay::updateDecoder()
                if (m_teletext_parser)
                        m_teletext_parser->start(tpid);
 
+//             if (m_subtitle_parser && program.subtitleStreams.size() > 0)
+//                     m_subtitle_parser->start(program.subtitleStreams[0].pid);
+
                if (!m_is_primary)
                        m_decoder->setTrickmode(1);
 
@@ -2077,10 +2093,12 @@ void eDVBServicePlay::checkSubtitleTiming()
 
 void eDVBServicePlay::newDVBSubtitleRegion(const eDVBSubtitleRegion &p)
 {
+       eDebug("new dvb subtitle region");
 }
 
 void eDVBServicePlay::checkDvbSubtitleTiming()
 {
+       eDebug("check dvb subtitle timing");
 }
 
 int eDVBServicePlay::getAC3Delay()