diff options
author | Jochen Dolze <vdr@dolze.de> | 2010-11-24 21:52:42 +0100 |
---|---|---|
committer | Jochen Dolze <vdr@dolze.de> | 2010-11-24 21:52:42 +0100 |
commit | e2430c1f20aea2082def6aa4227e7303273b72e0 (patch) | |
tree | d108227ae5295630a536d01dbf7bcba7059eeea8 /command/demux.cpp | |
parent | 83de61beb75c5554ec5773f63840990584d5da57 (diff) | |
download | vdr-plugin-markad-e2430c1f20aea2082def6aa4227e7303273b72e0.tar.gz vdr-plugin-markad-e2430c1f20aea2082def6aa4227e7303273b72e0.tar.bz2 |
Added log to recdir option
Added access check for recdir
Diffstat (limited to 'command/demux.cpp')
-rw-r--r-- | command/demux.cpp | 36 |
1 files changed, 5 insertions, 31 deletions
diff --git a/command/demux.cpp b/command/demux.cpp index 752b300..a5b4ed7 100644 --- a/command/demux.cpp +++ b/command/demux.cpp @@ -41,36 +41,6 @@ void cMarkAdDemux::Clear() skip=0; } -void cMarkAdDemux::GetVideoPTS(uchar *Data, int Count, unsigned int *Timestamp) -{ - if (!Data) return; - if (Count<=0) return; - if (!Timestamp) return; - struct PESHDR *peshdr=(struct PESHDR *) Data; - - if ((peshdr->Sync1!=0) && (peshdr->Sync2!=0) && (peshdr->Sync3!=1)) return; - if ((peshdr->StreamID & 0xF0)!=0xE0) return; - - struct PESHDROPT *peshdropt=(struct PESHDROPT *) &Data[sizeof(struct PESHDR)]; - if (peshdropt->MarkerBits!=0x2) return; - - if (peshdropt->PTSDTS<2) return; - - struct PESHDROPTPTS *peshdroptpts=(struct PESHDROPTPTS *) &Data[sizeof(struct PESHDR)+ - sizeof(struct PESHDROPT)]; - - if (peshdroptpts->Marker1 && peshdroptpts->Marker2 && - peshdroptpts->Marker3) -{ - unsigned int pts=0; - pts|=((peshdroptpts->PTS29_15_H<<7|peshdroptpts->PTS29_15_L)<<15); - pts|=(peshdroptpts->PTS14_0_H<<7|peshdroptpts->PTS14_0_L); - pts|=(peshdroptpts->PTS32_30<<30); - *Timestamp=pts; - } - return; -} - void cMarkAdDemux::ProcessVDR(MarkAdPid Pid, uchar *Data, int Count, MarkAdPacket *Pkt) { if (!Pkt) return; @@ -149,7 +119,6 @@ void cMarkAdDemux::ProcessTS(MarkAdPid Pid, uchar *Data, int Count, MarkAdPacket if ((Pid.Type==MARKAD_PIDTYPE_VIDEO_H262) || (Pid.Type==MARKAD_PIDTYPE_VIDEO_H264)) { - GetVideoPTS(pkt.Data,pkt.Length,&Pkt->Timestamp); if ((pkt.Data) && ((pkt.Data[3] & 0xF0)==0xE0) && (pkt.Data[4]!=0) && (pkt.Data[5]!=0)) { ts2pkt->InjectVideoPES(pkt.Data,pkt.Length); @@ -158,6 +127,7 @@ void cMarkAdDemux::ProcessTS(MarkAdPid Pid, uchar *Data, int Count, MarkAdPacket } Pkt->Data=pkt.Data; Pkt->Length=pkt.Length; + Pkt->Skipped=pkt.Skipped; } return; } @@ -207,6 +177,8 @@ int cMarkAdDemux::GetMinNeeded(MarkAdPid Pid, uchar *Data, int Count, bool *Offc } else { + queue->Clear(); + if (Offcnt) *Offcnt=true; return -1; // skip one byte (maybe we get another header!) } } @@ -223,6 +195,7 @@ int cMarkAdDemux::Process(MarkAdPid Pid, uchar *Data, int Count, MarkAdPacket *P { Pkt->Data=NULL; Pkt->Length=0; + Pkt->Skipped=0; Pkt->Offcnt=false; if (!min_needed) @@ -247,6 +220,7 @@ int cMarkAdDemux::Process(MarkAdPid Pid, uchar *Data, int Count, MarkAdPacket *P skip=-t_min_needed-Count; return Count; } + if (t_min_needed==-1) Pkt->Skipped++; return -t_min_needed; } min_needed=t_min_needed; |