#include "libavutil/eval.h"
#include "libavutil/pixdesc.h"
#include "libavutil/parseutils.h"
#include "libavutil/audioconvert.h"
#include "avfilter.h"
#include "internal.h"
#include "formats.h"
#include "all_channel_layouts.inc"
Go to the source code of this file.
Defines | |
#define | MERGE_REF(ret, a, fmts, type, fail) |
Add all refs from a to ret and destroy a. | |
#define | MERGE_FORMATS(ret, a, b, fmts, nb, type, fail) |
Add all formats common for a and b to ret, copy the refs and destroy a and b. | |
#define | COPY_INT_LIST(list_copy, list, type) |
#define | MAKE_FORMAT_LIST(type, field, count_field) |
#define | ADD_FORMAT(f, fmt, type, list, nb) |
#define | FORMATS_REF(f, ref) |
#define | FIND_REF_INDEX(ref, idx) |
#define | FORMATS_UNREF(ref, list) |
#define | FORMATS_CHANGEREF(oldref, newref) |
#define | SET_COMMON_FORMATS(ctx, fmts, in_fmts, out_fmts, ref, list) |
Functions | |
AVFilterFormats * | avfilter_merge_formats (AVFilterFormats *a, AVFilterFormats *b) |
Return a format list which contains the intersection of the formats of a and b. | |
AVFilterFormats * | ff_merge_samplerates (AVFilterFormats *a, AVFilterFormats *b) |
AVFilterChannelLayouts * | ff_merge_channel_layouts (AVFilterChannelLayouts *a, AVFilterChannelLayouts *b) |
Return a channel layouts/samplerates list which contains the intersection of the layouts/samplerates of a and b. | |
int | ff_fmt_is_in (int fmt, const int *fmts) |
Tell is a format is contained in the provided list terminated by -1. | |
int * | ff_copy_int_list (const int *const list) |
Return a copy of a list of integers terminated by -1, or NULL in case of copy failure. | |
int64_t * | ff_copy_int64_list (const int64_t *const list) |
Return a copy of a list of 64-bit integers, or NULL in case of copy failure. | |
AVFilterFormats * | avfilter_make_format_list (const int *fmts) |
Create a list of supported formats. | |
AVFilterChannelLayouts * | avfilter_make_format64_list (const int64_t *fmts) |
int | avfilter_add_format (AVFilterFormats **avff, int64_t fmt) |
Add fmt to the list of media formats contained in *avff. | |
int | ff_add_channel_layout (AVFilterChannelLayouts **l, uint64_t channel_layout) |
AVFilterFormats * | avfilter_all_formats (enum AVMediaType type) |
AVFilterFormats * | avfilter_make_all_formats (enum AVMediaType type) |
Return a list of all formats supported by FFmpeg for the given media type. | |
AVFilterFormats * | avfilter_make_all_packing_formats (void) |
Return a list of all audio packing formats. | |
AVFilterFormats * | ff_all_samplerates (void) |
AVFilterChannelLayouts * | ff_all_channel_layouts (void) |
Construct an empty AVFilterChannelLayouts/AVFilterFormats struct -- representing any channel layout/sample rate. | |
void | ff_channel_layouts_ref (AVFilterChannelLayouts *f, AVFilterChannelLayouts **ref) |
Add *ref as a new reference to f. | |
void | avfilter_formats_ref (AVFilterFormats *f, AVFilterFormats **ref) |
Add *ref as a new reference to formats. | |
void | avfilter_formats_unref (AVFilterFormats **ref) |
If *ref is non-NULL, remove *ref as a reference to the format list it currently points to, deallocates that list if this was the last reference, and sets *ref to NULL. | |
void | ff_channel_layouts_unref (AVFilterChannelLayouts **ref) |
Remove a reference to a channel layouts list. | |
void | ff_channel_layouts_changeref (AVFilterChannelLayouts **oldref, AVFilterChannelLayouts **newref) |
void | avfilter_formats_changeref (AVFilterFormats **oldref, AVFilterFormats **newref) |
Before After ________ ________ |formats |<---------. | |
void | ff_set_common_channel_layouts (AVFilterContext *ctx, AVFilterChannelLayouts *layouts) |
A helper for query_formats() which sets all links to the same list of channel layouts/sample rates. | |
void | ff_set_common_samplerates (AVFilterContext *ctx, AVFilterFormats *samplerates) |
void | avfilter_set_common_formats (AVFilterContext *ctx, AVFilterFormats *formats) |
A helper for query_formats() which sets all links to the same list of formats. | |
int | ff_default_query_formats (AVFilterContext *ctx) |
int | ff_parse_pixel_format (enum PixelFormat *ret, const char *arg, void *log_ctx) |
Parse a pixel format. | |
int | ff_parse_sample_format (int *ret, const char *arg, void *log_ctx) |
Parse a sample format name or a corresponding integer representation. | |
int | ff_parse_time_base (AVRational *ret, const char *arg, void *log_ctx) |
Parse a time base. | |
int | ff_parse_sample_rate (int *ret, const char *arg, void *log_ctx) |
Parse a sample rate. | |
int | ff_parse_channel_layout (int64_t *ret, const char *arg, void *log_ctx) |
Parse a channel layout or a corresponding integer representation. | |
int | avfilter_default_query_formats (AVFilterContext *ctx) |
Default handler for query_formats(). | |
Variables | |
const int64_t | avfilter_all_channel_layouts [] |
A list of all channel layouts supported by libavfilter. |
#define ADD_FORMAT | ( | f, | |||
fmt, | |||||
type, | |||||
list, | |||||
nb | ) |
Value:
do { \ type *fmts; \ \ if (!(*f) && !(*f = av_mallocz(sizeof(**f)))) \ return AVERROR(ENOMEM); \ \ fmts = av_realloc((*f)->list, \ sizeof(*(*f)->list) * ((*f)->nb + 1));\ if (!fmts) \ return AVERROR(ENOMEM); \ \ (*f)->list = fmts; \ (*f)->list[(*f)->nb++] = fmt; \ return 0; \ } while (0)
Definition at line 236 of file formats.c.
Referenced by avfilter_add_format(), and ff_add_channel_layout().
#define COPY_INT_LIST | ( | list_copy, | |||
list, | |||||
type | ) |
Value:
{ \ int count = 0; \ if (list) \ for (count = 0; list[count] != -1; count++) \ ; \ list_copy = av_calloc(count+1, sizeof(type)); \ if (list_copy) { \ memcpy(list_copy, list, sizeof(type) * count); \ list_copy[count] = -1; \ } \ }
Definition at line 173 of file formats.c.
Referenced by ff_copy_int64_list(), and ff_copy_int_list().
#define FIND_REF_INDEX | ( | ref, | |||
idx | ) |
#define FORMATS_CHANGEREF | ( | oldref, | |||
newref | ) |
Value:
do { \ int idx = -1; \ \ FIND_REF_INDEX(oldref, idx); \ \ if (idx >= 0) { \ (*oldref)->refs[idx] = newref; \ *newref = *oldref; \ *oldref = NULL; \ } \ } while (0)
Definition at line 378 of file formats.c.
Referenced by avfilter_formats_changeref(), and ff_channel_layouts_changeref().
#define FORMATS_REF | ( | f, | |||
ref | ) |
Value:
do { \ *ref = f; \ f->refs = av_realloc(f->refs, sizeof(*f->refs) * ++f->refcount); \ f->refs[f->refcount-1] = ref; \ } while (0)
Definition at line 320 of file formats.c.
Referenced by avfilter_formats_ref(), and ff_channel_layouts_ref().
#define FORMATS_UNREF | ( | ref, | |||
list | ) |
Value:
do { \ int idx = -1; \ \ if (!*ref) \ return; \ \ FIND_REF_INDEX(ref, idx); \ \ if (idx >= 0) \ memmove((*ref)->refs + idx, (*ref)->refs + idx + 1, \ sizeof(*(*ref)->refs) * ((*ref)->refcount - idx - 1)); \ \ if(!--(*ref)->refcount) { \ av_free((*ref)->list); \ av_free((*ref)->refs); \ av_free(*ref); \ } \ *ref = NULL; \ } while (0)
Definition at line 347 of file formats.c.
Referenced by avfilter_formats_unref(), and ff_channel_layouts_unref().
#define MAKE_FORMAT_LIST | ( | type, | |||
field, | |||||
count_field | ) |
Value:
type *formats; \ int count = 0; \ if (fmts) \ for (count = 0; fmts[count] != -1; count++) \ ; \ formats = av_mallocz(sizeof(*formats)); \ if (!formats) return NULL; \ formats->count_field = count; \ if (count) { \ formats->field = av_malloc(sizeof(*formats->field)*count); \ if (!formats->field) { \ av_free(formats); \ return NULL; \ } \ }
Definition at line 199 of file formats.c.
Referenced by avfilter_make_format64_list(), and avfilter_make_format_list().
#define MERGE_FORMATS | ( | ret, | |||
a, | |||||
b, | |||||
fmts, | |||||
nb, | |||||
type, | |||||
fail | ) |
Value:
do { \ int i, j, k = 0, count = FFMIN(a->nb, b->nb); \ \ if (!(ret = av_mallocz(sizeof(*ret)))) \ goto fail; \ \ if (count) { \ if (!(ret->fmts = av_malloc(sizeof(*ret->fmts) * count))) \ goto fail; \ for (i = 0; i < a->nb; i++) \ for (j = 0; j < b->nb; j++) \ if (a->fmts[i] == b->fmts[j]) { \ if(k >= FFMIN(a->nb, b->nb)){ \ av_log(0, AV_LOG_ERROR, "Duplicate formats in avfilter_merge_formats() detected\n"); \ av_free(ret->fmts); \ av_free(ret); \ return NULL; \ } \ ret->fmts[k++] = a->fmts[i]; \ } \ } \ ret->nb = k; \ /* check that there was at least one common format */ \ if (!ret->nb) \ goto fail; \ \ MERGE_REF(ret, a, fmts, type, fail); \ MERGE_REF(ret, b, fmts, type, fail); \ } while (0)
Definition at line 57 of file formats.c.
Referenced by avfilter_merge_formats(), ff_merge_channel_layouts(), and ff_merge_samplerates().
#define MERGE_REF | ( | ret, | |||
a, | |||||
fmts, | |||||
type, | |||||
fail | ) |
Value:
do { \ type ***tmp; \ int i; \ \ if (!(tmp = av_realloc(ret->refs, \ sizeof(*tmp) * (ret->refcount + a->refcount)))) \ goto fail; \ ret->refs = tmp; \ \ for (i = 0; i < a->refcount; i ++) { \ ret->refs[ret->refcount] = a->refs[i]; \ *ret->refs[ret->refcount++] = ret; \ } \ \ av_freep(&a->refs); \ av_freep(&a->fmts); \ av_freep(&a); \ } while (0)
Definition at line 33 of file formats.c.
Referenced by ff_merge_channel_layouts(), and ff_merge_samplerates().
#define SET_COMMON_FORMATS | ( | ctx, | |||
fmts, | |||||
in_fmts, | |||||
out_fmts, | |||||
ref, | |||||
list | ) |
Value:
{ \ int count = 0, i; \ \ for (i = 0; i < ctx->input_count; i++) { \ if (ctx->inputs[i]) { \ ref(fmts, &ctx->inputs[i]->out_fmts); \ count++; \ } \ } \ for (i = 0; i < ctx->output_count; i++) { \ if (ctx->outputs[i]) { \ ref(fmts, &ctx->outputs[i]->in_fmts); \ count++; \ } \ } \ \ if (!count) { \ av_freep(&fmts->list); \ av_freep(&fmts->refs); \ av_freep(&fmts); \ } \ }
Definition at line 403 of file formats.c.
Referenced by avfilter_set_common_formats(), ff_set_common_channel_layouts(), and ff_set_common_samplerates().
int avfilter_add_format | ( | AVFilterFormats ** | avff, | |
int64_t | fmt | |||
) |
Add fmt to the list of media formats contained in *avff.
If *avff is NULL the function allocates the filter formats struct and puts its pointer in *avff.
Definition at line 253 of file formats.c.
Referenced by avfilter_make_all_formats(), init(), query_formats(), and reduce_formats_on_filter().
AVFilterFormats* avfilter_all_formats | ( | enum AVMediaType | type | ) |
Definition at line 264 of file formats.c.
Referenced by ff_default_query_formats(), and query_formats().
int avfilter_default_query_formats | ( | AVFilterContext * | ctx | ) |
void avfilter_formats_changeref | ( | AVFilterFormats ** | oldref, | |
AVFilterFormats ** | newref | |||
) |
Before After ________ ________ |formats |<---------.
|formats |<---------. | ____ | ___|___ | ____ | ___|___ | |refs| | | | | | |refs| | | | | NULL | |* *--------->|*oldref| | |* *--------->|*newref| ^ | |* * | | |_______| | |* * | | |_______| ___|___ | |____| | | |____| | | | | |________| |________| |*oldref| |_______|
Definition at line 397 of file formats.c.
Referenced by avfilter_insert_filter().
void avfilter_formats_ref | ( | AVFilterFormats * | formats, | |
AVFilterFormats ** | ref | |||
) |
Add *ref as a new reference to formats.
That is the pointers will point like in the ASCII art below: ________ |formats |<--------. | ____ | ____|___________________ | |refs| | | __|_ | |* * | | | | | | AVFilterLink | |* *--------->|*ref| | |____| | | |____| |________| |________________________
Definition at line 332 of file formats.c.
Referenced by avfilter_set_common_formats(), ff_set_common_samplerates(), query_formats(), and set_common_formats().
void avfilter_formats_unref | ( | AVFilterFormats ** | ref | ) |
If *ref is non-NULL, remove *ref as a reference to the format list it currently points to, deallocates that list if this was the last reference, and sets *ref to NULL.
Before After ________ ________ NULL |formats |<--------. |formats | ^ | ____ | ____|________________ | ____ | ____|________________ | |refs| | | __|_ | |refs| | | __|_ | |* * | | | | | | AVFilterLink | |* * | | | | | | AVFilterLink | |* *--------->|*ref| | |* | | | |*ref| | |____| | | |____| | |____| | | |____| |________| |_____________________ |________| |_____________________
Definition at line 368 of file formats.c.
Referenced by avfilter_free(), pick_format(), and query_formats().
AVFilterFormats* avfilter_make_all_formats | ( | enum AVMediaType | type | ) |
Return a list of all formats supported by FFmpeg for the given media type.
Definition at line 270 of file formats.c.
Referenced by avfilter_all_formats(), and query_formats().
AVFilterFormats* avfilter_make_all_packing_formats | ( | void | ) |
AVFilterChannelLayouts* avfilter_make_format64_list | ( | const int64_t * | fmts | ) |
AVFilterFormats* avfilter_make_format_list | ( | const int * | fmts | ) |
Create a list of supported formats.
This is intended for use in AVFilter->query_formats().
fmts | list of media formats, terminated by -1. If NULL an empty list is created. |
Definition at line 216 of file formats.c.
Referenced by avfilter_make_all_packing_formats(), ff_draw_supported_pixel_formats(), and query_formats().
AVFilterFormats* avfilter_merge_formats | ( | AVFilterFormats * | a, | |
AVFilterFormats * | b | |||
) |
Return a format list which contains the intersection of the formats of a and b.
Also, all the references of a, all the references of b, and a and b themselves will be deallocated.
If a and b do not share any common formats, neither is modified, and NULL is returned.
Definition at line 88 of file formats.c.
Referenced by insert_conv_filter(), and query_formats().
void avfilter_set_common_formats | ( | AVFilterContext * | ctx, | |
AVFilterFormats * | formats | |||
) |
A helper for query_formats() which sets all links to the same list of formats.
Helpers for query_formats() which set all links to the same list of formats/layouts.
If there are no links hooked to this filter, the list of formats is freed.
Definition at line 446 of file formats.c.
Referenced by ff_default_query_formats(), and query_formats().
int ff_add_channel_layout | ( | AVFilterChannelLayouts ** | l, | |
uint64_t | channel_layout | |||
) |
Definition at line 258 of file formats.c.
Referenced by init(), query_formats(), and reduce_formats_on_filter().
AVFilterChannelLayouts* ff_all_channel_layouts | ( | void | ) |
Construct an empty AVFilterChannelLayouts/AVFilterFormats struct -- representing any channel layout/sample rate.
Definition at line 314 of file formats.c.
Referenced by ff_default_query_formats(), and query_formats().
AVFilterFormats* ff_all_samplerates | ( | void | ) |
Definition at line 308 of file formats.c.
Referenced by ff_default_query_formats(), and query_formats().
void ff_channel_layouts_changeref | ( | AVFilterChannelLayouts ** | oldref, | |
AVFilterChannelLayouts ** | newref | |||
) |
void ff_channel_layouts_ref | ( | AVFilterChannelLayouts * | f, | |
AVFilterChannelLayouts ** | ref | |||
) |
Add *ref as a new reference to f.
Definition at line 327 of file formats.c.
Referenced by ff_set_common_channel_layouts(), and query_formats().
void ff_channel_layouts_unref | ( | AVFilterChannelLayouts ** | ref | ) |
Remove a reference to a channel layouts list.
Definition at line 373 of file formats.c.
Referenced by avfilter_free(), and pick_format().
int64_t* ff_copy_int64_list | ( | const int64_t *const | list | ) |
int* ff_copy_int_list | ( | const int *const | list | ) |
int ff_default_query_formats | ( | AVFilterContext * | ctx | ) |
Definition at line 452 of file formats.c.
Referenced by avfilter_default_query_formats(), main(), and query_formats().
int ff_fmt_is_in | ( | int | fmt, | |
const int * | fmts | |||
) |
Tell is a format is contained in the provided list terminated by -1.
Definition at line 162 of file formats.c.
Referenced by config_input(), config_input_main(), config_input_overlay(), config_out_props(), and config_props().
AVFilterChannelLayouts* ff_merge_channel_layouts | ( | AVFilterChannelLayouts * | a, | |
AVFilterChannelLayouts * | b | |||
) |
Return a channel layouts/samplerates list which contains the intersection of the layouts/samplerates of a and b.
Also, all the references of a, all the references of b, and a and b themselves will be deallocated.
If a and b do not share any common elements, neither is modified, and NULL is returned.
Definition at line 134 of file formats.c.
Referenced by insert_conv_filter(), and query_formats().
AVFilterFormats* ff_merge_samplerates | ( | AVFilterFormats * | a, | |
AVFilterFormats * | b | |||
) |
int ff_parse_channel_layout | ( | int64_t * | ret, | |
const char * | arg, | |||
void * | log_ctx | |||
) |
Parse a channel layout or a corresponding integer representation.
ret | 64bit integer pointer to where the value should be written. | |
arg | string to parse | |
log_ctx | log context |
Definition at line 522 of file formats.c.
Referenced by init().
int ff_parse_pixel_format | ( | enum PixelFormat * | ret, | |
const char * | arg, | |||
void * | log_ctx | |||
) |
Parse a pixel format.
ret | pixel format pointer to where the value should be written | |
arg | string to parse | |
log_ctx | log context |
Definition at line 469 of file formats.c.
Referenced by init(), and init_video().
int ff_parse_sample_format | ( | int * | ret, | |
const char * | arg, | |||
void * | log_ctx | |||
) |
Parse a sample format name or a corresponding integer representation.
ret | integer pointer to where the value should be written | |
arg | string to parse | |
log_ctx | log context |
Definition at line 484 of file formats.c.
Referenced by init().
int ff_parse_sample_rate | ( | int * | ret, | |
const char * | arg, | |||
void * | log_ctx | |||
) |
int ff_parse_time_base | ( | AVRational * | ret, | |
const char * | arg, | |||
void * | log_ctx | |||
) |
Parse a time base.
ret | unsigned AVRational pointer to where the value should be written | |
arg | string to parse | |
log_ctx | log context |
void ff_set_common_channel_layouts | ( | AVFilterContext * | ctx, | |
AVFilterChannelLayouts * | layouts | |||
) |
A helper for query_formats() which sets all links to the same list of channel layouts/sample rates.
If there are no links hooked to this filter, the list is freed.
Definition at line 427 of file formats.c.
Referenced by ff_default_query_formats(), and query_formats().
void ff_set_common_samplerates | ( | AVFilterContext * | ctx, | |
AVFilterFormats * | samplerates | |||
) |
Definition at line 434 of file formats.c.
Referenced by ff_default_query_formats(), and query_formats().
const int64_t avfilter_all_channel_layouts[] |
A list of all channel layouts supported by libavfilter.
Definition at line 285 of file formats.c.
Referenced by init_filters(), and lavfi_read_header().