88                    const char *value1, 
const char *value2);
 
   92 #define OFFSET(x) offsetof(MetadataContext, x) 
   93 #define DEFINE_OPTIONS(filt_name, FLAGS) \ 
   94 static const AVOption filt_name##_options[] = { \ 
   95     { "mode", "set a mode of operation", OFFSET(mode),   AV_OPT_TYPE_INT,    {.i64 = 0 }, 0, METADATA_NB-1, FLAGS, "mode" }, \ 
   96     {   "select", "select frame",        0,              AV_OPT_TYPE_CONST,  {.i64 = METADATA_SELECT }, 0, 0, FLAGS, "mode" }, \ 
   97     {   "add",    "add new metadata",    0,              AV_OPT_TYPE_CONST,  {.i64 = METADATA_ADD },    0, 0, FLAGS, "mode" }, \ 
   98     {   "modify", "modify metadata",     0,              AV_OPT_TYPE_CONST,  {.i64 = METADATA_MODIFY }, 0, 0, FLAGS, "mode" }, \ 
   99     {   "delete", "delete metadata",     0,              AV_OPT_TYPE_CONST,  {.i64 = METADATA_DELETE }, 0, 0, FLAGS, "mode" }, \ 
  100     {   "print",  "print metadata",      0,              AV_OPT_TYPE_CONST,  {.i64 = METADATA_PRINT },  0, 0, FLAGS, "mode" }, \ 
  101     { "key",   "set metadata key",       OFFSET(key),    AV_OPT_TYPE_STRING, {.str = NULL }, 0, 0, FLAGS }, \ 
  102     { "value", "set metadata value",     OFFSET(value),  AV_OPT_TYPE_STRING, {.str = NULL }, 0, 0, FLAGS }, \ 
  103     { "function", "function for comparing values", OFFSET(function), AV_OPT_TYPE_INT, {.i64 = 0 }, 0, METADATAF_NB-1, FLAGS, "function" }, \ 
  104     {   "same_str",    NULL, 0, AV_OPT_TYPE_CONST, {.i64 = METADATAF_SAME_STR },    0, 3, FLAGS, "function" }, \ 
  105     {   "starts_with", NULL, 0, AV_OPT_TYPE_CONST, {.i64 = METADATAF_STARTS_WITH }, 0, 0, FLAGS, "function" }, \ 
  106     {   "less",        NULL, 0, AV_OPT_TYPE_CONST, {.i64 = METADATAF_LESS    },     0, 3, FLAGS, "function" }, \ 
  107     {   "equal",       NULL, 0, AV_OPT_TYPE_CONST, {.i64 = METADATAF_EQUAL   },     0, 3, FLAGS, "function" }, \ 
  108     {   "greater",     NULL, 0, AV_OPT_TYPE_CONST, {.i64 = METADATAF_GREATER },     0, 3, FLAGS, "function" }, \ 
  109     {   "expr",        NULL, 0, AV_OPT_TYPE_CONST, {.i64 = METADATAF_EXPR    },     0, 3, FLAGS, "function" }, \ 
  110     { "expr", "set expression for expr function", OFFSET(expr_str), AV_OPT_TYPE_STRING, {.str = NULL }, 0, 0, FLAGS }, \ 
  111     { "file", "set file where to print metadata information", OFFSET(file_str), AV_OPT_TYPE_STRING, {.str=NULL}, 0, 0, FLAGS }, \ 
  117     return !strcmp(value1, value2);
 
  122     return !strncmp(value1, value2, strlen(value2));
 
  129     if (sscanf(value1, 
"%f", &f1) + sscanf(value2, 
"%f", &f2) != 2)
 
  132     return fabsf(f1 - f2) < FLT_EPSILON;
 
  139     if (sscanf(value1, 
"%f", &f1) + sscanf(value2, 
"%f", &f2) != 2)
 
  142     return (f1 - f2) < FLT_EPSILON;
 
  149     if (sscanf(value1, 
"%f", &f1) + sscanf(value2, 
"%f", &f2) != 2)
 
  152     return (f2 - f1) < FLT_EPSILON;
 
  159     if (sscanf(value1, 
"%lf", &f1) + sscanf(value2, 
"%lf", &f2) != 2)
 
  170     va_list argument_list;
 
  172     va_start(argument_list, msg);
 
  175     va_end(argument_list);
 
  181     va_list argument_list;
 
  183     va_start(argument_list, msg);
 
  186         vsnprintf(buf, 
sizeof(buf), msg, argument_list);
 
  189     va_end(argument_list);
 
  317             s->
