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
This commit is contained in:
nicodvb 2006-10-28 17:42:25 +00:00
parent efea99c2c9
commit feed289c95
1 changed files with 23 additions and 31 deletions

View File

@ -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;