summaryrefslogtreecommitdiff
path: root/command/queue.cpp
diff options
context:
space:
mode:
authorJochen Dolze <vdr@dolze.de>2010-11-22 01:17:28 +0100
committerJochen Dolze <vdr@dolze.de>2010-11-22 01:17:28 +0100
commit2e9d23ab5e3cc12ce58042afdc2d77d098fd498e (patch)
tree2f5887a3b32d4627d6658f1a44998d9145332900 /command/queue.cpp
parent1da680d035c377fa6ec94cc97f786f43b07eea2b (diff)
downloadvdr-plugin-markad-2e9d23ab5e3cc12ce58042afdc2d77d098fd498e.tar.gz
vdr-plugin-markad-2e9d23ab5e3cc12ce58042afdc2d77d098fd498e.tar.bz2
Fixed bug found by neptunvasja
Diffstat (limited to 'command/queue.cpp')
-rw-r--r--command/queue.cpp58
1 files changed, 53 insertions, 5 deletions
diff --git a/command/queue.cpp b/command/queue.cpp
index 9a312e2..65188e4 100644
--- a/command/queue.cpp
+++ b/command/queue.cpp
@@ -163,24 +163,72 @@ int cMarkAdPaketQueue::FindPktHeader(int Start, int *StreamSize,int *HeaderSize,
scanner|=buffer[Start++];
}
+ bool found=false;
for (i=Start; i<inptr; i++)
{
if (LongStartCode)
{
- if (scanner==1L) break;
- if ((scanner & 0xFFFFFFF0)==0x1E0L) break;
+ if (scanner==1L)
+ {
+ found=true;
+ break;
+ }
+ if ((scanner & 0xFFFFFFF0)==0x1E0L)
+ {
+ found=true;
+ break;
+ }
}
else
{
- if ((scanner & 0x00FFFFFF)==1L) break;
+ if ((scanner & 0x00FFFFFF)==1L)
+ {
+ found=true;
+ break;
+ }
}
scanner<<=8;
scanner|=buffer[i];
}
+ if (!found)
+ {
+ if (LongStartCode)
+ {
+ if (scanner==1L)
+ {
+ found=true;
+ }
+ if ((scanner & 0xFFFFFFF0)==0x1E0L)
+ {
+ found=true;
+ }
+ }
+ else
+ {
+ if ((scanner & 0x00FFFFFF)==1L)
+ {
+ found=true;
+ }
+ }
+ }
- if (i==inptr) return -1;
+ if (i==inptr)
+ {
+ if (found)
+ {
+ if (!Start)
+ {
+ scanner=0xFFFFFFFF;
+ return -1;
+ }
+ }
+ else
+ {
+ return -1;
+ }
+ }
if (LongStartCode) i--;
- if (buffer[i]>=0xBC)// do we have a PES packet?
+ if ((buffer[i]>=0xBC) && (!Start)) // do we have a PES packet?
{
#define PESHDRSIZE 6
if ((i+PESHDRSIZE)>inptr)