From 7d12cba95ca15198a930c05458dc414ac00c578b Mon Sep 17 00:00:00 2001 From: Michael Niedermayer Date: Tue, 3 Nov 2015 09:57:25 -0800 Subject: vf_framepack: Check and update frame_rate (cherry picked from ffmpeg commit a46a23d30fea9c8a5570e07ec4d9c9b4eaa6eb4f) Signed-off-by: Anton Khirnov --- libavfilter/vf_framepack.c | 31 +++++++++++++++++++++---------- 1 file changed, 21 insertions(+), 10 deletions(-) (limited to 'libavfilter') diff --git a/libavfilter/vf_framepack.c b/libavfilter/vf_framepack.c index e9806ba1cc..f3bb6b36ae 100644 --- a/libavfilter/vf_framepack.c +++ b/libavfilter/vf_framepack.c @@ -76,12 +76,13 @@ static av_cold void framepack_uninit(AVFilterContext *ctx) static int config_output(AVFilterLink *outlink) { - AVFilterContext *ctx = outlink->src; - FramepackContext *s = outlink->src->priv; + AVFilterContext *ctx = outlink->src; + FramepackContext *s = outlink->src->priv; - int width = ctx->inputs[LEFT]->w; - int height = ctx->inputs[LEFT]->h; - AVRational time_base = ctx->inputs[LEFT]->time_base; + int width = ctx->inputs[LEFT]->w; + int height = ctx->inputs[LEFT]->h; + AVRational time_base = ctx->inputs[LEFT]->time_base; + AVRational frame_rate = ctx->inputs[LEFT]->frame_rate; // check size and fps match on the other input if (width != ctx->inputs[RIGHT]->w || @@ -93,11 +94,18 @@ static int config_output(AVFilterLink *outlink) return AVERROR_INVALIDDATA; } else if (av_cmp_q(time_base, ctx->inputs[RIGHT]->time_base) != 0) { av_log(ctx, AV_LOG_ERROR, - "Left and right framerates differ (%d/%d vs %d/%d).\n", + "Left and right time bases differ (%d/%d vs %d/%d).\n", time_base.num, time_base.den, ctx->inputs[RIGHT]->time_base.num, ctx->inputs[RIGHT]->time_base.den); return AVERROR_INVALIDDATA; + } else if (av_cmp_q(frame_rate, ctx->inputs[RIGHT]->frame_rate) != 0) { + av_log(ctx, AV_LOG_ERROR, + "Left and right framerates differ (%d/%d vs %d/%d).\n", + frame_rate.num, frame_rate.den, + ctx->inputs[RIGHT]->frame_rate.num, + ctx->inputs[RIGHT]->frame_rate.den); + return AVERROR_INVALIDDATA; } s->pix_desc = av_pix_fmt_desc_get(outlink->format); @@ -107,7 +115,9 @@ static int config_output(AVFilterLink *outlink) // modify output properties as needed switch (s->format) { case AV_STEREO3D_FRAMESEQUENCE: - time_base.den *= 2; + time_base.den *= 2; + frame_rate.num *= 2; + s->double_pts = AV_NOPTS_VALUE; break; case AV_STEREO3D_COLUMNS: @@ -123,9 +133,10 @@ static int config_output(AVFilterLink *outlink) return AVERROR_INVALIDDATA; } - outlink->w = width; - outlink->h = height; - outlink->time_base = time_base; + outlink->w = width; + outlink->h = height; + outlink->time_base = time_base; + outlink->frame_rate = frame_rate; return 0; } -- cgit v1.2.3