[MPlayer-cvslog] r20506 - trunk/libmpdemux/demux_ts.c
nicodvb
subversion at mplayerhq.hu
Sun Oct 29 12:17:28 CET 2006
Author: nicodvb
Date: Sun Oct 29 12:17:28 2006
New Revision: 20506
Modified:
trunk/libmpdemux/demux_ts.c
Log:
handle broken ts packets before parsing the rest
Modified: trunk/libmpdemux/demux_ts.c
==============================================================================
--- trunk/libmpdemux/demux_ts.c (original)
+++ trunk/libmpdemux/demux_ts.c Sun Oct 29 12:17:28 2006
@@ -2588,11 +2588,11 @@
len = stream_read(stream, &packet[1], 3);
if (len != 3)
return 0;
+ buf_size -= 4;
if((packet[1] >> 7) & 0x01) //transport error
ts_error = 1;
- buf_size -= 4;
is_start = packet[1] & 0x40;
pid = ((packet[1] & 0x1f) << 8) | packet[2];
@@ -2605,6 +2605,21 @@
continue;
}
+ cc = (packet[3] & 0xf);
+ cc_ok = (tss->last_cc < 0) || ((((tss->last_cc + 1) & 0x0f) == cc));
+ tss->last_cc = cc;
+
+ bad = ts_error; // || (! cc_ok);
+ if(bad)
+ {
+ if(priv->keep_broken == 0)
+ {
+ stream_skip(stream, buf_size-1+junk);
+ continue;
+ }
+
+ is_start = 0; //queued to the packet data
+ }
if(is_start)
tss->is_synced = 1;
@@ -2615,11 +2630,6 @@
continue;
}
- cc = (packet[3] & 0xf);
- cc_ok = (tss->last_cc < 0) || ((((tss->last_cc + 1) & 0x0f) == cc));
- tss->last_cc = cc;
-
- bad = ts_error; // || (! cc_ok);
afc = (packet[3] >> 4) & 3;
if(! (afc % 2)) //no payload in this TS packet
@@ -2652,23 +2662,6 @@
continue;
}
}
-
- if(bad)
- {
- // logically this packet should be dropped, but if I do it
- // certain streams play corrupted. Maybe the decoders know
- // how to deal with it, but at least I consider the packet
- // as "not initial"
- mp_msg(MSGT_DEMUX, MSGL_V, "ts_parse: PID=%d, Transport error: %d, CC_OK: %s\n\n", tss->pid, ts_error, (cc_ok ? "yes" : "no"));
-
- if(priv->keep_broken == 0)
- {
- stream_skip(stream, buf_size-1+junk);
- continue;
- }
-
- is_start = 0; //queued to the packet data
- }
//find the program that the pid belongs to; if (it's the right one or -1) && pid_type==SL_SECTION
//call parse_sl_section()
More information about the MPlayer-cvslog
mailing list