X-Git-Url: https://git.cweiske.de/enigma2.git/blobdiff_plain/bc2f8b7dcdacde72c1f06dcb5bd9672094b17ed5..c9474b61671ed008fc7f18f8bbaafe0fd0a39dd2:/lib/service/servicedvb.cpp diff --git a/lib/service/servicedvb.cpp b/lib/service/servicedvb.cpp index 7f17fc84..85961550 100644 --- a/lib/service/servicedvb.cpp +++ b/lib/service/servicedvb.cpp @@ -192,6 +192,13 @@ int eStaticServiceDVBBouquetInformation::getLength(const eServiceReference &ref) return -1; } +#include + +RESULT eStaticServiceDVBBouquetInformation::getEvent(const eServiceReference &ref, ePtr &ptr, time_t start_time) +{ + return eEPGCache::getInstance()->lookupEventTime(ref, start_time, ptr); +} + class eStaticServiceDVBPVRInformation: public iStaticServiceInformation { DECLARE_REF(eStaticServiceDVBPVRInformation); @@ -722,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); } @@ -748,6 +757,8 @@ void eDVBServicePlay::gotNewEvent() void eDVBServicePlay::serviceEvent(int event) { + m_tune_state = event; + switch (event) { case eDVBServicePMTHandler::eventTuned: @@ -767,9 +778,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; } @@ -1203,18 +1217,21 @@ RESULT eDVBServicePlay::getEvent(ePtr &evt, int nownext) int eDVBServicePlay::getInfo(int w) { eDVBServicePMTHandler::program program; - + 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; switch (w) { case sAspect: + if (no_program_info) return -1; if (!program.videoStreams.empty() && program.videoStreams[0].component_tag != -1) { ePtr evt; @@ -1253,19 +1270,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; }