don't reorder audio streams, instead store thre default audio stream index in 'defaul...
[enigma2.git] / lib / dvb / pmt.cpp
index 7f560c8e6c7d9b0227fc17d48bb939f5ed617b36..c295df31a174e317c9b541a1b97ecdf1604aa147 100644 (file)
@@ -87,9 +87,9 @@ void eDVBServicePMTHandler::PMTready(int error)
        {
                m_have_cached_program = false;
                serviceEvent(eventNewProgramInfo);
-               eEPGCache::getInstance()->PMTready(this);
                if (!m_pvr_channel) // don't send campmt to camd.socket for playbacked services
                {
+                       eEPGCache::getInstance()->PMTready(this);
                        if(!m_ca_servicePtr)
                        {
                                int demuxes[2] = {0,0};
@@ -174,12 +174,13 @@ int eDVBServicePMTHandler::getProgramInfo(struct program &program)
        program.pcrPid = -1;
        program.pmtPid = -1;
        program.textPid = -1;
+       program.defaultAudioStream = 0;
 
        if ( m_service && !m_service->cacheEmpty() )
        {
                cached_vpid = m_service->getCacheEntry(eDVBService::cVPID);
-               cached_apid_mpeg = m_service->getCacheEntry(eDVBService::cAC3PID);
-               cached_apid_ac3 = m_service->getCacheEntry(eDVBService::cAPID);
+               cached_apid_mpeg = m_service->getCacheEntry(eDVBService::cAPID);
+               cached_apid_ac3 = m_service->getCacheEntry(eDVBService::cAC3PID);
                cached_tpid = m_service->getCacheEntry(eDVBService::cTPID);
        }
 
@@ -318,12 +319,8 @@ int eDVBServicePMTHandler::getProgramInfo(struct program &program)
                                                audio.pid = (*es)->getPid();
                                                if ( !program.audioStreams.empty() &&
                                                        ( audio.pid == cached_apid_ac3 || audio.pid == cached_apid_mpeg) )
-                                               {
-                                                       program.audioStreams.push_back(program.audioStreams[0]);
-                                                       program.audioStreams[0] = audio;
-                                               }
-                                               else
-                                                       program.audioStreams.push_back(audio);
+                                                       program.defaultAudioStream = program.audioStreams.size();
+                                               program.audioStreams.push_back(audio);
                                        }
                                        else if (isvideo)
                                        {
@@ -496,8 +493,9 @@ int eDVBServicePMTHandler::tune(eServiceReferenceDVB &ref, int use_decode_demux,
        } else
        {
                eDVBMetaParser parser;
-               
-               if (parser.parseFile(ref.path))
+
+               int ret=parser.parseFile(ref.path);
+               if (ret || !parser.m_ref.getServiceID().get() /* incorrect sid in meta file or recordings.epl*/ )
                {
                        eWarning("no .meta file found, trying to find PMT pid");
                        eDVBTSTools tstools;
@@ -865,7 +863,7 @@ static PyObject *createTuple(int pid, const char *type)
        return r;
 }
 
-static inline PyList_AppendSteal(PyObject *list, PyObject *item)
+static inline void PyList_AppendSteal(PyObject *list, PyObject *item)
 {
        PyList_Append(list, item);
        Py_DECREF(item);