comparison h263dec.c @ 1747:8cfd36bfe504 libavcodec

xvid "packed" stuff support
author michael
date Thu, 15 Jan 2004 01:29:26 +0000
parents 07a484280a82
children bdf3927bf8c5
comparison
equal deleted inserted replaced
1746:67949dc3117b 1747:8cfd36bfe504
423 423
424 if( ff_combine_frame(s, next, &buf, &buf_size) < 0 ) 424 if( ff_combine_frame(s, next, &buf, &buf_size) < 0 )
425 return buf_size; 425 return buf_size;
426 } 426 }
427 427
428
428 retry: 429 retry:
429 430
430 if(s->bitstream_buffer_size && buf_size<20){ //divx 5.01+ frame reorder 431 if(s->bitstream_buffer_size && (s->divx_packed || buf_size<20)){ //divx 5.01+/xvid frame reorder
431 init_get_bits(&s->gb, s->bitstream_buffer, s->bitstream_buffer_size*8); 432 init_get_bits(&s->gb, s->bitstream_buffer, s->bitstream_buffer_size*8);
432 }else 433 }else
433 init_get_bits(&s->gb, buf, buf_size*8); 434 init_get_bits(&s->gb, buf, buf_size*8);
434 s->bitstream_buffer_size=0; 435 s->bitstream_buffer_size=0;
435 436
676 } 677 }
677 678
678 /* divx 5.01+ bistream reorder stuff */ 679 /* divx 5.01+ bistream reorder stuff */
679 if(s->codec_id==CODEC_ID_MPEG4 && s->bitstream_buffer_size==0 && s->divx_packed){ 680 if(s->codec_id==CODEC_ID_MPEG4 && s->bitstream_buffer_size==0 && s->divx_packed){
680 int current_pos= get_bits_count(&s->gb)>>3; 681 int current_pos= get_bits_count(&s->gb)>>3;
682 int startcode_found=0;
681 683
682 if( buf_size - current_pos > 5 684 if( buf_size - current_pos > 5
683 && buf_size - current_pos < BITSTREAM_BUFFER_SIZE){ 685 && buf_size - current_pos < BITSTREAM_BUFFER_SIZE){
684 int i; 686 int i;
685 int startcode_found=0;
686 for(i=current_pos; i<buf_size-3; i++){ 687 for(i=current_pos; i<buf_size-3; i++){
687 if(buf[i]==0 && buf[i+1]==0 && buf[i+2]==1 && buf[i+3]==0xB6){ 688 if(buf[i]==0 && buf[i+1]==0 && buf[i+2]==1 && buf[i+3]==0xB6){
688 startcode_found=1; 689 startcode_found=1;
689 break; 690 break;
690 } 691 }
691 } 692 }
692 if(startcode_found){ 693 }
693 memcpy(s->bitstream_buffer, buf + current_pos, buf_size - current_pos); 694 if(s->gb.buffer == s->bitstream_buffer && buf_size>20){ //xvid style
694 s->bitstream_buffer_size= buf_size - current_pos; 695 startcode_found=1;
695 } 696 current_pos=0;
697 }
698
699 if(startcode_found){
700 memcpy(s->bitstream_buffer, buf + current_pos, buf_size - current_pos);
701 s->bitstream_buffer_size= buf_size - current_pos;
696 } 702 }
697 } 703 }
698 704
699 ff_er_frame_end(s); 705 ff_er_frame_end(s);
700 706