diff mbox series

[FFmpeg-devel] avfilter/avf_concat: fix EOF timestamp

Message ID 20210727175544.18227-1-onemda@gmail.com
State New
Headers show
Series [FFmpeg-devel] avfilter/avf_concat: fix EOF timestamp | expand

Checks

Context Check Description
andriy/x86_make success Make finished
andriy/x86_make_fate success Make fate finished
andriy/configure warning Failed to apply patch

Commit Message

Paul B Mahol July 27, 2021, 5:55 p.m. UTC
Signed-off-by: Paul B Mahol <onemda@gmail.com>
---
 libavfilter/avf_concat.c | 10 ++++++++--
 1 file changed, 8 insertions(+), 2 deletions(-)

Comments

Nicolas George July 27, 2021, 5:58 p.m. UTC | #1
Paul B Mahol (12021-07-27):
> Signed-off-by: Paul B Mahol <onemda@gmail.com>
> ---
>  libavfilter/avf_concat.c | 10 ++++++++--
>  1 file changed, 8 insertions(+), 2 deletions(-)
> 
> diff --git a/libavfilter/avf_concat.c b/libavfilter/avf_concat.c
> index cb46f52a04..9bbe896444 100644
> --- a/libavfilter/avf_concat.c
> +++ b/libavfilter/avf_concat.c
> @@ -397,12 +397,18 @@ static int activate(AVFilterContext *ctx)
>      /* Forward status change */
>      if (cat->cur_idx < ctx->nb_inputs) {
>          for (i = 0; i < ctx->nb_outputs; i++) {
> -            ret = ff_inlink_acknowledge_status(ctx->inputs[cat->cur_idx + i], &status, &pts);
> +            AVFilterLink *inlink = ctx->inputs[cat->cur_idx + i];
> +
> +            ret = ff_inlink_acknowledge_status(inlink, &status, &pts);
>              /* TODO use pts */
>              if (ret > 0) {
>                  close_input(ctx, cat->cur_idx + i);
>                  if (cat->cur_idx + ctx->nb_outputs >= ctx->nb_inputs) {
> -                    ff_outlink_set_status(ctx->outputs[i], status, pts);

> +                    int64_t eof_pts;
> +
> +                    eof_pts = cat->delta_ts;

You could merge these two lines.

> +                    eof_pts += av_rescale_q(pts, inlink->time_base, ctx->outputs[i]->time_base);
> +                    ff_outlink_set_status(ctx->outputs[i], status, eof_pts);
>                  }
>                  if (!cat->nb_in_active) {
>                      ret = flush_segment(ctx);

LGTM.

Regards,
diff mbox series

Patch

diff --git a/libavfilter/avf_concat.c b/libavfilter/avf_concat.c
index cb46f52a04..9bbe896444 100644
--- a/libavfilter/avf_concat.c
+++ b/libavfilter/avf_concat.c
@@ -397,12 +397,18 @@  static int activate(AVFilterContext *ctx)
     /* Forward status change */
     if (cat->cur_idx < ctx->nb_inputs) {
         for (i = 0; i < ctx->nb_outputs; i++) {
-            ret = ff_inlink_acknowledge_status(ctx->inputs[cat->cur_idx + i], &status, &pts);
+            AVFilterLink *inlink = ctx->inputs[cat->cur_idx + i];
+
+            ret = ff_inlink_acknowledge_status(inlink, &status, &pts);
             /* TODO use pts */
             if (ret > 0) {
                 close_input(ctx, cat->cur_idx + i);
                 if (cat->cur_idx + ctx->nb_outputs >= ctx->nb_inputs) {
-                    ff_outlink_set_status(ctx->outputs[i], status, pts);
+                    int64_t eof_pts;
+
+                    eof_pts = cat->delta_ts;
+                    eof_pts += av_rescale_q(pts, inlink->time_base, ctx->outputs[i]->time_base);
+                    ff_outlink_set_status(ctx->outputs[i], status, eof_pts);
                 }
                 if (!cat->nb_in_active) {
                     ret = flush_segment(ctx);