From bd31a7750f5c7bd9d2aff426566cfc9f40fa07b6 Mon Sep 17 00:00:00 2001 From: Michael Niedermayer Date: Sun, 17 Mar 2002 19:45:33 +0000 Subject: [PATCH] scene change detection Originally committed as revision 337 to svn://svn.ffmpeg.org/ffmpeg/trunk --- libavcodec/mpegvideo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/libavcodec/mpegvideo.c b/libavcodec/mpegvideo.c index 9b23671952..054f12a577 100644 --- a/libavcodec/mpegvideo.c +++ b/libavcodec/mpegvideo.c @@ -487,7 +487,6 @@ int MPV_encode_picture(AVCodecContext *avctx, } else { s->pict_type = I_TYPE; } - avctx->key_frame = (s->pict_type == I_TYPE); MPV_frame_start(s); @@ -518,6 +517,7 @@ int MPV_encode_picture(AVCodecContext *avctx, } encode_picture(s, s->picture_number); + avctx->key_frame = (s->pict_type == I_TYPE); MPV_frame_end(s); s->picture_number++; @@ -1078,6 +1078,18 @@ static void encode_picture(MpegEncContext *s, int picture_number) } } + if(s->avg_mb_var < s->mc_mb_var && s->pict_type != B_TYPE){ //FIXME subtract MV bits + int i; + s->pict_type= I_TYPE; + for(i=0; imb_height*s->mb_width; i++){ + s->mb_type[i] = I_TYPE; + s->mv_table[0][i] = 0; + s->mv_table[1][i] = 0; + } + } + +// printf("%d %d\n", s->avg_mb_var, s->mc_mb_var); + if (!s->fixed_qscale) s->qscale = rate_estimate_qscale(s);