From 1fb4890b5195db4de31733a234abb946f9399f3e Mon Sep 17 00:00:00 2001 From: Michael Niedermayer Date: Thu, 22 Aug 2002 19:41:06 +0000 Subject: better scene change detection Originally committed as revision 858 to svn://svn.ffmpeg.org/ffmpeg/trunk --- libavcodec/motion_est.c | 8 ++++++++ 1 file changed, 8 insertions(+) (limited to 'libavcodec/motion_est.c') diff --git a/libavcodec/motion_est.c b/libavcodec/motion_est.c index ffc251d..612c22c 100644 --- a/libavcodec/motion_est.c +++ b/libavcodec/motion_est.c @@ -1183,6 +1183,7 @@ void ff_estimate_p_frame_motion(MpegEncContext * s, sum= (sum+8)>>4; varc = (pix_norm1(pix, s->linesize) - sum*sum + 500 + 128)>>8; vard = (pix_norm(pix, ppix, s->linesize)+128)>>8; + //printf("%d %d %d %X %X %X\n", s->mb_width, mb_x, mb_y,(int)s, (int)s->mb_var, (int)s->mc_mb_var); fflush(stdout); s->mb_var [s->mb_width * mb_y + mb_x] = varc; s->mc_mb_var[s->mb_width * mb_y + mb_x] = vard; @@ -1195,6 +1196,11 @@ void ff_estimate_p_frame_motion(MpegEncContext * s, varc, s->avg_mb_var, sum, vard, mx - xx, my - yy); #endif if(s->flags&CODEC_FLAG_HQ){ + if (vard <= 64 || vard < varc) + s->scene_change_score+= ff_sqrt(vard) - ff_sqrt(varc); + else + s->scene_change_score+= 20; + if (vard*2 + 200 > varc) mb_type|= MB_TYPE_INTRA; if (varc*2 + 200 > vard){ @@ -1221,6 +1227,7 @@ void ff_estimate_p_frame_motion(MpegEncContext * s, set_p_mv_tables(s, mx, my, 1); }else{ if (vard <= 64 || vard < varc) { + s->scene_change_score+= ff_sqrt(vard) - ff_sqrt(varc); mb_type|= MB_TYPE_INTER; if (s->me_method != ME_ZERO) { if(s->me_method >= ME_EPZS) @@ -1251,6 +1258,7 @@ void ff_estimate_p_frame_motion(MpegEncContext * s, } #endif }else{ + s->scene_change_score+= 20; mb_type|= MB_TYPE_INTRA; mx = 0; my = 0; -- cgit v1.1