mirror of
https://github.com/xenia-project/FFmpeg.git
synced 2024-11-24 12:09:55 +00:00
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:
parent
be15304ee6
commit
e1113a83cc
@ -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.
|
||||
|
@ -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;
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
Loading…
Reference in New Issue
Block a user