diff options
author | Michael Niedermayer <michaelni@gmx.at> | 2004-01-15 01:29:26 +0000 |
---|---|---|
committer | Michael Niedermayer <michaelni@gmx.at> | 2004-01-15 01:29:26 +0000 |
commit | fb204d4bc1d05f1713534ab19cccfb993d738d7f (patch) | |
tree | 94d8b526daef4fecca3a04dda2f6fb4b9dc026df /libavcodec/h263dec.c | |
parent | 29962fea47d1499cbd3716fcefd0d71b23d1869f (diff) | |
download | ffmpeg-fb204d4bc1d05f1713534ab19cccfb993d738d7f.tar.gz |
xvid "packed" stuff support
Originally committed as revision 2708 to svn://svn.ffmpeg.org/ffmpeg/trunk
Diffstat (limited to 'libavcodec/h263dec.c')
-rw-r--r-- | libavcodec/h263dec.c | 18 |
1 files changed, 12 insertions, 6 deletions
diff --git a/libavcodec/h263dec.c b/libavcodec/h263dec.c index 6a00025544..2ce41b4ba1 100644 --- a/libavcodec/h263dec.c +++ b/libavcodec/h263dec.c @@ -425,9 +425,10 @@ uint64_t time= rdtsc(); return buf_size; } + retry: - if(s->bitstream_buffer_size && buf_size<20){ //divx 5.01+ frame reorder + if(s->bitstream_buffer_size && (s->divx_packed || buf_size<20)){ //divx 5.01+/xvid frame reorder init_get_bits(&s->gb, s->bitstream_buffer, s->bitstream_buffer_size*8); }else init_get_bits(&s->gb, buf, buf_size*8); @@ -678,21 +679,26 @@ retry: /* divx 5.01+ bistream reorder stuff */ if(s->codec_id==CODEC_ID_MPEG4 && s->bitstream_buffer_size==0 && s->divx_packed){ int current_pos= get_bits_count(&s->gb)>>3; + int startcode_found=0; if( buf_size - current_pos > 5 && buf_size - current_pos < BITSTREAM_BUFFER_SIZE){ int i; - int startcode_found=0; for(i=current_pos; i<buf_size-3; i++){ if(buf[i]==0 && buf[i+1]==0 && buf[i+2]==1 && buf[i+3]==0xB6){ startcode_found=1; break; } } - if(startcode_found){ - memcpy(s->bitstream_buffer, buf + current_pos, buf_size - current_pos); - s->bitstream_buffer_size= buf_size - current_pos; - } + } + if(s->gb.buffer == s->bitstream_buffer && buf_size>20){ //xvid style + startcode_found=1; + current_pos=0; + } + + if(startcode_found){ + memcpy(s->bitstream_buffer, buf + current_pos, buf_size - current_pos); + s->bitstream_buffer_size= buf_size - current_pos; } } |