summaryrefslogtreecommitdiff
path: root/libavfilter
diff options
context:
space:
mode:
authorMichael Niedermayer <michaelni@gmx.at>2015-11-03 09:57:25 -0800
committerAnton Khirnov <anton@khirnov.net>2015-11-09 08:09:41 +0100
commit7d12cba95ca15198a930c05458dc414ac00c578b (patch)
tree01e3125740e5eb88d65a91120159b837af261ecd /libavfilter
parent65e73bc60f98dc7b26c687e145dfb755d3f2ccfa (diff)
vf_framepack: Check and update frame_rate
(cherry picked from ffmpeg commit a46a23d30fea9c8a5570e07ec4d9c9b4eaa6eb4f) Signed-off-by: Anton Khirnov <anton@khirnov.net>
Diffstat (limited to 'libavfilter')
-rw-r--r--libavfilter/vf_framepack.c31
1 files changed, 21 insertions, 10 deletions
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;
}