avfilter/vf_framerate: calculate interpolation as integer

It was truncated to int later on anyway. Fate test changes are due to rounding
instead of truncation.

Fixes fate test failures on x86-32 (gcc 4.8 (Ubuntu 4.8.5-2ubuntu1~14.04.1))
after 090b740680.

Signed-off-by: Marton Balint <cus@passwd.hu>
This commit is contained in:
Marton Balint 2017-12-22 00:18:25 +01:00
parent fde057dfb2
commit f528c49c7c
4 changed files with 55 additions and 51 deletions

View File

@ -47,8 +47,10 @@ typedef struct FrameRateContext {
AVRational dest_frame_rate; ///< output frames per second
int flags; ///< flags affecting frame rate conversion algorithm
double scene_score; ///< score that denotes a scene change has happened
int interp_start; ///< start of range to apply linear interpolation
int interp_end; ///< end of range to apply linear interpolation
int interp_start; ///< start of range to apply linear interpolation (same bitdepth as input)
int interp_end; ///< end of range to apply linear interpolation (same bitdepth as input)
int interp_start_param; ///< start of range to apply linear interpolation
int interp_end_param; ///< end of range to apply linear interpolation
int line_size[4]; ///< bytes of pixel data per line for each plane
int vsub;
@ -87,8 +89,8 @@ typedef struct FrameRateContext {
static const AVOption framerate_options[] = {
{"fps", "required output frames per second rate", OFFSET(dest_frame_rate), AV_OPT_TYPE_VIDEO_RATE, {.str="50"}, 0, INT_MAX, 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_start", "point to start linear interpolation", OFFSET(interp_start_param),AV_OPT_TYPE_INT, {.i64=15}, 0, 255, V|F },
{"interp_end", "point to end linear interpolation", OFFSET(interp_end_param), AV_OPT_TYPE_INT, {.i64=240}, 0, 255, 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" },
@ -305,7 +307,7 @@ static int filter_slice16(AVFilterContext *ctx, void *arg, int job, int nb_jobs)
return 0;
}
static int blend_frames(AVFilterContext *ctx, float interpolate,
static int blend_frames(AVFilterContext *ctx, int interpolate,
int src1, int src2)
{
FrameRateContext *s = ctx->priv;
@ -326,7 +328,7 @@ static int blend_frames(AVFilterContext *ctx, float interpolate,
ThreadData td;
td.copy_src1 = s->srce[src1];
td.copy_src2 = s->srce[src2];
td.src2_factor = fabsf(interpolate) * (1 << (s->bitdepth - 8));
td.src2_factor = FFABS(interpolate);
td.src1_factor = s->max - td.src2_factor;
// get work-space for output frame
@ -347,7 +349,7 @@ static int process_work_frame(AVFilterContext *ctx, int stop)
{
FrameRateContext *s = ctx->priv;
int64_t work_next_pts;
float interpolate;
int interpolate;
int src1, src2;
ff_dlog(ctx, "process_work_frame()\n");
@ -390,8 +392,8 @@ static int process_work_frame(AVFilterContext *ctx, int stop)
}
// calculate interpolation
interpolate = ((s->pts - s->srce_pts_dest[s->crnt]) * 256.0 / s->average_srce_pts_dest_delta);
ff_dlog(ctx, "process_work_frame() interpolate:%f/256\n", interpolate);
interpolate = av_rescale(s->pts - s->srce_pts_dest[s->crnt], s->max, s->average_srce_pts_dest_delta);
ff_dlog(ctx, "process_work_frame() interpolate:%d/%d\n", interpolate, s->max);
src1 = s->crnt;
if (interpolate > s->interp_end) {
ff_dlog(ctx, "process_work_frame() source is:NEXT\n");
@ -572,6 +574,8 @@ static int config_input(AVFilterLink *inlink)
s->bitdepth = pix_desc->comp[0].depth;
s->vsub = pix_desc->log2_chroma_h;
s->interp_start = s->interp_start_param << (s->bitdepth - 8);
s->interp_end = s->interp_end_param << (s->bitdepth - 8);
s->sad = av_pixelutils_get_sad_fn(3, 3, 2, s); // 8x8 both sources aligned
if (!s->sad)

View File

@ -6,50 +6,50 @@
0, 0, 0, 1, 307200, 0xb49cf016
0, 1, 1, 1, 307200, 0xc3be6971
0, 2, 2, 1, 307200, 0x4d458da1
0, 3, 3, 1, 307200, 0x35d4d8ea
0, 4, 4, 1, 307200, 0x88f88697
0, 3, 3, 1, 307200, 0xb49ed940
0, 4, 4, 1, 307200, 0x1577849f
0, 5, 5, 1, 307200, 0xaf71e7fc
0, 6, 6, 1, 307200, 0x1290a487
0, 7, 7, 1, 307200, 0xaf0cf5ee
0, 8, 8, 1, 307200, 0x9fe73a9b
0, 9, 9, 1, 307200, 0xb7965b77
0, 8, 8, 1, 307200, 0x6ffb3abb
0, 9, 9, 1, 307200, 0x9e65597e
0, 10, 10, 1, 307200, 0x9f84df5d
0, 11, 11, 1, 307200, 0xf60b8c87
0, 12, 12, 1, 307200, 0xe2eac3a7
0, 13, 13, 1, 307200, 0xefbbc67a
0, 14, 14, 1, 307200, 0xb293001a
0, 13, 13, 1, 307200, 0x2c4ac771
0, 14, 14, 1, 307200, 0xf4d9003d
0, 15, 15, 1, 307200, 0xab2162fc
0, 16, 16, 1, 307200, 0xdc90848a
0, 17, 17, 1, 307200, 0x29f79f4b
0, 18, 18, 1, 307200, 0x62aee029
0, 19, 19, 1, 307200, 0xcb6de0e9
0, 18, 18, 1, 307200, 0x45b1e01b
0, 19, 19, 1, 307200, 0x43baddc2
0, 20, 20, 1, 307200, 0xf2b12fe5
0, 21, 21, 1, 307200, 0x1de67e13
0, 22, 22, 1, 307200, 0xfc1f7774
0, 23, 23, 1, 307200, 0x707fe832
0, 24, 24, 1, 307200, 0xe2dc0742
0, 23, 23, 1, 307200, 0x5552e7f2
0, 24, 24, 1, 307200, 0xb1d60366
0, 25, 25, 1, 307200, 0x4693ab03
0, 26, 26, 1, 307200, 0x7295ef7a
0, 27, 27, 1, 307200, 0xf442a5df
0, 28, 28, 1, 307200, 0x3019dbbc
0, 29, 29, 1, 307200, 0xd82a394d
0, 28, 28, 1, 307200, 0x01e0dbb8
0, 29, 29, 1, 307200, 0xf10c3549
0, 30, 30, 1, 307200, 0x8a512668
0, 31, 31, 1, 307200, 0x69e7b43e
0, 32, 32, 1, 307200, 0x6c5343ca
0, 33, 33, 1, 307200, 0x8aac4531
0, 34, 34, 1, 307200, 0x4b7f5b63
0, 33, 33, 1, 307200, 0xf323456c
0, 34, 34, 1, 307200, 0xeead5632
0, 35, 35, 1, 307200, 0x4e24d659
0, 36, 36, 1, 307200, 0x7a25b546
0, 37, 37, 1, 307200, 0x9b7e8e8f
0, 38, 38, 1, 307200, 0x94ec9d3d
0, 39, 39, 1, 307200, 0x856ea560
0, 38, 38, 1, 307200, 0x9d059d4c
0, 39, 39, 1, 307200, 0x21c4a16f
0, 40, 40, 1, 307200, 0xb6505ff0
0, 41, 41, 1, 307200, 0x12562a42
0, 42, 42, 1, 307200, 0x3335e451
0, 43, 43, 1, 307200, 0x7f0374c9
0, 44, 44, 1, 307200, 0x487e798a
0, 43, 43, 1, 307200, 0x6f1274cf
0, 44, 44, 1, 307200, 0xa52e71d2
0, 45, 45, 1, 307200, 0x4fda2634
0, 46, 46, 1, 307200, 0x5b48d624
0, 47, 47, 1, 307200, 0xa9505af8
0, 48, 48, 1, 307200, 0xce7248b5
0, 49, 49, 1, 307200, 0x8fbc1bec
0, 48, 48, 1, 307200, 0xc2624880
0, 49, 49, 1, 307200, 0x4eb317a5

View File

@ -4,61 +4,61 @@
#dimensions 0: 320x240
#sar 0: 1/1
0, 0, 0, 1, 307200, 0xb49cf016
0, 1, 1, 1, 307200, 0x59cb92c7
0, 1, 1, 1, 307200, 0xbe4390ed
0, 2, 2, 1, 307200, 0xe4ca172c
0, 3, 3, 1, 307200, 0x5378b13c
0, 4, 4, 1, 307200, 0x2a7d4840
0, 4, 4, 1, 307200, 0xe742454c
0, 5, 5, 1, 307200, 0x68f620cd
0, 6, 6, 1, 307200, 0x83dbe321
0, 7, 7, 1, 307200, 0xcd73c6ab
0, 7, 7, 1, 307200, 0x7135c77d
0, 8, 8, 1, 307200, 0xc69a864a
0, 9, 9, 1, 307200, 0xc5c8b0f8
0, 10, 10, 1, 307200, 0xf08a6033
0, 10, 10, 1, 307200, 0xf6ee5d1c
0, 11, 11, 1, 307200, 0xab36763c
0, 12, 12, 1, 307200, 0xcba4c6bb
0, 13, 13, 1, 307200, 0x8dabc7b5
0, 13, 13, 1, 307200, 0xb379c679
0, 14, 14, 1, 307200, 0x63339757
0, 15, 15, 1, 307200, 0x4bdfd3ca
0, 16, 16, 1, 307200, 0x699c9c83
0, 16, 16, 1, 307200, 0x14e09691
0, 17, 17, 1, 307200, 0x5dc7c711
0, 18, 18, 1, 307200, 0xda8c6c41
0, 19, 19, 1, 307200, 0xeb4ac99c
0, 19, 19, 1, 307200, 0xe187c6b6
0, 20, 20, 1, 307200, 0x5d8b76ab
0, 21, 21, 1, 307200, 0xe2337c57
0, 22, 22, 1, 307200, 0x84531dcf
0, 22, 22, 1, 307200, 0x492117d7
0, 23, 23, 1, 307200, 0xf0df5ea3
0, 24, 24, 1, 307200, 0x4237e892
0, 25, 25, 1, 307200, 0xc111a9eb
0, 25, 25, 1, 307200, 0x4f61a7d7
0, 26, 26, 1, 307200, 0x2ba55745
0, 27, 27, 1, 307200, 0x0e058165
0, 28, 28, 1, 307200, 0xd184f860
0, 28, 28, 1, 307200, 0xe371f352
0, 29, 29, 1, 307200, 0xab562bfe
0, 30, 30, 1, 307200, 0x0b58bcf7
0, 31, 31, 1, 307200, 0x044f4a16
0, 31, 31, 1, 307200, 0xf1a04a1e
0, 32, 32, 1, 307200, 0xb466f1d6
0, 33, 33, 1, 307200, 0x3ed6b5d8
0, 34, 34, 1, 307200, 0xb8b82049
0, 34, 34, 1, 307200, 0x05091a43
0, 35, 35, 1, 307200, 0xbfb20efc
0, 36, 36, 1, 307200, 0xbd67248a
0, 37, 37, 1, 307200, 0x76e11928
0, 37, 37, 1, 307200, 0x58001b29
0, 38, 38, 1, 307200, 0x6ec5bbb1
0, 39, 39, 1, 307200, 0x0e4455cd
0, 40, 40, 1, 307200, 0x5ccf33fb
0, 40, 40, 1, 307200, 0x5c2c3213
0, 41, 41, 1, 307200, 0x976f6900
0, 42, 42, 1, 307200, 0x58adad3f
0, 43, 43, 1, 307200, 0x1f791403
0, 43, 43, 1, 307200, 0x8dbb14f0
0, 44, 44, 1, 307200, 0x49163226
0, 45, 45, 1, 307200, 0xaac8e1ca
0, 46, 46, 1, 307200, 0x7fe784f7
0, 46, 46, 1, 307200, 0x07cc8404
0, 47, 47, 1, 307200, 0xbf85c994
0, 48, 48, 1, 307200, 0x22ed5b5a
0, 49, 49, 1, 307200, 0xdbeee1f3
0, 49, 49, 1, 307200, 0x1bf7df1e
0, 50, 50, 1, 307200, 0x3a21b4d2
0, 51, 51, 1, 307200, 0xbd5edb2d
0, 52, 52, 1, 307200, 0xc66d8b27
0, 52, 52, 1, 307200, 0x336a8437
0, 53, 53, 1, 307200, 0x02c7e528
0, 54, 54, 1, 307200, 0xba073e6f
0, 55, 55, 1, 307200, 0xf745ded7
0, 55, 55, 1, 307200, 0x9e25ddfe
0, 56, 56, 1, 307200, 0x8cf55128
0, 57, 57, 1, 307200, 0x4e740b42
0, 58, 58, 1, 307200, 0x7906723a
0, 58, 58, 1, 307200, 0x8e7e705c

View File

@ -6,10 +6,10 @@
0, 0, 0, 1, 115200, 0x3744b3ed
0, 1, 1, 1, 115200, 0xc44bdc65
0, 2, 2, 1, 115200, 0xa17f0d74
0, 3, 3, 1, 115200, 0xb0c83274
0, 3, 3, 1, 115200, 0xd72532a9
0, 4, 4, 1, 115200, 0x232d6368
0, 5, 5, 1, 115200, 0x6e318ba0
0, 6, 6, 1, 115200, 0x247e846e
0, 7, 7, 1, 115200, 0x89e27599
0, 8, 8, 1, 115200, 0x31c5704e
0, 8, 8, 1, 115200, 0x68536eac
0, 9, 9, 1, 115200, 0x97e45fec