On 2013-01-24 17:09:05 +0100, Vladimir Pantelic wrote:
> changed to use RTCTIME and RTCSTART

> From 272d056828858c2adb73511405b107ac805212c8 Mon Sep 17 00:00:00 2001
> From: Vladimir Pantelic <[email protected]>
> Date: Wed, 23 Jan 2013 13:54:08 +0100
> Subject: [PATCH] avfilter: allow setpts filter to use wallclock time for
>  calculations
> 
> Signed-off-by: Vladimir Pantelic <[email protected]>
> ---
>  doc/filters.texi        |    9 +++++++++
>  libavfilter/vf_setpts.c |    7 +++++++
>  2 files changed, 16 insertions(+), 0 deletions(-)
> 
> diff --git a/doc/filters.texi b/doc/filters.texi
> index 34db2f4..8179a2d 100644
> --- a/doc/filters.texi
> +++ b/doc/filters.texi
> @@ -1864,6 +1864,12 @@ previous input PTS
>  @item PREV_OUTPTS
>  previous output PTS
>  
> +@item RTCTIME
> +current wallclock (RTC) time in microseconds
> +
> +@item RTCSTART
> +current wallclock (RTC) time at the start of the movie in microseconds
> +

s/current //

>  @end table
>  
>  Some examples follow:
> @@ -1883,6 +1889,9 @@ setpts=N/(25*TB)
>  
>  # fixed rate 25 fps with some jitter
>  setpts='1/(25*TB) * (N + 0.05 * sin(N*2*PI/25))'
> +
> +# generate timestamps from a "live source" and rebase onto the current 
> timebase
> +setpts='(GETTIME - STARTTIME) / (TB * 1000000)"

s/GETTIME/RTCTIME/;s/STARTTIME/RTCSTART/

>  @end example
>  
>  @anchor{setsar}
> diff --git a/libavfilter/vf_setpts.c b/libavfilter/vf_setpts.c
> index 0c4881e..664fc9a 100644
> --- a/libavfilter/vf_setpts.c
> +++ b/libavfilter/vf_setpts.c
> @@ -29,6 +29,7 @@
>  #include "libavutil/eval.h"
>  #include "libavutil/internal.h"
>  #include "libavutil/mathematics.h"
> +#include "libavutil/time.h"
>  #include "avfilter.h"
>  #include "internal.h"
>  #include "video.h"
> @@ -45,6 +46,8 @@ static const char *const var_names[] = {
>      "PTS",         ///< original pts in the file of the frame
>      "STARTPTS",   ///< PTS at start of movie
>      "TB",          ///< timebase
> +    "RTCTIME",     ///< current wallclock (RTC) time in micro seconds
> +    "RTCSTART",    ///< current wallclock (RTC) time at the start of the 
> movie in micro seconds

s/current //

>      NULL
>  };
>  
> @@ -60,6 +63,8 @@ enum var_name {
>      VAR_PTS,
>      VAR_STARTPTS,
>      VAR_TB,
> +    VAR_RTCTIME,
> +    VAR_RTCSTART,
>      VAR_VARS_NB
>  };
>  
> @@ -94,6 +99,7 @@ static int config_input(AVFilterLink *inlink)
>      SetPTSContext *setpts = inlink->dst->priv;
>  
>      setpts->var_values[VAR_TB] = av_q2d(inlink->time_base);
> +    setpts->var_values[VAR_RTCSTART] = av_gettime();
>  
>      av_log(inlink->src, AV_LOG_VERBOSE, "TB:%f\n", 
> setpts->var_values[VAR_TB]);
>      return 0;
> @@ -114,6 +120,7 @@ static int filter_frame(AVFilterLink *inlink, 
> AVFilterBufferRef *frame)
>      setpts->var_values[VAR_INTERLACED] = frame->video->interlaced;
>      setpts->var_values[VAR_PTS       ] = TS2D(frame->pts);
>      setpts->var_values[VAR_POS       ] = frame->pos == -1 ? NAN : frame->pos;
> +    setpts->var_values[VAR_RTCTIME   ] = av_gettime();
>  
>      d = av_expr_eval(setpts->expr, setpts->var_values, NULL);
>      frame->pts = D2TS(d);

otherwise ok

Janne
_______________________________________________
libav-devel mailing list
[email protected]
https://lists.libav.org/mailman/listinfo/libav-devel

Reply via email to