[FFmpeg-devel] [PATCH 3/7] Set timebase in the ffplay input and output filters.

Michael Niedermayer michaelni
Tue Oct 12 18:44:00 CEST 2010


On Tue, Oct 12, 2010 at 12:00:59PM +0200, Stefano Sabatini wrote:
> On date Monday 2010-10-11 15:47:01 +0200, Michael Niedermayer encoded:
> > On Mon, Oct 11, 2010 at 02:04:02PM +0200, Stefano Sabatini wrote:
> > > ---
> > >  ffplay.c |   28 ++++++++++++++++++++++++++--
> > >  1 files changed, 26 insertions(+), 2 deletions(-)
> > > 
> > > diff --git a/ffplay.c b/ffplay.c
> > > index 9927006..5d6e2d1 100644
> > > --- a/ffplay.c
> > > +++ b/ffplay.c
> > > @@ -1755,6 +1755,7 @@ static int input_config_props(AVFilterLink *link)
> > >  
> > >      link->w = c->width;
> > >      link->h = c->height;
> > > +    link->time_base = priv->is->video_st->time_base;
> > >  
> > >      return 0;
> > >  }
> > > @@ -1778,8 +1779,29 @@ static AVFilter input_filter =
> > >                                    { .name = NULL }},
> > >  };
> > >  
> > > -static void output_end_frame(AVFilterLink *link)
> > > +static int output_init(AVFilterContext *ctx, const char *args, void *opaque)
> > >  {
> > > +    FilterPriv *priv = ctx->priv;
> > > +    if (!opaque) return AVERROR(EINVAL);
> > > +
> > > +    priv->is = opaque;
> > > +    return 0;
> > > +}
> > > +
> > > +static void output_end_frame(AVFilterLink *inlink)
> > > +{
> > > +    AVFilterContext *ctx = inlink->dst;
> > > +    FilterPriv *priv = ctx->priv;
> > > +    AVRational dst_time_base = priv->is->video_st->time_base;
> > > +
> > > +    if (av_cmp_q(inlink->time_base, dst_time_base)) {
> > > +        int64_t pts1 = inlink->cur_buf->pts;
> > > +        inlink->cur_buf->pts = av_rescale_q(pts1, inlink->time_base, dst_time_base);
> > > +        av_log(ctx, AV_LOG_DEBUG,
> > > +               "tb:%d/%d pts:%"PRId64" -> tb:%d/%d pts:%"PRId64"\n",
> > > +               inlink->time_base.num, inlink->time_base.den, pts1,
> > > +               dst_time_base.num, dst_time_base.den, inlink->cur_buf->pts);
> > > +    }
> > >  }
> > 
> > isnt it simpler to let get_filtered_video_frame()
> > return the tb and do the rescaling outside?
> 
> Sligthly simpler, acceptable by me, if we see that the other way turns
> more convenient (e.g. if we need for other reasons an output init and
> end_frame() function) we can change again later.
> 
> Regards.
> -- 
> FFmpeg = Freak & Fundamental Minimalistic Portable Enhancing God

>  ffplay.c |   17 +++++++++++++++--
>  1 file changed, 15 insertions(+), 2 deletions(-)
> 3f2f86fb8f2806d934b10fefe1fc37a249bb756c  0001-Fix-timebase-handling-at-the-begin-and-at-the-end-of.patch
> From 27d5b56fd2b555784cee7bfe87fa9f598e5aae9c Mon Sep 17 00:00:00 2001
> From: Stefano Sabatini <stefano.sabatini-lala at poste.it>
> Date: Tue, 8 Jun 2010 23:31:04 +0200
> Subject: [PATCH 1/6] Fix timebase handling at the begin and at the end of the ffplay video
>  filterchain.
> 
> Set timebase in the ffplay input, and make get_filtered_video_frame()
> rescale the output frames PTSes according to their timebase.

ok

[...]
-- 
Michael     GnuPG fingerprint: 9FF2128B147EF6730BADF133611EC787040B0FAB

Everything should be made as simple as possible, but not simpler.
-- Albert Einstein
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 198 bytes
Desc: Digital signature
URL: <http://lists.mplayerhq.hu/pipermail/ffmpeg-devel/attachments/20101012/23098959/attachment.pgp>



More information about the ffmpeg-devel mailing list