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
