#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>
}
}
+void eDVBServicePMTHandler::channelEvent(iDVBChannel *channel, int event)
+{
+ switch (event)
+ {
+ case iDVBChannel::evtEOF:
+ serviceEvent(eventEOF);
+ break;
+ default:
+ break;
+ }
+}
+
void eDVBServicePMTHandler::PMTready(int error)
{
if (error)
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);
{
switch ((*desc)->getTag())
{
+ case TELETEXT_DESCRIPTOR:
+ if ( program.textPid == -1 || (*es)->getPid() == cached_tpid )
+ program.textPid = (*es)->getPid();
+ break;
case AC3_DESCRIPTOR:
if (!isvideo)
{
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 )
{
++cnt;
program.pcrPid = pcrpid;
}
+ if ( tpid != -1 )
+ {
+ ++cnt;
+ program.textPid = tpid;
+ }
if ( cnt )
return 0;
}
m_channelStateChanged_connection);
m_last_channel_state = -1;
channelStateChanged(m_channel);
+
+ m_channel->connectEvent(
+ slot(*this, &eDVBServicePMTHandler::channelEvent),
+ m_channelEvent_connection);
} else
{
serviceEvent(eventTuneFailed);