[FFmpeg-devel] [PATCH 3/4] Add setpts filter by Victor Paesa.

Alexander Strange astrange
Tue Nov 2 22:37:42 CET 2010


On Nov 2, 2010, at 5:33 PM, Stefano Sabatini wrote:

> On date Tuesday 2010-11-02 22:16:30 +0100, Michael Niedermayer encoded:
>> On Tue, Nov 02, 2010 at 08:45:07PM +0100, Stefano Sabatini wrote:
>> [...]
>>> +/**
>>> + * @file
>>> + * video presentation timestamp (PTS) modification filter
>>> + */
>>> +
>> 
>>> +#define DEBUG
>> 
>> ?
> 
> Commented out, I'd like to keep it in case I need to debug, but I
> don't want to spam the log everytime I enable -loglevel debug.
> 
>>> +
>>> +#include "libavutil/eval.h"
>>> +#include "avfilter.h"
>>> +
>>> +static const char *var_names[] = {
>>> +    "E",           ///< Euler number
>>> +    "INTERLACED",  ///< tell if the current frame is interlaced
>>> +    "N",           ///< frame number (starting at zero)
>>> +    "PHI",         ///< golden ratio
>>> +    "PI",          ///< greek pi
>>> +    "POS",         ///< original position in the file of the frame
>>> +    "PREV_INPTS",  ///< previous  input PTS
>>> +    "PREV_OUTPTS", ///< previous output PTS
>>> +    "PTS",         ///< original pts in the file of the frame
>>> +    "STARTPTS",   ///< PTS at start of movie
>>> +    "TB",          ///< timebase
>>> +    NULL
>>> +};
>>> +
>>> +enum var_name {
>>> +    VAR_E,
>>> +    VAR_INTERLACED,
>>> +    VAR_N,
>>> +    VAR_PHI,
>>> +    VAR_PI,
>>> +    VAR_POS,
>>> +    VAR_PREV_INPTS,
>>> +    VAR_PREV_OUTPTS,
>>> +    VAR_PTS,
>>> +    VAR_STARTPTS,
>>> +    VAR_TB,
>>> +    VAR_VARS_NB
>>> +};
>>> +
>>> +typedef struct {
>>> +    AVExpr *expr;
>>> +    double var_values[VAR_VARS_NB];
>>> +} SetPTSContext;
>>> +
>>> +static av_cold int init(AVFilterContext *ctx, const char *args, void *opaque)
>>> +{
>>> +    SetPTSContext *setpts = ctx->priv;
>>> +    int ret;
>>> +
>>> +    if ((ret = av_parse_expr(&setpts->expr, args ? args : "PTS",
>>> +                             var_names, NULL, NULL, NULL, NULL, 0, ctx)) < 0) {
>>> +        av_log(ctx, AV_LOG_ERROR, "Error while parsing expression '%s'\n", args);
>>> +        return ret;
>>> +    }
>>> +
>>> +    setpts->var_values[VAR_E          ] = M_E;
>>> +    setpts->var_values[VAR_N          ] = 0.0;
>>> +    setpts->var_values[VAR_PHI        ] = M_PHI;
>>> +    setpts->var_values[VAR_PI         ] = M_PI;
>>> +    setpts->var_values[VAR_PREV_INPTS ] = NAN;
>>> +    setpts->var_values[VAR_PREV_OUTPTS] = NAN;
>>> +    setpts->var_values[VAR_STARTPTS   ] = NAN;
>>> +    return 0;
>>> +}
>>> +
>> 
>>> +static int config_input(AVFilterLink *inlink)
>>> +{
>>> +    SetPTSContext *setpts = inlink->dst->priv;
>>> +
>>> +    setpts->var_values[VAR_TB]    = (double)inlink->time_base.num/inlink->time_base.den;
>> 
>> av_q2d
>> 
>> otherwise lgtm
> 
> Fixed and updated.

Whatever does M_PHI have to do with pts?




More information about the ffmpeg-devel mailing list