print(ctx, 
"frame:%-4"PRId64
" pts:%-7s pts_time:%s\n",
 
  324             s->
print(ctx, 
"frame:%-4"PRId64
" pts:%-7s pts_time:%s\n",
 
  347 #if CONFIG_AMETADATA_FILTER 
  373     .priv_class    = &ametadata_class,
 
  382 #if CONFIG_METADATA_FILTER 
  408     .priv_class  = &metadata_class,
 
int avio_open(AVIOContext **s, const char *url, int flags)
Create and initialize a AVIOContext for accessing the resource indicated by url. 
 
This structure describes decoded (raw) audio or video data. 
 
size_t static size_t av_strnlen(const char *s, size_t len)
Get the count of continuous non zero chars starting from the beginning. 
 
#define AV_LOG_WARNING
Something somehow does not look correct. 
 
Main libavfilter public API header. 
 
#define AV_OPT_FLAG_AUDIO_PARAM
 
#define AVIO_FLAG_WRITE
write-only 
 
int(* compare)(struct MetadataContext *s, const char *value1, const char *value2)
 
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. 
 
#define AVFILTER_FLAG_SUPPORT_TIMELINE_GENERIC
Some filters support a generic "enable" expression option that can be used to enable or disable a fil...
 
const char * name
Pad name. 
 
#define av_assert0(cond)
assert() equivalent, that is always enabled. 
 
int ff_filter_frame(AVFilterLink *link, AVFrame *frame)
Send a frame of data to the next filter. 
 
timestamp utils, mostly useful for debugging/logging purposes 
 
int64_t pts
Presentation timestamp in time_base units (time when frame should be shown to user). 
 
AVDictionaryEntry * av_dict_get(const AVDictionary *m, const char *key, const AVDictionaryEntry *prev, int flags)
Get a dictionary entry with matching key. 
 
AVIOContext * avio_context
 
AVDictionary * metadata
metadata. 
 
void avio_write(AVIOContext *s, const unsigned char *buf, int size)
 
A filter pad used for either input or output. 
 
A link between two filters. 
 
double var_values[VAR_VARS_NB]
 
#define AV_LOG_ERROR
Something went wrong and cannot losslessly be recovered. 
 
#define AV_OPT_FLAG_FILTERING_PARAM
a generic parameter which can be set by the user for filtering 
 
void av_frame_free(AVFrame **frame)
Free the frame and any dynamically allocated objects in it, e.g. 
 
#define av_ts2timestr(ts, tb)
Convenience macro, the return value should be used only directly in function arguments but never stan...
 
#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 
 
void av_dict_free(AVDictionary **pm)
Free all the memory allocated for an AVDictionary struct and all keys and values. ...
 
AVRational time_base
Define the time base used by the PTS of the frames/samples which will pass through this link...
 
simple assert() macros that are a bit more flexible than ISO C assert(). 
 
#define av_printf_format(fmtpos, attrpos)
 
common internal API header 
 
typedef void(APIENTRY *FF_PFNGLACTIVETEXTUREPROC)(GLenum texture)
 
static const AVFilterPad inputs[]
 
static const AVFilterPad outputs[]
 
#define AV_LOG_INFO
Standard information. 
 
#define AV_OPT_FLAG_VIDEO_PARAM
 
int av_dict_set(AVDictionary **pm, const char *key, const char *value, int flags)
Set the given entry in *pm, overwriting an existing entry. 
 
Describe the class of an AVClass context structure. 
 
void av_vlog(void *avcl, int level, const char *fmt, va_list vl)
Send the specified message to the log if the level is less than or equal to the current av_log_level...
 
const char * name
Filter name. 
 
AVFilterLink ** outputs
array of pointers to output links 
 
int av_strerror(int errnum, char *errbuf, size_t errbuf_size)
Put a description of the AVERROR code errnum in errbuf. 
 
#define av_ts2str(ts)
Convenience macro, the return value should be used only directly in function arguments but never stan...
 
double av_expr_eval(AVExpr *e, const double *const_values, void *opaque)
Evaluate a previously parsed expression. 
 
AVFilterContext * dst
dest filter 
 
#define AVFILTER_DEFINE_CLASS(fname)
 
#define AV_DICT_IGNORE_SUFFIX
Return first entry in a dictionary whose first part corresponds to the search key, ignoring the suffix of the found key string. 
 
int avio_closep(AVIOContext **s)
Close the resource accessed by the AVIOContext *s, free it and set the pointer pointing to it to NULL...
 
void(* print)(AVFilterContext *ctx, const char *msg,...) av_printf_format(2
 
simple arithmetic expression evaluator