avfilter/vf_framerate: fix scene change detection score

- normalize score to [0..100] instead of [0..85]
- change the default score to 8.2 to roughly keep existing behaviour
- take into account bit depth
- do not truncate to integer

Signed-off-by: Marton Balint <cus@passwd.hu>
This commit is contained in:
Marton Balint 2017-12-10 00:29:12 +01:00
parent be15304ee6
commit e1113a83cc
4 changed files with 5 additions and 5 deletions

View File

@ -9121,7 +9121,7 @@ Specify the level at which a scene change is detected as a value between
0 and 100 to indicate a new scene; a low value reflects a low
probability for the current frame to introduce a new scene, while a higher
value means the current frame is more likely to be one.
The default is @code{7}.
The default is @code{8.2}.
@item flags
Specify flags influencing the filter process.

View File

@ -88,7 +88,7 @@ static const AVOption framerate_options[] = {
{"interp_start", "point to start linear interpolation", OFFSET(interp_start), AV_OPT_TYPE_INT, {.i64=15}, 0, 255, V|F },
{"interp_end", "point to end linear interpolation", OFFSET(interp_end), AV_OPT_TYPE_INT, {.i64=240}, 0, 255, V|F },
{"scene", "scene change level", OFFSET(scene_score), AV_OPT_TYPE_DOUBLE, {.dbl=7.0}, 0, INT_MAX, V|F },
{"scene", "scene change level", OFFSET(scene_score), AV_OPT_TYPE_DOUBLE, {.dbl=8.2}, 0, INT_MAX, V|F },
{"flags", "set flags", OFFSET(flags), AV_OPT_TYPE_FLAGS, {.i64=1}, 0, INT_MAX, V|F, "flags" },
{"scene_change_detect", "enable scene change detection", 0, AV_OPT_TYPE_CONST, {.i64=FRAMERATE_FLAG_SCD}, INT_MIN, INT_MAX, V|F, "flags" },
@ -183,7 +183,7 @@ static double get_scene_score(AVFilterContext *ctx, AVFrame *crnt, AVFrame *next
else
sad = scene_sad16(s, (const uint16_t*)crnt->data[0], crnt->linesize[0] >> 1, (const uint16_t*)next->data[0], next->linesize[0] >> 1, crnt->height);
mafd = sad / (crnt->height * crnt->width * 3);
mafd = (double)sad * 100.0 / (crnt->height * crnt->width) / (1 << s->bitdepth);
diff = fabs(mafd - s->prev_mafd);
ret = av_clipf(FFMIN(mafd, diff), 0, 100.0);
s->prev_mafd = mafd;

View File

@ -4,7 +4,7 @@
#dimensions 0: 320x240
#sar 0: 1/1
0, 0, 0, 1, 307200, 0xb49cf016
0, 1, 1, 1, 307200, 0xfe025c7f
0, 1, 1, 1, 307200, 0xc3be6971
0, 2, 2, 1, 307200, 0x4d458da1
0, 3, 3, 1, 307200, 0x35d4d8ea
0, 4, 4, 1, 307200, 0x88f88697

View File

@ -4,7 +4,7 @@
#dimensions 0: 320x240
#sar 0: 1/1
0, 0, 0, 1, 307200, 0xb49cf016
0, 1, 1, 1, 307200, 0xc74259b4
0, 1, 1, 1, 307200, 0x59cb92c7
0, 2, 2, 1, 307200, 0xe4ca172c
0, 3, 3, 1, 307200, 0x5378b13c
0, 4, 4, 1, 307200, 0x2a7d4840