aboutsummaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorFelix Domke <tmbinc@elitedvb.net>2006-12-09 14:34:43 +0000
committerFelix Domke <tmbinc@elitedvb.net>2006-12-09 14:34:43 +0000
commit4c9293c08de2abe11f03d15f6515201348bc41f1 (patch)
treec4a75b2df3ad0c9a7031de58b7299f2642d083cd /lib
parentcb318dbb6ee8c05f7f4aeb580de06489e2c4c777 (diff)
downloadenigma2-4c9293c08de2abe11f03d15f6515201348bc41f1.tar.gz
enigma2-4c9293c08de2abe11f03d15f6515201348bc41f1.zip
allow dvb state to be queried (last PMT-related event)
Diffstat (limited to 'lib')
-rw-r--r--lib/service/servicedvb.cpp33
-rw-r--r--lib/service/servicedvb.h3
2 files changed, 26 insertions, 10 deletions
diff --git a/lib/service/servicedvb.cpp b/lib/service/servicedvb.cpp
index 0a7a6715..47956dfa 100644
--- a/lib/service/servicedvb.cpp
+++ b/lib/service/servicedvb.cpp
@@ -729,6 +729,8 @@ eDVBServicePlay::eDVBServicePlay(const eServiceReference &ref, eDVBService *serv
m_subtitle_widget = 0;
+ m_tune_state = -1;
+
CONNECT(m_subtitle_sync_timer.timeout, eDVBServicePlay::checkSubtitleTiming);
}
@@ -755,6 +757,9 @@ void eDVBServicePlay::gotNewEvent()
void eDVBServicePlay::serviceEvent(int event)
{
+ eDebug("service %p: error %d", this, event);
+ m_tune_state = event;
+
switch (event)
{
case eDVBServicePMTHandler::eventTuned:
@@ -774,9 +779,12 @@ void eDVBServicePlay::serviceEvent(int event)
}
break;
}
+ case eDVBServicePMTHandler::eventNoPAT:
+ case eDVBServicePMTHandler::eventNoPATEntry:
+ case eDVBServicePMTHandler::eventNoPMT:
case eDVBServicePMTHandler::eventTuneFailed:
{
- eDebug("DVB service failed to tune");
+ eDebug("DVB service failed to tune - error %d", event);
m_event((iPlayableService*)this, evTuneFailed);
break;
}
@@ -1210,18 +1218,24 @@ RESULT eDVBServicePlay::getEvent(ePtr<eServiceEvent> &evt, int nownext)
int eDVBServicePlay::getInfo(int w)
{
eDVBServicePMTHandler::program program;
+
+ eDebug("get info in %p", this);
if (w == sCAIDs)
return resIsPyObject;
eDVBServicePMTHandler &h = m_timeshift_active ? m_service_handler_timeshift : m_service_handler;
+ int no_program_info = 0;
+
if (h.getProgramInfo(program))
- return -1;
+ no_program_info = 1;
+ eDebug("ok");
switch (w)
{
case sAspect:
+ if (!no_program_info) return -1;
if (!program.videoStreams.empty() && program.videoStreams[0].component_tag != -1)
{
ePtr<eServiceEvent> evt;
@@ -1260,19 +1274,20 @@ int eDVBServicePlay::getInfo(int w)
}
}
return -1;
- case sIsCrypted: return program.isCrypted();
- case sVideoPID: if (program.videoStreams.empty()) return -1; return program.videoStreams[0].pid;
- case sVideoType: if (program.videoStreams.empty()) return -1; return program.videoStreams[0].type;
- case sAudioPID: if (program.audioStreams.empty()) return -1; return program.audioStreams[0].pid;
- case sPCRPID: return program.pcrPid;
- case sPMTPID: return program.pmtPid;
- case sTXTPID: return program.textPid;
+ case sIsCrypted: if (!no_program_info) return -1; return program.isCrypted();
+ case sVideoPID: if (!no_program_info) return -1; if (program.videoStreams.empty()) return -1; return program.videoStreams[0].pid;
+ case sVideoType: if (!no_program_info) return -1; if (program.videoStreams.empty()) return -1; return program.videoStreams[0].type;
+ case sAudioPID: if (!no_program_info) return -1; if (program.audioStreams.empty()) return -1; return program.audioStreams[0].pid;
+ case sPCRPID: if (!no_program_info) return -1; return program.pcrPid;
+ case sPMTPID: if (!no_program_info) return -1; return program.pmtPid;
+ case sTXTPID: if (!no_program_info) return -1; return program.textPid;
case sSID: return ((const eServiceReferenceDVB&)m_reference).getServiceID().get();
case sONID: return ((const eServiceReferenceDVB&)m_reference).getOriginalNetworkID().get();
case sTSID: return ((const eServiceReferenceDVB&)m_reference).getTransportStreamID().get();
case sNamespace: return ((const eServiceReferenceDVB&)m_reference).getDVBNamespace().get();
case sProvider: if (!m_dvb_service) return -1; return -2;
case sServiceref: return resIsString;
+ case sDVBState: return m_tune_state;
default:
return -1;
}
diff --git a/lib/service/servicedvb.h b/lib/service/servicedvb.h
index b3978a42..b40341f7 100644
--- a/lib/service/servicedvb.h
+++ b/lib/service/servicedvb.h
@@ -71,7 +71,7 @@ inline int eDVBServiceList::compareLessEqual(const eServiceReference &a, const e
class eDVBServiceBase: public iFrontendInformation
{
protected:
- eDVBServicePMTHandler m_service_handler ;
+ eDVBServicePMTHandler m_service_handler;
public:
// iFrontendInformation
int getFrontendInfo(int w);
@@ -180,6 +180,7 @@ private:
ePtr<iTSMPEGDecoder> m_decoder;
int m_is_primary;
int m_have_video_pid;
+ int m_tune_state;
/* in timeshift mode, we essentially have two channels, and thus pmt handlers. */
eDVBServicePMTHandler m_service_handler_timeshift;