diff options
author | reimar <reimar@b3059339-0415-0410-9bf9-f77b7e298cf2> | 2005-09-03 08:58:34 +0000 |
---|---|---|
committer | reimar <reimar@b3059339-0415-0410-9bf9-f77b7e298cf2> | 2005-09-03 08:58:34 +0000 |
commit | 9a684fa55fb45fcde9eede7a44998c1fe44785f8 (patch) | |
tree | 81736325f3517390c95074d96770599bea99b56d /libmpdemux/parse_es.c | |
parent | dbe33c933e60f6c5ef59856f66bb3363eaecdf8b (diff) | |
download | mpv-9a684fa55fb45fcde9eede7a44998c1fe44785f8.tar.bz2 mpv-9a684fa55fb45fcde9eede7a44998c1fe44785f8.tar.xz |
faster mpg and much faster gxf demuxing
git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@16370 b3059339-0415-0410-9bf9-f77b7e298cf2
Diffstat (limited to 'libmpdemux/parse_es.c')
-rw-r--r-- | libmpdemux/parse_es.c | 21 |
1 files changed, 11 insertions, 10 deletions
diff --git a/libmpdemux/parse_es.c b/libmpdemux/parse_es.c index 3b90bb7607..a7ddf85054 100644 --- a/libmpdemux/parse_es.c +++ b/libmpdemux/parse_es.c @@ -53,6 +53,8 @@ int sync_video_packet(demux_stream_t *ds){ int read_video_packet(demux_stream_t *ds){ int packet_start; + if (VIDEOBUFFER_SIZE - videobuf_len < 5) + return 0; // SYNC STREAM // if(!sync_video_packet(ds)) return 0; // cannot sync (EOF) @@ -65,21 +67,20 @@ int packet_start; videobuf_len+=4; // READ PACKET: - { unsigned int head=-1; - while(videobuf_len<VIDEOBUFFER_SIZE){ + { + register uint32_t head = 0xffffffff; + register unsigned char *buf = &videobuffer[VIDEOBUFFER_SIZE]; + register int pos = videobuf_len - VIDEOBUFFER_SIZE; + do { int c=demux_getc(ds); if(c<0) break; // EOF - videobuffer[videobuf_len++]=c; -#if 1 + buf[pos]=c; head<<=8; if(head==0x100) break; // synced head|=c; -#else - if(videobuffer[videobuf_len-4]==0 && - videobuffer[videobuf_len-3]==0 && - videobuffer[videobuf_len-2]==1) break; // synced -#endif - } + } while (++pos); + if (pos) pos++; // increment missed because of break + videobuf_len = &buf[pos] - videobuffer; } if(ds->eof){ |