X-Git-Url: https://git.cweiske.de/enigma2.git/blobdiff_plain/29c3340e877cfa1d1818a140f76f14270b84c3d2..b643641e2c6288eff61d0346a3dda82bd820b3b7:/lib/service/servicedvb.cpp diff --git a/lib/service/servicedvb.cpp b/lib/service/servicedvb.cpp index 01169986..ddc675e6 100644 --- a/lib/service/servicedvb.cpp +++ b/lib/service/servicedvb.cpp @@ -97,50 +97,9 @@ int eStaticServiceDVBInformation::isPlayable(const eServiceReference &ref, const } extern void PutToDict(ePyObject &dict, const char*key, long value); // defined in dvb/frontend.cpp -extern void PutToDict(ePyObject &dict, const char*key, ePyObject item); // defined in dvb/frontend.cpp -extern void PutToDict(ePyObject &dict, const char*key, const char *value); // defined in dvb/frontend.cpp - -void PutSatelliteDataToDict(ePyObject &dict, eDVBFrontendParametersSatellite &feparm) -{ - PutToDict(dict, "tuner_type", "DVB-S"); - PutToDict(dict, "frequency", feparm.frequency); - PutToDict(dict, "symbol_rate", feparm.symbol_rate); - PutToDict(dict, "orbital_position", feparm.orbital_position); - PutToDict(dict, "inversion", feparm.inversion); - PutToDict(dict, "fec_inner", feparm.fec); - PutToDict(dict, "modulation", feparm.modulation); - PutToDict(dict, "polarization", feparm.polarisation); - if (feparm.system == eDVBFrontendParametersSatellite::System_DVB_S2) - { - PutToDict(dict, "rolloff", feparm.rolloff); - PutToDict(dict, "pilot", feparm.pilot); - } - PutToDict(dict, "system", feparm.system); -} - -void PutTerrestrialDataToDict(ePyObject &dict, eDVBFrontendParametersTerrestrial &feparm) -{ - PutToDict(dict, "tuner_type", "DVB-T"); - PutToDict(dict, "frequency", feparm.frequency); - PutToDict(dict, "bandwidth", feparm.bandwidth); - PutToDict(dict, "code_rate_lp", feparm.code_rate_LP); - PutToDict(dict, "code_rate_hp", feparm.code_rate_HP); - PutToDict(dict, "constellation", feparm.modulation); - PutToDict(dict, "transmission_mode", feparm.transmission_mode); - PutToDict(dict, "guard_interval", feparm.guard_interval); - PutToDict(dict, "hierarchy_information", feparm.hierarchy); - PutToDict(dict, "inversion", feparm.inversion); -} - -void PutCableDataToDict(ePyObject &dict, eDVBFrontendParametersCable &feparm) -{ - PutToDict(dict, "tuner_type", "DVB-C"); - PutToDict(dict, "frequency", feparm.frequency); - PutToDict(dict, "symbol_rate", feparm.symbol_rate); - PutToDict(dict, "modulation", feparm.modulation); - PutToDict(dict, "inversion", feparm.inversion); - PutToDict(dict, "fec_inner", feparm.fec_inner); -} +extern void PutSatelliteDataToDict(ePyObject &dict, eDVBFrontendParametersSatellite &feparm); // defined in dvb/frontend.cpp +extern void PutTerrestrialDataToDict(ePyObject &dict, eDVBFrontendParametersTerrestrial &feparm); // defined in dvb/frontend.cpp +extern void PutCableDataToDict(ePyObject &dict, eDVBFrontendParametersCable &feparm); // defined in dvb/frontend.cpp PyObject *eStaticServiceDVBInformation::getInfoObject(const eServiceReference &r, int what) { @@ -1102,22 +1061,30 @@ void eDVBServicePlay::serviceEventTimeshift(int event) RESULT eDVBServicePlay::start() { - int r; + eServiceReferenceDVB service = (eServiceReferenceDVB&)m_reference; + /* in pvr mode, we only want to use one demux. in tv mode, we're using two (one for decoding, one for data source), as we must be prepared to start recording from the data demux. */ if (m_is_pvr) + { + eDVBMetaParser meta; + if (!meta.parseFile(m_reference.path)) + { + service = meta.m_ref; + service.path = m_reference.path; + } m_cue = new eCueSheet(); + } else m_event(this, evStart); m_first_program_info = 1; - eServiceReferenceDVB &service = (eServiceReferenceDVB&)m_reference; - r = m_service_handler.tune(service, m_is_pvr, m_cue, false, m_dvb_service); + m_service_handler.tune(service, m_is_pvr, m_cue, false, m_dvb_service); - /* inject EIT if there is a stored one */ if (m_is_pvr) { + /* inject EIT if there is a stored one */ std::string filename = service.path; filename.erase(filename.length()-2, 2); filename+="eit"; @@ -1128,10 +1095,6 @@ RESULT eDVBServicePlay::start() m_event_handler.inject(event, 0); m_event_handler.inject(empty, 1); } - } - - if (m_is_pvr) - { loadCuesheet(); m_event(this, evStart); } @@ -1407,7 +1370,7 @@ RESULT eDVBServicePlay::setTrickmode(int trick) RESULT eDVBServicePlay::isCurrentlySeekable() { - return m_is_pvr || m_timeshift_active; + return m_is_pvr || m_timeshift_active ? 3 : 0; // fast forward/backward possible and seeking possible } RESULT eDVBServicePlay::frontendInfo(ePtr &ptr)