summaryrefslogtreecommitdiffstats
path: root/libmpdemux/demux_ts.c
diff options
context:
space:
mode:
authornicodvb <nicodvb@b3059339-0415-0410-9bf9-f77b7e298cf2>2006-10-28 17:42:25 +0000
committernicodvb <nicodvb@b3059339-0415-0410-9bf9-f77b7e298cf2>2006-10-28 17:42:25 +0000
commitfeed289c95c0fc56ca55436396cdc92742209c5c (patch)
treebd7590dfc34ff8dcbc3cfc933f0c43bf2bf7fab2 /libmpdemux/demux_ts.c
parentefea99c2c9e8ea1f5a96a1cb86aa30ef05b6b828 (diff)
downloadmpv-feed289c95c0fc56ca55436396cdc92742209c5c.tar.bz2
mpv-feed289c95c0fc56ca55436396cdc92742209c5c.tar.xz
in ts_parse() centralized stream_read()+stream_skip(); smaller and cleaner
git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@20494 b3059339-0415-0410-9bf9-f77b7e298cf2
Diffstat (limited to 'libmpdemux/demux_ts.c')
-rw-r--r--libmpdemux/demux_ts.c54
1 files changed, 23 insertions, 31 deletions
diff --git a/libmpdemux/demux_ts.c b/libmpdemux/demux_ts.c
index d2a97c4cec..9b713e8cd4 100644
--- a/libmpdemux/demux_ts.c
+++ b/libmpdemux/demux_ts.c
@@ -2861,6 +2861,27 @@ static int ts_parse(demuxer_t *demuxer , ES_stream_t *es, unsigned char *packet,
}
+ if(probe)
+ {
+ p = &packet[base];
+ }
+ else //feeding
+ {
+ if(*dp_offset + buf_size > *buffer_size)
+ {
+ *buffer_size = *dp_offset + buf_size + TS_FEC_PACKET_SIZE;
+ resize_demux_packet(*dp, *buffer_size);
+ }
+ p = &((*dp)->buffer[*dp_offset]);
+ }
+
+ buf_size = stream_read(stream, p, buf_size);
+ if(buf_size==-1)
+ {
+ mp_msg(MSGT_DEMUX, MSGL_DBG2, "\r\nts_parse() couldn't read data\r\n");
+ continue;
+ }
+ stream_skip(stream, junk);
if(is_start)
{
@@ -2868,10 +2889,6 @@ static int ts_parse(demuxer_t *demuxer , ES_stream_t *es, unsigned char *packet,
mp_msg(MSGT_DEMUX, MSGL_DBG2, "IS_START\n");
- p = &packet[base];
- stream_read(stream, p, buf_size);
- stream_skip(stream, junk);
-
len = pes_parse2(p, buf_size, es, pid_type, pmt, pid);
if(! len)
{
@@ -2912,14 +2929,7 @@ static int ts_parse(demuxer_t *demuxer , ES_stream_t *es, unsigned char *packet,
demuxer->filepos = stream_tell(demuxer->stream) - es->size;
- if(*dp_offset + es->size > *buffer_size)
- {
- *buffer_size = *dp_offset + es->size + TS_FEC_PACKET_SIZE;
- resize_demux_packet(*dp, *buffer_size);
- //we'll skip at least one RESIZE() in the next iteration of ts_parse()
- mp_msg(MSGT_DEMUX, MSGL_DBG2, "RESIZE DP TO %d\n", *buffer_size);
- }
- memcpy(&((*dp)->buffer[*dp_offset]), es->start, es->size);
+ memmove(p, es->start, es->size);
*dp_offset += es->size;
(*dp)->flags = 0;
(*dp)->pos = stream_tell(demuxer->stream);
@@ -2962,7 +2972,6 @@ static int ts_parse(demuxer_t *demuxer , ES_stream_t *es, unsigned char *packet,
}
else
{
- stream_skip(stream, buf_size+junk);
continue;
}
}
@@ -2970,23 +2979,8 @@ static int ts_parse(demuxer_t *demuxer , ES_stream_t *es, unsigned char *packet,
if(! probe)
{
- if(*dp_offset + sz > *buffer_size)
- {
- *buffer_size = *dp_offset + sz + TS_FEC_PACKET_SIZE;
- resize_demux_packet(*dp, *buffer_size);
- //we'll skip at least one RESIZE() in the next iteration of ts_parse()
- mp_msg(MSGT_DEMUX, MSGL_DBG2, "RESIZE DP TO %d\n", *buffer_size);
- }
-
- stream_read(stream, &((*dp)->buffer[*dp_offset]), sz);
*dp_offset += sz;
- if(buf_size - sz > 0)
- {
- stream_skip(stream, buf_size - sz);
- }
- stream_skip(stream, junk);
-
if(*dp_offset >= MAX_PACK_BYTES)
{
(*dp)->pts = tss->last_pts;
@@ -2998,9 +2992,7 @@ static int ts_parse(demuxer_t *demuxer , ES_stream_t *es, unsigned char *packet,
}
else
{
- stream_read(stream, es->start, sz);
- if(buf_size - sz) stream_skip(stream, buf_size-sz);
- stream_skip(stream, junk);
+ memcpy(es->start, p, sz);
if(es->size)
return es->size;