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;
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)
{
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;
}
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;
}
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;