Commit e1113a83 authored by Marton Balint's avatar Marton Balint

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: 's avatarMarton Balint <cus@passwd.hu>
parent be15304e
...@@ -9121,7 +9121,7 @@ Specify the level at which a scene change is detected as a value between ...@@ -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 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 probability for the current frame to introduce a new scene, while a higher
value means the current frame is more likely to be one. value means the current frame is more likely to be one.
The default is @code{7}. The default is @code{8.2}.
@item flags @item flags
Specify flags influencing the filter process. Specify flags influencing the filter process.
......
...@@ -88,7 +88,7 @@ static const AVOption framerate_options[] = { ...@@ -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_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 }, {"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" }, {"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" }, {"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 ...@@ -183,7 +183,7 @@ static double get_scene_score(AVFilterContext *ctx, AVFrame *crnt, AVFrame *next
else 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); 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); diff = fabs(mafd - s->prev_mafd);
ret = av_clipf(FFMIN(mafd, diff), 0, 100.0); ret = av_clipf(FFMIN(mafd, diff), 0, 100.0);
s->prev_mafd = mafd; s->prev_mafd = mafd;
......
...@@ -4,7 +4,7 @@ ...@@ -4,7 +4,7 @@
#dimensions 0: 320x240 #dimensions 0: 320x240
#sar 0: 1/1 #sar 0: 1/1
0, 0, 0, 1, 307200, 0xb49cf016 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, 2, 2, 1, 307200, 0x4d458da1
0, 3, 3, 1, 307200, 0x35d4d8ea 0, 3, 3, 1, 307200, 0x35d4d8ea
0, 4, 4, 1, 307200, 0x88f88697 0, 4, 4, 1, 307200, 0x88f88697
......
...@@ -4,7 +4,7 @@ ...@@ -4,7 +4,7 @@
#dimensions 0: 320x240 #dimensions 0: 320x240
#sar 0: 1/1 #sar 0: 1/1
0, 0, 0, 1, 307200, 0xb49cf016 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, 2, 2, 1, 307200, 0xe4ca172c
0, 3, 3, 1, 307200, 0x5378b13c 0, 3, 3, 1, 307200, 0x5378b13c
0, 4, 4, 1, 307200, 0x2a7d4840 0, 4, 4, 1, 307200, 0x2a7d4840
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment