156 #define OFFSET(x) offsetof(SelectContext, x) 
  157 #define DEFINE_OPTIONS(filt_name, FLAGS)                            \ 
  158 static const AVOption filt_name##_options[] = {                     \ 
  159     { "expr", "set an expression to use for selecting frames", OFFSET(expr_str), AV_OPT_TYPE_STRING, { .str = "1" }, .flags=FLAGS }, \ 
  160     { "e",    "set an expression to use for selecting frames", OFFSET(expr_str), AV_OPT_TYPE_STRING, { .str = "1" }, .flags=FLAGS }, \ 
  161     { "outputs", "set the number of outputs", OFFSET(nb_outputs), AV_OPT_TYPE_INT, {.i64 = 1}, 1, INT_MAX, .flags=FLAGS }, \ 
  162     { "n",       "set the number of outputs", OFFSET(nb_outputs), AV_OPT_TYPE_INT, {.i64 = 1}, 1, INT_MAX, .flags=FLAGS }, \ 
  195 #define INTERLACE_TYPE_P 0 
  196 #define INTERLACE_TYPE_T 1 
  197 #define INTERLACE_TYPE_B 2 
  258         int x, y, nb_sad = 0;
 
  263         const int p1_linesize =       frame->
linesize[0];
 
  264         const int p2_linesize = prev_picref->
