aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPaul B Mahol <onemda@gmail.com>2023-05-30 10:44:02 +0200
committerPaul B Mahol <onemda@gmail.com>2023-05-30 14:08:40 +0200
commit81f658b99d7bf3979cb0e89e2017ebbde887c960 (patch)
treee3429db0ffe8e58a3dec94238f06787f7baea7f4
parent447bdddeacf5111e1e47c91c9fdf9ebef29c1b70 (diff)
downloadffmpeg-81f658b99d7bf3979cb0e89e2017ebbde887c960.tar.gz
avfilter/f_ebur128: set output frame duration
Also produce output video timestamps that are consistent with 10 frames per second.
-rw-r--r--libavfilter/f_ebur128.c10
1 files changed, 5 insertions, 5 deletions
diff --git a/libavfilter/f_ebur128.c b/libavfilter/f_ebur128.c
index dfa62f0a36..49f68c0e84 100644
--- a/libavfilter/f_ebur128.c
+++ b/libavfilter/f_ebur128.c
@@ -295,7 +295,6 @@ static int config_video_output(AVFilterLink *outlink)
int i, x, y;
uint8_t *p;
AVFilterContext *ctx = outlink->src;
- AVFilterLink *inlink = ctx->inputs[0];
EBUR128Context *ebur128 = ctx->priv;
AVFrame *outpicref;
@@ -308,8 +307,8 @@ static int config_video_output(AVFilterLink *outlink)
outlink->w = ebur128->w;
outlink->h = ebur128->h;
outlink->sample_aspect_ratio = (AVRational){1,1};
- outlink->time_base = inlink->time_base;
outlink->frame_rate = av_make_q(10, 1);
+ outlink->time_base = av_inv_q(outlink->frame_rate);
#define PAD 8
@@ -430,7 +429,7 @@ static int config_audio_input(AVFilterLink *inlink)
* can be more complex to integrate in the one-sample loop of
* filter_frame()). */
if (ebur128->metadata || (ebur128->peak_mode & PEAK_MODE_TRUE_PEAKS))
- ebur128->nb_samples = inlink->sample_rate / 10;
+ ebur128->nb_samples = FFMAX(inlink->sample_rate / 10, 1);
return 0;
}
@@ -735,7 +734,7 @@ static int filter_frame(AVFilterLink *inlink, AVFrame *insamples)
AVFilterLink *outlink = ctx->outputs[0];
const int64_t pts = insamples->pts +
av_rescale_q(idx_insample, (AVRational){ 1, inlink->sample_rate },
- outlink->time_base);
+ ctx->outputs[ebur128->do_video]->time_base);
ebur128->sample_count = 0;
@@ -887,7 +886,8 @@ static int filter_frame(AVFilterLink *inlink, AVFrame *insamples)
}
/* set pts and push frame */
- pic->pts = pts;
+ pic->pts = av_rescale_q(pts, inlink->time_base, outlink->time_base);
+ pic->duration = 1;
clone = av_frame_clone(pic);
if (!clone)
return AVERROR(ENOMEM);