diff options
author | Jochen Dolze <vdr@dolze.de> | 2009-10-06 00:36:26 +0200 |
---|---|---|
committer | Jochen Dolze <vdr@dolze.de> | 2009-10-06 00:36:26 +0200 |
commit | c11caab8aa7f1e296694e2eaa4477d299adcd1e6 (patch) | |
tree | 64adfc0dbab11a45f804489f9f4bddbef720fb0c /demux.cpp | |
parent | c69708374c62615009e2b92783dcea696166470e (diff) | |
download | vdr-plugin-markad-c11caab8aa7f1e296694e2eaa4477d299adcd1e6.tar.gz vdr-plugin-markad-c11caab8aa7f1e296694e2eaa4477d299adcd1e6.tar.bz2 |
Fixed TS packet processing (buffer overflows)
Added packet injection
Diffstat (limited to 'demux.cpp')
-rw-r--r-- | demux.cpp | 19 |
1 files changed, 14 insertions, 5 deletions
@@ -48,7 +48,6 @@ void cMarkAdDemux::ProcessVDR(MarkAdPid Pid, uchar *Data, int Count, uchar **Pkt if (!pes2audioes) pes2audioes=new cMarkAdPES2ES(recvnumber,"PES2ES audio"); if (!pes2audioes) return; pes2audioes->Process(Pid,pkt,pktlen,Pkt,PktLen); - return; } if ((Pid.Type==MARKAD_PIDTYPE_VIDEO_H262) || (Pid.Type==MARKAD_PIDTYPE_VIDEO_H264)) @@ -56,14 +55,14 @@ void cMarkAdDemux::ProcessVDR(MarkAdPid Pid, uchar *Data, int Count, uchar **Pkt if (!pes2videoes) pes2videoes=new cMarkAdPES2ES(recvnumber,"PES2ES video",65536); if (!pes2videoes) return; pes2videoes->Process(Pid,pkt,pktlen,Pkt,PktLen); - return; } + return; } void cMarkAdDemux::ProcessTS(MarkAdPid Pid, uchar *Data, int Count, uchar **Pkt, int *PktLen) { - if ((!Pkt) || (!PktLen) || (!Data)) return; + if ((!Pkt) || (!PktLen)) return; *Pkt=NULL; *PktLen=0; @@ -80,14 +79,24 @@ void cMarkAdDemux::ProcessTS(MarkAdPid Pid, uchar *Data, int Count, uchar **Pkt, if (!pes2audioes) pes2audioes=new cMarkAdPES2ES(recvnumber,"PES2ES audio"); if (!pes2audioes) return; pes2audioes->Process(Pid,pkt,pktlen,Pkt,PktLen); - return; } - if (pkt) + if ((Pid.Type==MARKAD_PIDTYPE_VIDEO_H262) || (Pid.Type==MARKAD_PIDTYPE_VIDEO_H264)) + { + if ((pkt) && ((pkt[3] & 0xF0)==0xE0) && (pkt[4]!=0) && (pkt[5]!=0)) + { + ts2pkt->InjectVideoPES(pkt,pktlen); + pkt=NULL; + pktlen=0; + } + } + + if ((pkt) && (!*Pkt)) { *Pkt=pkt; *PktLen=pktlen; } + return; } |