comparison h263dec.c @ 924:3814e9115672 libavcodec

cleanup / messup? fixes 20% speedloss bug removes redundant variables from MpegEncContext release buffers in avcodec_flush_buffers() (untested)
author michaelni
date Mon, 09 Dec 2002 00:29:17 +0000
parents f633377858b6
children 7fccaa0d699d
comparison
equal deleted inserted replaced
923:3b5d9ecedc73 924:3814e9115672
53 53
54 // set defaults 54 // set defaults
55 s->quant_precision=5; 55 s->quant_precision=5;
56 s->progressive_sequence=1; 56 s->progressive_sequence=1;
57 s->decode_mb= ff_h263_decode_mb; 57 s->decode_mb= ff_h263_decode_mb;
58 s->low_delay= 1;
58 59
59 /* select sub codec */ 60 /* select sub codec */
60 switch(avctx->codec->id) { 61 switch(avctx->codec->id) {
61 case CODEC_ID_H263: 62 case CODEC_ID_H263:
62 s->gob_number = 0; 63 s->gob_number = 0;
63 break; 64 break;
64 case CODEC_ID_MPEG4: 65 case CODEC_ID_MPEG4:
65 s->time_increment_bits = 4; /* default value for broken headers */ 66 s->time_increment_bits = 4; /* default value for broken headers */
66 s->h263_pred = 1; 67 s->h263_pred = 1;
67 s->has_b_frames = 1; //default, might be overriden in the vol header during header parsing 68 s->low_delay = 0; //default, might be overriden in the vol header during header parsing
68 break; 69 break;
69 case CODEC_ID_MSMPEG4V1: 70 case CODEC_ID_MSMPEG4V1:
70 s->h263_msmpeg4 = 1; 71 s->h263_msmpeg4 = 1;
71 s->h263_pred = 1; 72 s->h263_pred = 1;
72 s->msmpeg4_version=1; 73 s->msmpeg4_version=1;
428 } 429 }
429 ret = ff_mpeg4_decode_picture_header(s, &s->gb); 430 ret = ff_mpeg4_decode_picture_header(s, &s->gb);
430 431
431 if(s->flags& CODEC_FLAG_LOW_DELAY) 432 if(s->flags& CODEC_FLAG_LOW_DELAY)
432 s->low_delay=1; 433 s->low_delay=1;
433
434 s->has_b_frames= !s->low_delay;
435 } else if (s->h263_intel) { 434 } else if (s->h263_intel) {
436 ret = intel_h263_decode_picture_header(s); 435 ret = intel_h263_decode_picture_header(s);
437 } else { 436 } else {
438 ret = h263_decode_picture_header(s); 437 ret = h263_decode_picture_header(s);
439 } 438 }
440 avctx->has_b_frames= s->has_b_frames; 439 avctx->has_b_frames= !s->low_delay;
441 440
442 if(s->workaround_bugs&FF_BUG_AUTODETECT){ 441 if(s->workaround_bugs&FF_BUG_AUTODETECT){
443 if(s->avctx->fourcc == ff_get_fourcc("XVIX")) 442 if(s->avctx->fourcc == ff_get_fourcc("XVIX"))
444 s->workaround_bugs|= FF_BUG_XVID_ILACE; 443 s->workaround_bugs|= FF_BUG_XVID_ILACE;
445 #if 0 444 #if 0
529 // for hurry_up==5 528 // for hurry_up==5
530 s->current_picture.pict_type= s->pict_type; 529 s->current_picture.pict_type= s->pict_type;
531 s->current_picture.key_frame= s->pict_type == I_TYPE; 530 s->current_picture.key_frame= s->pict_type == I_TYPE;
532 531
533 /* skip b frames if we dont have reference frames */ 532 /* skip b frames if we dont have reference frames */
534 if(s->num_available_buffers<2 && s->pict_type==B_TYPE) return get_consumed_bytes(s, buf_size); 533 if(s->last_picture.data[0]==NULL && s->pict_type==B_TYPE) return get_consumed_bytes(s, buf_size);
535 /* skip b frames if we are in a hurry */ 534 /* skip b frames if we are in a hurry */
536 if(avctx->hurry_up && s->pict_type==B_TYPE) return get_consumed_bytes(s, buf_size); 535 if(avctx->hurry_up && s->pict_type==B_TYPE) return get_consumed_bytes(s, buf_size);
537 /* skip everything if we are in a hurry>=5 */ 536 /* skip everything if we are in a hurry>=5 */
538 if(avctx->hurry_up>=5) return get_consumed_bytes(s, buf_size); 537 if(avctx->hurry_up>=5) return get_consumed_bytes(s, buf_size);
539 538
674 } 673 }
675 } 674 }
676 675
677 } 676 }
678 #endif 677 #endif
679 if(s->pict_type==B_TYPE || (!s->has_b_frames)){ 678 if(s->pict_type==B_TYPE || s->low_delay){
680 *pict= *(AVVideoFrame*)&s->current_picture; 679 *pict= *(AVVideoFrame*)&s->current_picture;
681 } else { 680 } else {
682 *pict= *(AVVideoFrame*)&s->last_picture; 681 *pict= *(AVVideoFrame*)&s->last_picture;
683 } 682 }
684 683
685 /* Return the Picture timestamp as the frame number */ 684 /* Return the Picture timestamp as the frame number */
686 /* we substract 1 because it is added on utils.c */ 685 /* we substract 1 because it is added on utils.c */
687 avctx->frame_number = s->picture_number - 1; 686 avctx->frame_number = s->picture_number - 1;
688 687
689 /* dont output the last pic after seeking 688 /* dont output the last pic after seeking */
690 note we allready added +1 for the current pix in MPV_frame_end(s) */ 689 if(s->last_picture.data[0] || s->low_delay)
691 if(s->num_available_buffers>=2 || (!s->has_b_frames))
692 *data_size = sizeof(AVVideoFrame); 690 *data_size = sizeof(AVVideoFrame);
693 #ifdef PRINT_FRAME_TIME 691 #ifdef PRINT_FRAME_TIME
694 printf("%Ld\n", rdtsc()-time); 692 printf("%Ld\n", rdtsc()-time);
695 #endif 693 #endif
696 return get_consumed_bytes(s, buf_size); 694 return get_consumed_bytes(s, buf_size);