From 1181461ca5852206793a77d5856559c2face9263 Mon Sep 17 00:00:00 2001 From: Stefano Sabatini Date: Thu, 23 Aug 2012 12:29:20 +0200 Subject: [PATCH] lavfi/asetpts,setpts: add variables T, STARTT, PREV_INT and PREV_OUTT --- doc/filters.texi | 11 +++++++++++ libavfilter/f_setpts.c | 22 ++++++++++++++++++---- libavfilter/version.h | 2 +- 3 files changed, 30 insertions(+), 5 deletions(-) diff --git a/doc/filters.texi b/doc/filters.texi index 8c239337f3..bef95f763e 100644 --- a/doc/filters.texi +++ b/doc/filters.texi @@ -4129,9 +4129,15 @@ audio sample rate @item STARTPTS the PTS of the first frame +@item STARTT +the time in seconds of the first frame + @item INTERLACED tell if the current frame is interlaced +@item T +the time in seconds of the current frame + @item TB the time base @@ -4142,9 +4148,14 @@ for the current frame @item PREV_INPTS previous input PTS +@item PREV_INT +previous input time in seconds + @item PREV_OUTPTS previous output PTS +@item PREV_OUTT +previous output time in seconds @end table @subsection Examples diff --git a/libavfilter/f_setpts.c b/libavfilter/f_setpts.c index 62ac9ab87c..738fbf3f60 100644 --- a/libavfilter/f_setpts.c +++ b/libavfilter/f_setpts.c @@ -41,10 +41,14 @@ static const char *const var_names[] = { "NB_SAMPLES", ///< number of samples in the current frame (only audio) "POS", ///< original position in the file of the frame "PREV_INPTS", ///< previous input PTS + "PREV_INT", ///< previous input time in seconds "PREV_OUTPTS", ///< previous output PTS + "PREV_OUTT", ///< previous output time in seconds "PTS", ///< original pts in the file of the frame "SAMPLE_RATE", ///< sample rate (only audio) "STARTPTS", ///< PTS at start of movie + "STARTT", ///< time at start of movie + "T", ///< original time in the file of the frame "TB", ///< timebase NULL }; @@ -56,10 +60,14 @@ enum var_name { VAR_NB_SAMPLES, VAR_POS, VAR_PREV_INPTS, + VAR_PREV_INT, VAR_PREV_OUTPTS, + VAR_PREV_OUTT, VAR_PTS, VAR_SAMPLE_RATE, VAR_STARTPTS, + VAR_STARTT, + VAR_T, VAR_TB, VAR_VARS_NB }; @@ -82,9 +90,9 @@ static av_cold int init(AVFilterContext *ctx, const char *args) } setpts->var_values[VAR_N ] = 0.0; - setpts->var_values[VAR_PREV_INPTS ] = NAN; - setpts->var_values[VAR_PREV_OUTPTS] = NAN; - setpts->var_values[VAR_STARTPTS ] = NAN; + setpts->var_values[VAR_PREV_INPTS ] = setpts->var_values[VAR_PREV_INT ] = NAN; + setpts->var_values[VAR_PREV_OUTPTS] = setpts->var_values[VAR_PREV_OUTT] = NAN; + setpts->var_values[VAR_STARTPTS ] = setpts->var_values[VAR_STARTT ] = NAN; return 0; } @@ -106,6 +114,7 @@ static int config_input(AVFilterLink *inlink) #define D2TS(d) (isnan(d) ? AV_NOPTS_VALUE : (int64_t)(d)) #define TS2D(ts) ((ts) == AV_NOPTS_VALUE ? NAN : (double)(ts)) +#define TS2T(ts, tb) ((ts) == AV_NOPTS_VALUE ? NAN : (double)(ts)*av_q2d(tb)) static int filter_frame(AVFilterLink *inlink, AVFilterBufferRef *inpicref) { @@ -116,9 +125,12 @@ static int filter_frame(AVFilterLink *inlink, AVFilterBufferRef *inpicref) if (!outpicref) return AVERROR(ENOMEM); - if (isnan(setpts->var_values[VAR_STARTPTS])) + if (isnan(setpts->var_values[VAR_STARTPTS])) { setpts->var_values[VAR_STARTPTS] = TS2D(inpicref->pts); + setpts->var_values[VAR_STARTT ] = TS2T(inpicref->pts, inlink->time_base); + } setpts->var_values[VAR_PTS ] = TS2D(inpicref->pts); + setpts->var_values[VAR_T ] = TS2T(inpicref->pts, inlink->time_base); setpts->var_values[VAR_POS ] = inpicref->pos == -1 ? NAN : inpicref->pos; switch (inlink->type) { @@ -150,7 +162,9 @@ static int filter_frame(AVFilterLink *inlink, AVFilterBufferRef *inpicref) setpts->var_values[VAR_N] += 1.0; setpts->var_values[VAR_PREV_INPTS ] = TS2D(inpicref ->pts); + setpts->var_values[VAR_PREV_INT ] = TS2T(inpicref ->pts, inlink->time_base); setpts->var_values[VAR_PREV_OUTPTS] = TS2D(outpicref->pts); + setpts->var_values[VAR_PREV_OUTT] = TS2T(outpicref->pts, inlink->time_base); if (setpts->type == AVMEDIA_TYPE_AUDIO) { setpts->var_values[VAR_NB_CONSUMED_SAMPLES] += inpicref->audio->nb_samples; diff --git a/libavfilter/version.h b/libavfilter/version.h index a008d94f2e..ea70d80449 100644 --- a/libavfilter/version.h +++ b/libavfilter/version.h @@ -30,7 +30,7 @@ #define LIBAVFILTER_VERSION_MAJOR 3 #define LIBAVFILTER_VERSION_MINOR 13 -#define LIBAVFILTER_VERSION_MICRO 100 +#define LIBAVFILTER_VERSION_MICRO 101 #define LIBAVFILTER_VERSION_INT AV_VERSION_INT(LIBAVFILTER_VERSION_MAJOR, \ LIBAVFILTER_VERSION_MINOR, \