removed unused variable
[enigma2.git] / lib / dvb / pmt.cpp
index 8c56589c710f6163fc1cca43943c6c5b056382e1..a5e9be4682ad76d412dae4a851e74f1cbb830ac7 100644 (file)
@@ -6,6 +6,7 @@
 #include <lib/dvb_ci/dvbci.h>
 #include <lib/dvb/epgcache.h>
 #include <dvbsi++/ca_program_map_section.h>
+#include <dvbsi++/teletext_descriptor.h>
 #include <dvbsi++/descriptor_tag.h>
 #include <dvbsi++/iso639_language_descriptor.h>
 #include <dvbsi++/stream_identifier_descriptor.h>
@@ -64,6 +65,18 @@ void eDVBServicePMTHandler::channelStateChanged(iDVBChannel *channel)
        }
 }
 
+void eDVBServicePMTHandler::channelEvent(iDVBChannel *channel, int event)
+{
+       switch (event)
+       {
+       case iDVBChannel::evtEOF:
+               serviceEvent(eventEOF);
+               break;
+       default:
+               break;
+       }
+}
+
 void eDVBServicePMTHandler::PMTready(int error)
 {
        if (error)
@@ -126,17 +139,20 @@ int eDVBServicePMTHandler::getProgramInfo(struct program &program)
        program.pcrPid = -1;
        program.isCrypted = false;
        program.pmtPid = -1;
+       program.textPid = -1;
 
        if (!m_PMT.getCurrent(ptr))
        {
                int cached_apid_ac3 = -1;
                int cached_apid_mpeg = -1;
                int cached_vpid = -1;
+               int cached_tpid = -1;
                if ( m_service && !m_service->cacheEmpty() )
                {
                        cached_vpid = m_service->getCachePID(eDVBService::cVPID);
                        cached_apid_mpeg = m_service->getCachePID(eDVBService::cAC3PID);
                        cached_apid_ac3 = m_service->getCachePID(eDVBService::cAPID);
+                       cached_tpid = m_service->getCachePID(eDVBService::cTPID);
                }
                eDVBTableSpec table_spec;
                ptr->getSpec(table_spec);
@@ -181,6 +197,10 @@ int eDVBServicePMTHandler::getProgramInfo(struct program &program)
                                        {
                                                switch ((*desc)->getTag())
                                                {
+                                               case TELETEXT_DESCRIPTOR:
+                                                       if ( program.textPid == -1 || (*es)->getPid() == cached_tpid )
+                                                               program.textPid = (*es)->getPid();
+                                                       break;
                                                case AC3_DESCRIPTOR:
                                                        if (!isvideo)
                                                        {
@@ -257,6 +277,7 @@ int eDVBServicePMTHandler::getProgramInfo(struct program &program)
                        apid_ac3 = m_service->getCachePID(eDVBService::cAC3PID),
                        apid_mpeg = m_service->getCachePID(eDVBService::cAPID),
                        pcrpid = m_service->getCachePID(eDVBService::cPCRPID),
+                       tpid = m_service->getCachePID(eDVBService::cTPID),
                        cnt=0;
                if ( vpid != -1 )
                {
@@ -286,6 +307,11 @@ int eDVBServicePMTHandler::getProgramInfo(struct program &program)
                        ++cnt;
                        program.pcrPid = pcrpid;
                }
+               if ( tpid != -1 )
+               {
+                       ++cnt;
+                       program.textPid = tpid;
+               }
                if ( cnt )
                        return 0;
        }
@@ -370,6 +396,10 @@ int eDVBServicePMTHandler::tune(eServiceReferenceDVB &ref, int use_decode_demux)
                        m_channelStateChanged_connection);
                m_last_channel_state = -1;
                channelStateChanged(m_channel);
+
+               m_channel->connectEvent(
+                       slot(*this, &eDVBServicePMTHandler::channelEvent), 
+                       m_channelEvent_connection);
        } else
        {
                serviceEvent(eventTuneFailed);