rewrite ServiceEventTracker and PerServiceBase service event handle code
[enigma2.git] / lib / service / servicedvb.cpp
index 53bc17a8d8c82fe7699520a1c6ec98fa16477a8f..f13ae50ea8a023cc4955568a1c46ad0375ba9910 100644 (file)
@@ -166,15 +166,25 @@ void PutSatelliteDataToDict(ePyObject &dict, eDVBFrontendParametersSatellite &fe
                default:
                case eDVBFrontendParametersSatellite::System::DVB_S: tmp="DVB-S"; break;
                case eDVBFrontendParametersSatellite::System::DVB_S2:
-                       switch(feparm.roll_off)
+                       switch(feparm.rolloff)
                        {
+                               default:
                                case eDVBFrontendParametersSatellite::RollOff::alpha_0_35: tmp="0.35"; break;
                                case eDVBFrontendParametersSatellite::RollOff::alpha_0_25: tmp="0.25"; break;
                                case eDVBFrontendParametersSatellite::RollOff::alpha_0_20: tmp="0.20"; break;
-                               default:
-                               case eDVBFrontendParametersSatellite::RollOff::alpha_auto: tmp="AUTO"; break;
                        }
                        PutToDict(dict, "roll off", tmp);
+                       if (feparm.modulation == eDVBFrontendParametersSatellite::Modulation::M8PSK)
+                       {
+                               switch(feparm.pilot)
+                               {
+                                       case eDVBFrontendParametersSatellite::Pilot::On: tmp="ON"; break;
+                                       case eDVBFrontendParametersSatellite::Pilot::Off: tmp="OFF"; break;
+                                       default:
+                                       case eDVBFrontendParametersSatellite::Pilot::Unknown: tmp="AUTO"; break;
+                               }
+                               PutToDict(dict, "pilot", tmp);
+                       }
                        tmp="DVB-S2";
                        break;
        }
@@ -668,7 +678,11 @@ eServiceFactoryDVB::eServiceFactoryDVB()
        
        eServiceCenter::getPrivInstance(sc);
        if (sc)
-               sc->addServiceFactory(eServiceFactoryDVB::id, this);
+       {
+               std::list<std::string> extensions;
+               extensions.push_back("ts");
+               sc->addServiceFactory(eServiceFactoryDVB::id, this, extensions);
+       }
 
        m_StaticServiceDVBInfo = new eStaticServiceDVBInformation;
        m_StaticServiceDVBBouquetInfo = new eStaticServiceDVBBouquetInformation;
@@ -809,7 +823,7 @@ PyObject *eDVBServiceList::getContent(const char* format, bool sorted)
                                                        sptr->getName(ref, name);
 
                                                        // filter short name brakets
-                                                       unsigned int pos;
+                                                       size_t pos;
                                                        while((pos = name.find("\xc2\x86")) != std::string::npos)
                                                                name.erase(pos,2);
                                                        while((pos = name.find("\xc2\x87")) != std::string::npos)
@@ -925,6 +939,8 @@ RESULT eDVBServiceList::setListName(const std::string &name)
        return m_bouquet->setListName(name);
 }
 
+timespec service_start;
+
 RESULT eServiceFactoryDVB::play(const eServiceReference &ref, ePtr<iPlayableService> &ptr)
 {
        ePtr<eDVBService> service;
@@ -932,6 +948,7 @@ RESULT eServiceFactoryDVB::play(const eServiceReference &ref, ePtr<iPlayableServ
        if (r)
                service = 0;
                // check resources...
+       clock_gettime(CLOCK_MONOTONIC, &service_start);
        ptr = new eDVBServicePlay(ref, service);
        return 0;
 }
@@ -1096,6 +1113,7 @@ void eDVBServicePlay::serviceEvent(int event)
                        else
                                m_event_handler.start(m_demux, sid);
                }
+               m_event((iPlayableService*)this, evTunedIn);
                break;
        }
        case eDVBServicePMTHandler::eventNoResources:
@@ -1103,6 +1121,7 @@ void eDVBServicePlay::serviceEvent(int event)
        case eDVBServicePMTHandler::eventNoPATEntry:
        case eDVBServicePMTHandler::eventNoPMT:
        case eDVBServicePMTHandler::eventTuneFailed:
+       case eDVBServicePMTHandler::eventMisconfiguration:
        {
                eDebug("DVB service failed to tune - error %d", event);
                m_event((iPlayableService*)this, evTuneFailed);
@@ -1215,8 +1234,8 @@ RESULT eDVBServicePlay::stop()
                        {
                                int perc = play_position * 100LL / length;
                        
-                                       /* only store last play position when between 5% and 95% */
-                               if ((5 < perc) && (perc < 95))
+                                       /* only store last play position when between 1% and 99% */
+                               if ((1 < perc) && (perc < 99))
                                        m_cue_entries.insert(cueEntry(play_position, 3)); /* last play position */
                        }
                        m_cuesheet_changed = 1;
@@ -2562,7 +2581,16 @@ void eDVBServicePlay::cutlistToCuesheet()
                        }
                }
                
-               if (in != out)
+               if (in < 0)
+                       in = 0;
+               if (out < 0)
+                       out = 0;
+               if (in > length)
+                       in = length;
+               if (out > length)
+                       out = length;
+               
+               if (in < out)
                        m_cue->addSourceSpan(in, out);
                
                in = length;