fix non-existing cast for FEC_9_10
[enigma2.git] / lib / dvb / pmt.cpp
index 74042ed09ceb951fb0986459e52ab14e90d3c9de..11cda12593a991dea742de32285ef228d00b4502 100644 (file)
@@ -250,9 +250,12 @@ int eDVBServicePMTHandler::getProgramInfo(struct program &program)
 
                                video.pid = (*es)->getPid();
                                audio.pid = (*es)->getPid();
+                               video.type = videoStream::vtMPEG2;
 
                                switch ((*es)->getType())
                                {
+                               case 0x1b: // AVC Video Stream (MPEG4 H264)
+                                       video.type = videoStream::vtMPEG4_H264;
                                case 0x01: // MPEG 1 video
                                case 0x02: // MPEG 2 video
                                        isvideo = 1;
@@ -277,6 +280,13 @@ int eDVBServicePMTHandler::getProgramInfo(struct program &program)
                                                        if ( program.textPid == -1 || (*es)->getPid() == cached_tpid )
                                                                program.textPid = (*es)->getPid();
                                                        break;
+                                               case DTS_DESCRIPTOR:
+                                                       if (!isvideo)
+                                                       {
+                                                               isaudio = 1;
+                                                               audio.type = audioStream::atDTS;
+                                                       }
+                                                       break;
                                                case AC3_DESCRIPTOR:
                                                        if (!isvideo)
                                                        {
@@ -354,11 +364,15 @@ int eDVBServicePMTHandler::getProgramInfo(struct program &program)
                        apid_mpeg = m_service->getCachePID(eDVBService::cAPID),
                        pcrpid = m_service->getCachePID(eDVBService::cPCRPID),
                        tpid = m_service->getCachePID(eDVBService::cTPID),
+                       vpidtype = m_service->getCachePID(eDVBService::cVTYPE),
                        cnt=0;
+               if ( vpidtype == -1 )
+                       vpidtype = videoStream::vtMPEG2;
                if ( vpid != -1 )
                {
                        videoStream s;
                        s.pid = vpid;
+                       s.type = vpidtype;
                        program.videoStreams.push_back(s);
                        ++cnt;
                }
@@ -443,32 +457,21 @@ int eDVBServicePMTHandler::getPVRChannel(ePtr<iDVBPVRChannel> &pvr_channel)
 
 void eDVBServicePMTHandler::SDTScanEvent(int event)
 {
-       eDebug("scan event %d!", event);
-
        switch (event)
        {
                case eDVBScan::evtFinish:
                {
                        ePtr<iDVBChannelList> db;
-                       int err;
-                       if ((err = m_resourceManager->getChannelList(db)) != 0)
+                       if (m_resourceManager->getChannelList(db) != 0)
                                eDebug("no channel list");
                        else
                        {
                                m_dvb_scan->insertInto(db);
-                               eDebug("scan done!");
+                               eDebug("sdt update done!");
                        }
                        break;
                }
 
-               case eDVBScan::evtNewService:
-                       eDebug("scan new service");
-                       break;
-
-               case eDVBScan::evtFail:
-                       eDebug("scan failed.");
-                       break;
-
                default:
                        break;
        }
@@ -558,7 +561,7 @@ int eDVBServicePMTHandler::tune(eServiceReferenceDVB &ref, int use_decode_demux,
 
 void eDVBServicePMTHandler::free()
 {
-       eDVBScan *tmp = m_dvb_scan;
+       eDVBScan *tmp = m_dvb_scan;  // do a copy on stack (recursive call of free()) !!!
        m_dvb_scan = 0;
        delete m_dvb_scan;