# HG changeset patch # User michael # Date 1082208981 0 # Node ID a3f44c9168aa22e77d9aab49d76a6979a10cc8bf # Parent 62beeb1a867688c92ccc939c9cf50450e43c8532 flv dropable p frame support diff -r 62beeb1a8676 -r a3f44c9168aa h263.c --- a/h263.c Fri Apr 16 18:50:30 2004 +0000 +++ b/h263.c Sat Apr 17 13:36:21 2004 +0000 @@ -6054,8 +6054,10 @@ s->height = height; s->pict_type = I_TYPE + get_bits(&s->gb, 2); - if (s->pict_type > P_TYPE) + s->dropable= s->pict_type > P_TYPE; + if (s->dropable) s->pict_type = P_TYPE; + skip_bits1(&s->gb); /* deblocking flag */ s->chroma_qscale= s->qscale = get_bits(&s->gb, 5); diff -r 62beeb1a8676 -r a3f44c9168aa mpegvideo.c --- a/mpegvideo.c Fri Apr 16 18:50:30 2004 +0000 +++ b/mpegvideo.c Sat Apr 17 13:36:21 2004 +0000 @@ -1338,7 +1338,7 @@ assert(s->last_picture_ptr==NULL || s->out_format != FMT_H264 || s->codec_id == CODEC_ID_SVQ3); /* mark&release old frames */ - if (s->pict_type != B_TYPE && s->last_picture_ptr && s->last_picture_ptr->data[0]) { + if (s->pict_type != B_TYPE && s->last_picture_ptr && s->last_picture_ptr != s->next_picture_ptr && s->last_picture_ptr->data[0]) { avctx->release_buffer(avctx, (AVFrame*)s->last_picture_ptr); /* release forgotten pictures */ @@ -1368,7 +1368,7 @@ pic= (AVFrame*)&s->picture[i]; } - pic->reference= s->pict_type != B_TYPE ? 3 : 0; + pic->reference= s->pict_type != B_TYPE && !s->dropable ? 3 : 0; pic->coded_picture_number= s->coded_picture_number++; @@ -1390,8 +1390,14 @@ if(s->out_format != FMT_H264 || s->codec_id == CODEC_ID_SVQ3){ if (s->pict_type != B_TYPE) { s->last_picture_ptr= s->next_picture_ptr; - s->next_picture_ptr= s->current_picture_ptr; - } + if(!s->dropable) + s->next_picture_ptr= s->current_picture_ptr; + } +/* av_log(s->avctx, AV_LOG_DEBUG, "L%p N%p C%p L%p N%p C%p type:%d drop:%d\n", s->last_picture_ptr, s->next_picture_ptr,s->current_picture_ptr, + s->last_picture_ptr ? s->last_picture_ptr->data[0] : NULL, + s->next_picture_ptr ? s->next_picture_ptr->data[0] : NULL, + s->current_picture_ptr ? s->current_picture_ptr->data[0] : NULL, + s->pict_type, s->dropable);*/ if(s->last_picture_ptr) copy_picture(&s->last_picture, s->last_picture_ptr); if(s->next_picture_ptr) copy_picture(&s->next_picture, s->next_picture_ptr); diff -r 62beeb1a8676 -r a3f44c9168aa mpegvideo.h --- a/mpegvideo.h Fri Apr 16 18:50:30 2004 +0000 +++ b/mpegvideo.h Sat Apr 17 13:36:21 2004 +0000 @@ -355,8 +355,9 @@ int adaptive_quant; ///< use adaptive quantization int dquant; ///< qscale difference to prev qscale int pict_type; ///< I_TYPE, P_TYPE, B_TYPE, ... - int last_pict_type; + int last_pict_type; //FIXME removes int last_non_b_pict_type; ///< used for mpeg4 gmc b-frames & ratecontrol + int dropable; int frame_rate_index; int frame_rate_ext_n; ///< MPEG-2 specific framerate modificators (numerator) int frame_rate_ext_d; ///< MPEG-2 specific framerate modificators (denominator)