linesize[0];
 
  266         for (y = 0; y < frame->
height - 7; y += 8) {
 
  267             for (x = 0; x < frame->
width*3 - 7; x += 8) {
 
  268                 sad += select->
sad(p1 + x, p1_linesize, p2 + x, p2_linesize);
 
  271             p1 += 8 * p1_linesize;
 
  272             p2 += 8 * p2_linesize;
 
  275         mafd = nb_sad ? (double)sad / nb_sad : 0;
 
  277         ret  = av_clipf(
FFMIN(mafd, diff) / 100., 0, 1);
 
  290     if (start_time_entry) {
 
  292         if (pts >= start_time) {
 
  293             if (duration_entry) {
 
  295               if (pts < start_time + duration)
 
  307 #define D2TS(d)  (isnan(d) ? AV_NOPTS_VALUE : (int64_t)(d)) 
  308 #define TS2D(ts) ((ts) == AV_NOPTS_VALUE ? NAN : (double)(ts)) 
  328     switch (inlink->
type) {
 
  350            "n:%f pts:%f t:%f key:%d",
 
  356     switch (inlink->
type) {
 
  373     } 
else if (
isnan(res) || res < 0) {
 
  453 #if CONFIG_ASELECT_FILTER 
  463     if ((ret = 
init(ctx)) < 0)
 
  474 static const AVFilterPad avfilter_af_aselect_inputs[] = {
 
  487     .init        = aselect_init,
 
  490     .
inputs      = avfilter_af_aselect_inputs,
 
  491     .priv_class  = &aselect_class,
 
  496 #if CONFIG_SELECT_FILTER 
  505     if ((ret = 
init(ctx)) < 0)
 
  511 static const AVFilterPad avfilter_vf_select_inputs[] = {
 
  528     .priv_class    = &select_class,
 
  529     .
inputs        = avfilter_vf_select_inputs,
 
This structure describes decoded (raw) audio or video data. 
static av_cold void uninit(AVFilterContext *ctx)
Main libavfilter public API header. 
packed RGB 8:8:8, 24bpp, RGBRGB... 
#define AV_OPT_FLAG_AUDIO_PARAM
enum AVMediaType type
AVFilterPad type. 
int av_expr_parse(AVExpr **expr, const char *s, const char *const *const_names, const char *const *func1_names, double(*const *funcs1)(void *, double), const char *const *func2_names, double(*const *funcs2)(void *, double, double), int log_offset, void *log_ctx)
Parse an expression. 
static double get_concatdec_select(AVFrame *frame, int64_t pts)
const char * name
Pad name. 
AVFilterLink ** inputs
array of pointers to input links 
int ff_filter_frame(AVFilterLink *link, AVFrame *frame)
Send a frame of data to the next filter. 
AVFilterPad * output_pads
array of output pads 
static int64_t start_time
int(* request_frame)(AVFilterLink *link)
Frame request callback. 
static void select_frame(AVFilterContext *ctx, AVFrame *frame)
int64_t pts
Presentation timestamp in time_base units (time when frame should be shown to user). 
static double av_q2d(AVRational a)
Convert rational to double. 
AVDictionaryEntry * av_dict_get(const AVDictionary *m, const char *key, const AVDictionaryEntry *prev, int flags)
Get a dictionary entry with matching key. 
char av_get_picture_type_char(enum AVPictureType pict_type)
Return a single letter to describe the given picture type pict_type. 
int interlaced_frame
The content of the picture is interlaced. 
#define AVFILTER_FLAG_DYNAMIC_OUTPUTS
The number of the filter outputs is not determined just by AVFilter.outputs. 
A filter pad used for either input or output. 
int64_t av_rescale_q(int64_t a, AVRational bq, AVRational cq)
Rescale a 64-bit integer by 2 rational numbers. 
A link between two filters. 
static int query_formats(AVFilterContext *ctx)
int width
width and height of the video frame 
#define AV_LOG_ERROR
Something went wrong and cannot losslessly be recovered. 
int sample_rate
samples per second 
#define AV_OPT_FLAG_FILTERING_PARAM
a generic parameter which can be set by the user for filtering 
double var_values[VAR_VARS_NB]
void av_frame_free(AVFrame **frame)
Free the frame and any dynamically allocated objects in it, e.g. 
unsigned nb_outputs
number of output pads 
#define NULL_IF_CONFIG_SMALL(x)
Return NULL if CONFIG_SMALL is true, otherwise the argument without modification. ...
void * priv
private data for use by the filter 
#define AV_LOG_DEBUG
Stuff which is only useful for libav* developers. 
int(* av_pixelutils_sad_fn)(const uint8_t *src1, ptrdiff_t stride1, const uint8_t *src2, ptrdiff_t stride2)
Sum of abs(src1[x] - src2[x]) 
AVRational time_base
Define the time base used by the PTS of the frames/samples which will pass through this link...
int select_out
mark the selected output pad index 
char * av_asprintf(const char *fmt,...)
static int config_input(AVFilterLink *inlink)
common internal API header 
enum AVPictureType pict_type
Picture type of the frame. 
av_pixelutils_sad_fn sad
Sum of the absolute difference function (scene detect only) 
packed RGB 8:8:8, 24bpp, BGRBGR... 
AVFilterContext * src
source filter 
AVFrame * av_frame_clone(const AVFrame *src)
Create a new frame that references the same data as src. 
static int filter_frame(AVFilterLink *inlink, AVFrame *frame)
const AVFilterPad * inputs
List of inputs, terminated by a zeroed element. 
static const AVFilterPad inputs[]
AVDictionary ** avpriv_frame_get_metadatap(AVFrame *frame)
void av_expr_free(AVExpr *e)
Free a parsed expression previously created with av_expr_parse(). 
#define AV_TIME_BASE_Q
Internal time base represented as fractional value. 
int linesize[AV_NUM_DATA_POINTERS]
For video, size in bytes of each picture line. 
#define AV_OPT_FLAG_VIDEO_PARAM
static double get_scene_score(AVFilterContext *ctx, AVFrame *frame)
a very simple circular buffer FIFO implementation 
double prev_mafd
previous MAFD (scene detect only) 
int av_dict_set(AVDictionary **pm, const char *key, const char *value, int flags)
Set the given entry in *pm, overwriting an existing entry. 
AVDictionary * av_frame_get_metadata(const AVFrame *frame)
av_pixelutils_sad_fn av_pixelutils_get_sad_fn(int w_bits, int h_bits, int aligned, void *log_ctx)
Get a potentially optimized pointer to a Sum-of-absolute-differences function (see the av_pixelutils_...
Describe the class of an AVClass context structure. 
const char * name
Filter name. 
AVFilterLink ** outputs
array of pointers to output links 
static enum AVPixelFormat pix_fmts[]
static int64_t pts
Global timestamp for the audio frames. 
static int request_frame(AVFilterLink *outlink)
enum AVMediaType type
filter media type 
uint8_t * data[AV_NUM_DATA_POINTERS]
pointer to the picture/channel planes. 
int do_scene_detect
1 if the expression requires scene detection variables, 0 otherwise 
AVFrame * prev_picref
previous frame (scene detect only) 
#define DEFINE_OPTIONS(filt_name, FLAGS)
static av_cold int init(AVFilterContext *ctx)
static av_always_inline int diff(const uint32_t a, const uint32_t b)
int top_field_first
If the content is interlaced, is top field displayed first. 
double av_expr_eval(AVExpr *e, const double *const_values, void *opaque)
Evaluate a previously parsed expression. 
AVFilterContext * dst
dest filter 
int64_t av_frame_get_pkt_pos(const AVFrame *frame)
#define AVFILTER_DEFINE_CLASS(fname)
int key_frame
1 -> keyframe, 0-> not 
static const char *const var_names[]
int ff_request_frame(AVFilterLink *link)
Request an input frame from the filter at the other end of the link. 
static int ff_insert_outpad(AVFilterContext *f, unsigned index, AVFilterPad *p)
Insert a new output pad for the filter. 
AVPixelFormat
Pixel format. 
int nb_samples
number of audio samples (per channel) described by this frame 
const AVFilter * filter
the AVFilter of which this is an instance 
int64_t frame_count
Number of past frames sent through the link. 
simple arithmetic expression evaluator