summaryrefslogtreecommitdiff
path: root/command/demux.cpp
diff options
context:
space:
mode:
authorJochen Dolze <vdr@dolze.de>2012-09-29 23:03:27 +0200
committerJochen Dolze <vdr@dolze.de>2012-09-29 23:03:27 +0200
commitf1b7114900552cdb5f5eb29db742ca06ddbb36c1 (patch)
tree458f7ed4cff83d819e2467182ecde7e04fe9444c /command/demux.cpp
parent8844d5b4cd4420a5e0643a27b6e7152379ecf447 (diff)
downloadvdr-plugin-markad-f1b7114900552cdb5f5eb29db742ca06ddbb36c1.tar.gz
vdr-plugin-markad-f1b7114900552cdb5f5eb29db742ca06ddbb36c1.tar.bz2
Fixed bug in demuxer
Changed framecounter for H264
Diffstat (limited to 'command/demux.cpp')
-rw-r--r--command/demux.cpp12
1 files changed, 8 insertions, 4 deletions
diff --git a/command/demux.cpp b/command/demux.cpp
index 5e7bf86..17008b9 100644
--- a/command/demux.cpp
+++ b/command/demux.cpp
@@ -112,6 +112,7 @@ int cPaketQueue::findpktheader(int start, int *streamsize,int *headersize, bool
{
if (scanner==1L)
{
+ if (buffer[i]==0xE0) longstartcode=false;
found=true;
break;
}
@@ -149,6 +150,7 @@ int cPaketQueue::findpktheader(int start, int *streamsize,int *headersize, bool
{
if (scanner==1L)
{
+ if (buffer[i]==0xE0) longstartcode=false;
found=true;
}
if ((scanner & 0xFFFFFFF0)==0x1E0L)
@@ -389,9 +391,9 @@ bool cPaketQueue::Put(uchar *Data, int Size)
if (outptr>(inptr-outptr))
{
memcpy(buffer,&buffer[outptr],inptr-outptr);
- if (scannerstart==inptr) scannerstart-=outptr;
+ scannerstart-=outptr;
inptr-=outptr;
- if (pktinfo.pkthdr==outptr) pktinfo.pkthdr=0;
+ if (pktinfo.pkthdr>0) pktinfo.pkthdr-=outptr;
outptr=0;
}
}
@@ -540,6 +542,7 @@ uchar *cPaketQueue::GetPacket(int *Size, int Type)
else
{
scannerstart=pkthdr+pktsyncsize;
+ if (pktsyncsize>4) scanner=0xFFFFFFFF;
}
uchar *ptr=&buffer[pktinfo.pkthdr];
@@ -969,7 +972,7 @@ void cDemux::Clear()
if (ts2pkt_apid) ts2pkt_apid->Clear();
if (queue) queue->Clear();
- offset=0;
+ offset=rawoffset=0;
vdroffset=0;
last_bplen=0;
from_oldfile=0;
@@ -1266,6 +1269,7 @@ int cDemux::Process(uchar *Data, int Count, AvPacket *pkt)
bpkt=queue->Get(&bplen);
if (!bpkt) return -1;
last_bplen=bplen;
+ rawoffset+=bplen;
if ((vdrcount) && (TS)) vdraddpatpmt(bpkt,bplen);
}
@@ -1334,7 +1338,7 @@ int cDemux::Process(uchar *Data, int Count, AvPacket *pkt)
break;
}
}
- if (TS)
+ else
{
if (stream_or_pid==vpid)
{