# HG changeset patch # User michaelni # Date 1046280380 0 # Node ID 9acf4b55204762464825e298ade25ab7ab18e3d7 # Parent 01154fced38082735f252f76d58a8fd73761768d move repeat_pict field from AVCodecContext -> AVFrame (closes bug #683536) diff -r 01154fced380 -r 9acf4b552047 avcodec.h --- a/avcodec.h Tue Feb 25 09:56:56 2003 +0000 +++ b/avcodec.h Wed Feb 26 17:26:20 2003 +0000 @@ -16,8 +16,8 @@ #define LIBAVCODEC_VERSION_INT 0x000406 #define LIBAVCODEC_VERSION "0.4.6" -#define LIBAVCODEC_BUILD 4657 -#define LIBAVCODEC_BUILD_STR "4657" +#define LIBAVCODEC_BUILD 4658 +#define LIBAVCODEC_BUILD_STR "4658" enum CodecID { CODEC_ID_NONE, @@ -280,6 +280,15 @@ * Note: user allocated (direct rendering) & internal buffers can not coexist currently\ */\ int type;\ + \ + /**\ + * when decoding, this signal how much the picture must be delayed.\ + * extra_delay = repeat_pict / (2*fps)\ + * encoding: unused\ + * decoding: set by lavc\ + */\ + int repeat_pict; + #define FF_BUFFER_TYPE_INTERNAL 1 #define FF_BUFFER_TYPE_USER 2 // Direct rendering buffers @@ -379,11 +388,7 @@ * decoding: set by lavc. */ enum PixelFormat pix_fmt; - - int repeat_pict; /* when decoding, this signal how much the picture */ - /* must be delayed. */ - /* extra_delay = (repeat_pict / 2) * (1/fps) */ - + /** * if non NULL, 'draw_horiz_band' is called by the libavcodec * decoder to draw an horizontal band. It improve cache usage. Not diff -r 01154fced380 -r 9acf4b552047 mpeg12.c --- a/mpeg12.c Tue Feb 25 09:56:56 2003 +0000 +++ b/mpeg12.c Wed Feb 26 17:26:20 2003 +0000 @@ -1786,7 +1786,21 @@ s->first_slice = 0; if(MPV_frame_start(s, avctx) < 0) return DECODE_SLICE_FATAL_ERROR; - + /* first check if we must repeat the frame */ + s->current_picture.repeat_pict = 0; + + if (s->repeat_first_field) { + if (s->progressive_sequence) { + if (s->top_field_first) + s->current_picture.repeat_pict = 4; + else + s->current_picture.repeat_pict = 2; + } else if (s->progressive_frame) { + s->current_picture.repeat_pict = 1; + } + } +// printf("%d \n", s->current_picture.repeat_pict); + if(s->avctx->debug&FF_DEBUG_PICT_INFO){ printf("qp:%d fc:%2d%2d%2d%2d %s %s %s %s dc:%d pstruct:%d fdct:%d cmv:%d qtype:%d ivlc:%d rff:%d %s\n", s->qscale, s->mpeg_f_code[0][0],s->mpeg_f_code[0][1],s->mpeg_f_code[1][0],s->mpeg_f_code[1][1], @@ -2146,29 +2160,6 @@ ret = mpeg_decode_slice(avctx, picture, start_code, s->buffer, input_size); if (ret == DECODE_SLICE_EOP) { - /* got a picture: exit */ - /* first check if we must repeat the frame */ - avctx->repeat_pict = 0; -#if 0 - if (s2->progressive_frame && s2->repeat_first_field) { - //fprintf(stderr,"\nRepeat this frame: %d! pict: %d",avctx->frame_number,s2->picture_number); - //s2->repeat_first_field = 0; - //s2->progressive_frame = 0; - if (++s->repeat_field > 2) - s->repeat_field = 0; - avctx->repeat_pict = 1; - } -#endif - if (s2->repeat_first_field) { - if (s2->progressive_sequence) { - if (s2->top_field_first) - avctx->repeat_pict = 4; - else - avctx->repeat_pict = 2; - } else if (s2->progressive_frame) { - avctx->repeat_pict = 1; - } - } *data_size = sizeof(AVPicture); goto the_end; }else if(ret<0){