summaryrefslogtreecommitdiffstats
path: root/libmpdemux/parse_es.c
diff options
context:
space:
mode:
authorreimar <reimar@b3059339-0415-0410-9bf9-f77b7e298cf2>2005-09-03 08:58:34 +0000
committerreimar <reimar@b3059339-0415-0410-9bf9-f77b7e298cf2>2005-09-03 08:58:34 +0000
commit9a684fa55fb45fcde9eede7a44998c1fe44785f8 (patch)
tree81736325f3517390c95074d96770599bea99b56d /libmpdemux/parse_es.c
parentdbe33c933e60f6c5ef59856f66bb3363eaecdf8b (diff)
downloadmpv-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.c21
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){