On Thu, 2015-10-29 at 19:55 +0100, Anton Khirnov wrote:
> Quoting John Stebbins (2015-10-28 17:48:35)
> > From: Stefano Sabatini <[email protected]>
> > 
> > Useful for dealing with constant frame-rate video.
> > 
> > (cherry picked from ffmpeg commit
> > 722762f7e1212b4d02142778fabfdd73375722e0)
> > ---
> >  doc/filters.texi     | 3 +++
> >  libavfilter/setpts.c | 6 ++++++
> >  2 files changed, 9 insertions(+)
> > 
> > diff --git a/doc/filters.texi b/doc/filters.texi
> > index d9874b6..9804c0e 100644
> > --- a/doc/filters.texi
> > +++ b/doc/filters.texi
> > @@ -209,6 +209,9 @@ The expression is evaluated through the eval API
> > and can contain the following
> >  constants:
> >  
> >  @table @option
> > +@item FRAME_RATE
> > +frame rate, only defined for constant frame-rate video
> > +
> >  @item PTS
> >  the presentation timestamp in input
> >  
> > diff --git a/libavfilter/setpts.c b/libavfilter/setpts.c
> > index 98bafc2..ab3674a 100644
> > --- a/libavfilter/setpts.c
> > +++ b/libavfilter/setpts.c
> > @@ -41,6 +41,7 @@
> >  
> >  static const char *const var_names[] = {
> >      "E",           ///< Euler number
> > +    "FRAME_RATE",  ///< defined only for constant frame-rate video
> >      "INTERLACED",  ///< tell if the current frame is interlaced
> >      "N",           ///< frame / sample number (starting at zero)
> >      "PHI",         ///< golden ratio
> > @@ -59,6 +60,7 @@ static const char *const var_names[] = {
> >  
> >  enum var_name {
> >      VAR_E,
> > +    VAR_FRAME_RATE,
> >      VAR_INTERLACED,
> >      VAR_N,
> >      VAR_PHI,
> > @@ -115,6 +117,10 @@ static int config_input(AVFilterLink *inlink)
> >          setpts->var_values[VAR_SR] = inlink->sample_rate;
> >      }
> >  
> > +    setpts->var_values[VAR_FRAME_RATE] = inlink->frame_rate.num &&
> > +                                         inlink->frame_rate.den ?
> > +                                            av_q2d(inlink
> > ->frame_rate) : NAN;
> > +
> >      av_log(inlink->src, AV_LOG_VERBOSE, "TB:%f\n", setpts
> > ->var_values[VAR_TB]);
> >      return 0;
> >  }
> > -- 
> > 2.4.3
> 
> I think this filter should also set the output framerate to
> zero/undefined, since we have no idea if the output is still CFR.
> 

Ah, yes.  Good point.  

One thing to note that I forgot to mention previously.  There are
filters (e.g. framepack) the currently modify frame_rate without
checking if it is 1/0.  So in the case of framepack, 1/0 in will result
in 2/0 out.  Do we care?  Should we either fix this or document that X/0
is "unknown" at the output stage?
_______________________________________________
libav-devel mailing list
[email protected]
https://lists.libav.org/mailman/listinfo/libav-devel

Reply via email to