FFmpeg
|
#include "libavutil/avassert.h"
#include "libavutil/channel_layout.h"
#include "libavutil/common.h"
#include "libavutil/eval.h"
#include "libavutil/pixdesc.h"
#include "avfilter.h"
#include "internal.h"
#include "formats.h"
Go to the source code of this file.
Macros | |
#define | KNOWN(l) (!FF_LAYOUT2COUNT(l)) /* for readability */ |
#define | MERGE_REF(ret, a, fmts, type, fail_statement) |
Add all refs from a to ret and destroy a. More... | |
#define | MERGE_FORMATS(a, b, fmts, nb, type, check, empty_allowed) |
Add all formats common to a and b to a, add b's refs to a and destroy b. More... | |
#define | MAKE_FORMAT_LIST(type, field, count_field) |
#define | ADD_FORMAT(f, fmt, unref_fn, type, list, nb) |
#define | FORMATS_REF(f, ref, unref_fn) |
#define | FIND_REF_INDEX(ref, idx) |
#define | FORMATS_UNREF(ref, list) |
#define | FORMATS_CHANGEREF(oldref, newref) |
#define | SET_COMMON_FORMATS(ctx, fmts, media_type, ref_fn, unref_fn) |
Functions | |
static int | merge_formats_internal (AVFilterFormats *a, AVFilterFormats *b, enum AVMediaType type, int check) |
static int | can_merge_pix_fmts (const void *a, const void *b) |
Check the formats lists for compatibility for merging without actually merging. More... | |
static int | merge_pix_fmts (void *a, void *b) |
Merge the formats lists if they are compatible and update all the references of a and b to point to the combined list and free the old lists as needed. More... | |
static int | can_merge_sample_fmts (const void *a, const void *b) |
See can_merge_pix_fmts(). More... | |
static int | merge_sample_fmts (void *a, void *b) |
See merge_pix_fmts(). More... | |
static int | merge_samplerates_internal (AVFilterFormats *a, AVFilterFormats *b, int check) |
static int | can_merge_samplerates (const void *a, const void *b) |
See can_merge_pix_fmts(). More... | |
static int | merge_samplerates (void *a, void *b) |
See merge_pix_fmts(). More... | |
static int | merge_channel_layouts (void *va, void *vb) |
See merge_pix_fmts(). More... | |
const AVFilterNegotiation * | ff_filter_get_negotiation (AVFilterLink *link) |
int | ff_fmt_is_in (int fmt, const int *fmts) |
Tell if an integer is contained in the provided -1-terminated list of integers. More... | |
AVFilterFormats * | ff_make_format_list (const int *fmts) |
Create a list of supported formats. More... | |
AVFilterChannelLayouts * | ff_make_format64_list (const int64_t *fmts) |
int | ff_add_format (AVFilterFormats **avff, int64_t fmt) |
Add fmt to the list of media formats contained in *avff. More... | |
int | ff_add_channel_layout (AVFilterChannelLayouts **l, uint64_t channel_layout) |
AVFilterFormats * | ff_make_formats_list_singleton (int fmt) |
Equivalent to ff_make_format_list({const int[]}{ fmt, -1 }) More... | |
AVFilterFormats * | ff_all_formats (enum AVMediaType type) |
Return a list of all formats supported by FFmpeg for the given media type. More... | |
AVFilterFormats * | ff_formats_pixdesc_filter (unsigned want, unsigned rej) |
Construct a formats list containing all pixel formats with certain properties. More... | |
AVFilterFormats * | ff_planar_sample_fmts (void) |
Construct a formats list containing all planar sample formats. More... | |
AVFilterFormats * | ff_all_samplerates (void) |
AVFilterChannelLayouts * | ff_all_channel_layouts (void) |
Construct an empty AVFilterChannelLayouts/AVFilterFormats struct – representing any channel layout (with known disposition)/sample rate. More... | |
AVFilterChannelLayouts * | ff_all_channel_counts (void) |
Construct an AVFilterChannelLayouts coding for any channel layout, with known or unknown disposition. More... | |
int | ff_channel_layouts_ref (AVFilterChannelLayouts *f, AVFilterChannelLayouts **ref) |
Add *ref as a new reference to f. More... | |
int | ff_formats_ref (AVFilterFormats *f, AVFilterFormats **ref) |
Add *ref as a new reference to formats. More... | |
void | ff_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. More... | |
void | ff_channel_layouts_unref (AVFilterChannelLayouts **ref) |
Remove a reference to a channel layouts list. More... | |
void | ff_channel_layouts_changeref (AVFilterChannelLayouts **oldref, AVFilterChannelLayouts **newref) |
void | ff_formats_changeref (AVFilterFormats **oldref, AVFilterFormats **newref) |
int | ff_set_common_channel_layouts (AVFilterContext *ctx, AVFilterChannelLayouts *channel_layouts) |
Helpers for query_formats() which set all free audio links to the same list of channel layouts/sample rates. More... | |
int | ff_set_common_channel_layouts_from_list (AVFilterContext *ctx, const int64_t *fmts) |
Equivalent to ff_set_common_channel_layouts(ctx, ff_make_format64_list(fmts)) More... | |
int | ff_set_common_all_channel_counts (AVFilterContext *ctx) |
Equivalent to ff_set_common_channel_layouts(ctx, ff_all_channel_counts()) More... | |
int | ff_set_common_samplerates (AVFilterContext *ctx, AVFilterFormats *samplerates) |
int | ff_set_common_samplerates_from_list (AVFilterContext *ctx, const int *samplerates) |
Equivalent to ff_set_common_samplerates(ctx, ff_make_format_list(samplerates)) More... | |
int | ff_set_common_all_samplerates (AVFilterContext *ctx) |
Equivalent to ff_set_common_samplerates(ctx, ff_all_samplerates()) More... | |
int | ff_set_common_formats (AVFilterContext *ctx, AVFilterFormats *formats) |
A helper for query_formats() which sets all links to the same list of formats. More... | |
int | ff_set_common_formats_from_list (AVFilterContext *ctx, const int *fmts) |
Equivalent to ff_set_common_formats(ctx, ff_make_format_list(fmts)) More... | |
int | ff_default_query_formats (AVFilterContext *ctx) |
int | ff_parse_pixel_format (enum AVPixelFormat *ret, const char *arg, void *log_ctx) |
Parse a pixel format. More... | |
int | ff_parse_sample_rate (int *ret, const char *arg, void *log_ctx) |
Parse a sample rate. More... | |
int | ff_parse_channel_layout (int64_t *ret, int *nret, const char *arg, void *log_ctx) |
Parse a channel layout or a corresponding integer representation. More... | |
static int | check_list (void *log, const char *name, const AVFilterFormats *fmts) |
int | ff_formats_check_pixel_formats (void *log, const AVFilterFormats *fmts) |
Check that fmts is a valid pixel formats list. More... | |
int | ff_formats_check_sample_formats (void *log, const AVFilterFormats *fmts) |
Check that fmts is a valid sample formats list. More... | |
int | ff_formats_check_sample_rates (void *log, const AVFilterFormats *fmts) |
Check that fmts is a valid sample rates list. More... | |
static int | layouts_compatible (uint64_t a, uint64_t b) |
int | ff_formats_check_channel_layouts (void *log, const AVFilterChannelLayouts *fmts) |
Check that fmts is a valid channel layouts list. More... | |
Variables | |
static const AVFilterFormatsMerger | mergers_video [] |
static const AVFilterFormatsMerger | mergers_audio [] |
static const AVFilterNegotiation | negotiate_video |
static const AVFilterNegotiation | negotiate_audio |
#define KNOWN | ( | l | ) | (!FF_LAYOUT2COUNT(l)) /* for readability */ |
Add all formats common to a and b to a, add b's refs to a and destroy b.
If check is set, nothing is modified and it is only checked whether the formats are compatible. If empty_allowed is set and one of a,b->nb is zero, the lists are merged; otherwise, 0 (for nonmergeability) is returned.
#define FIND_REF_INDEX | ( | ref, | |
idx | |||
) |
#define FORMATS_CHANGEREF | ( | oldref, | |
newref | |||
) |
#define SET_COMMON_FORMATS | ( | ctx, | |
fmts, | |||
media_type, | |||
ref_fn, | |||
unref_fn | |||
) |
|
static |
Definition at line 95 of file formats.c.
Referenced by can_merge_pix_fmts(), can_merge_sample_fmts(), merge_pix_fmts(), and merge_sample_fmts().
|
static |
|
static |
Merge the formats lists if they are compatible and update all the references of a and b to point to the combined list and free the old lists as needed.
The combined list usually contains the intersection of the lists of a and b.
Both a and b must have owners (i.e. refcount > 0) for these functions.
|
static |
See can_merge_pix_fmts().
|
static |
See merge_pix_fmts().
|
static |
Definition at line 184 of file formats.c.
Referenced by can_merge_samplerates(), and merge_samplerates().
|
static |
See can_merge_pix_fmts().
|
static |
See merge_pix_fmts().
|
static |
See merge_pix_fmts().
const AVFilterNegotiation* ff_filter_get_negotiation | ( | AVFilterLink * | link | ) |
Definition at line 343 of file formats.c.
Referenced by query_formats().
Tell if an integer is contained in the provided -1-terminated list of integers.
This is useful for determining (for instance) if an AVPixelFormat is in an array of supported formats.
fmt | provided format |
fmts | -1-terminated list of formats |
Definition at line 352 of file formats.c.
Referenced by config_input(), config_input_main(), config_input_overlay(), config_out_props(), and config_props().
AVFilterFormats* ff_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 |
Definition at line 381 of file formats.c.
Referenced by cudaupload_query_formats(), ff_default_query_formats(), ff_make_formats_list_singleton(), ff_set_common_formats_from_list(), ff_set_common_samplerates_from_list(), ff_vaapi_vpp_query_formats(), hwupload_query_formats(), movie_query_formats(), overlay_qsv_query_formats(), and query_formats().
AVFilterChannelLayouts* ff_make_format64_list | ( | const int64_t * | fmts | ) |
Definition at line 390 of file formats.c.
Referenced by ff_set_common_channel_layouts_from_list(), movie_query_formats(), and query_formats().
int ff_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 420 of file formats.c.
Referenced by asink_query_formats(), ff_all_formats(), ff_draw_supported_pixel_formats(), ff_planar_sample_fmts(), hwupload_query_formats(), init(), query_formats(), reduce_formats_on_filter(), and vsink_query_formats().
int ff_add_channel_layout | ( | AVFilterChannelLayouts ** | l, |
uint64_t | channel_layout | ||
) |
Definition at line 426 of file formats.c.
Referenced by aeval_query_formats(), asink_query_formats(), channelmap_query_formats(), init(), join_query_formats(), query_formats(), and reduce_formats_on_filter().
AVFilterFormats* ff_make_formats_list_singleton | ( | int | fmt | ) |
Equivalent to ff_make_format_list({const int[]}{ fmt, -1 })
Definition at line 433 of file formats.c.
Referenced by ff_default_query_formats().
AVFilterFormats* ff_all_formats | ( | enum AVMediaType | type | ) |
Return a list of all formats supported by FFmpeg for the given media type.
Definition at line 439 of file formats.c.
Referenced by ff_default_query_formats(), filter_query_formats(), hwmap_query_formats(), and query_formats().
AVFilterFormats* ff_formats_pixdesc_filter | ( | unsigned | want, |
unsigned | rej | ||
) |
Construct a formats list containing all pixel formats with certain properties.
Definition at line 457 of file formats.c.
Referenced by ff_all_formats(), hwdownload_query_formats(), and query_formats().
AVFilterFormats* ff_planar_sample_fmts | ( | void | ) |
Construct a formats list containing all planar sample formats.
Definition at line 497 of file formats.c.
Referenced by channelmap_query_formats(), join_query_formats(), and query_formats().
AVFilterFormats* ff_all_samplerates | ( | void | ) |
Definition at line 510 of file formats.c.
Referenced by ff_set_common_all_samplerates(), and query_formats().
AVFilterChannelLayouts* ff_all_channel_layouts | ( | void | ) |
Construct an empty AVFilterChannelLayouts/AVFilterFormats struct – representing any channel layout (with known disposition)/sample rate.
Definition at line 516 of file formats.c.
Referenced by filter_query_formats(), join_query_formats(), and query_formats().
AVFilterChannelLayouts* ff_all_channel_counts | ( | void | ) |
Construct an AVFilterChannelLayouts coding for any channel layout, with known or unknown disposition.
Definition at line 525 of file formats.c.
Referenced by aeval_query_formats(), asink_query_formats(), channelmap_query_formats(), ff_set_common_all_channel_counts(), and query_formats().
int ff_channel_layouts_ref | ( | AVFilterChannelLayouts * | f, |
AVFilterChannelLayouts ** | ref | ||
) |
Add *ref as a new reference to f.
Definition at line 550 of file formats.c.
Referenced by aeval_query_formats(), channelmap_query_formats(), ff_set_common_channel_layouts(), join_query_formats(), movie_query_formats(), and query_formats().
int ff_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 555 of file formats.c.
Referenced by cudaupload_query_formats(), ff_set_common_formats(), ff_set_common_samplerates(), ff_vaapi_vpp_query_formats(), hwdownload_query_formats(), hwmap_query_formats(), hwupload_query_formats(), movie_query_formats(), overlay_qsv_query_formats(), and query_formats().
void ff_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 592 of file formats.c.
Referenced by ff_add_format(), ff_formats_ref(), ff_set_common_formats(), ff_set_common_samplerates(), free_link(), pick_format(), and uninit().
void ff_channel_layouts_unref | ( | AVFilterChannelLayouts ** | ref | ) |
Remove a reference to a channel layouts list.
Definition at line 597 of file formats.c.
Referenced by ff_add_channel_layout(), ff_channel_layouts_ref(), ff_set_common_channel_layouts(), free_link(), pick_format(), and uninit().
void ff_channel_layouts_changeref | ( | AVFilterChannelLayouts ** | oldref, |
AVFilterChannelLayouts ** | newref | ||
) |
Definition at line 615 of file formats.c.
Referenced by avfilter_insert_filter().
void ff_formats_changeref | ( | AVFilterFormats ** | oldref, |
AVFilterFormats ** | newref | ||
) |
Before After
|formats |<------—. |formats |<------—. | ____ | ___|___ | ____ | ___|___ | |refs| | | | | | |refs| | | | | NULL | |* ------—>|*oldref| | | ------—>|*newref| ^ | | * | | |_______| | |* * | | |_______| ___|___ | |____| | | |____| | | | | |________| |________| |*oldref| |_______|
Definition at line 621 of file formats.c.
Referenced by avfilter_insert_filter().
int ff_set_common_channel_layouts | ( | AVFilterContext * | ctx, |
AVFilterChannelLayouts * | layouts | ||
) |
Helpers for query_formats() which set all free audio links to the same list of channel layouts/sample rates.
If there are no links hooked to this list, the list is freed.
Definition at line 658 of file formats.c.
Referenced by asink_query_formats(), ff_set_common_all_channel_counts(), ff_set_common_channel_layouts_from_list(), filter_query_formats(), and query_formats().
int ff_set_common_channel_layouts_from_list | ( | AVFilterContext * | ctx, |
const int64_t * | fmts | ||
) |
Equivalent to ff_set_common_channel_layouts(ctx, ff_make_format64_list(fmts))
Definition at line 665 of file formats.c.
Referenced by query_formats().
int ff_set_common_all_channel_counts | ( | AVFilterContext * | ctx | ) |
Equivalent to ff_set_common_channel_layouts(ctx, ff_all_channel_counts())
Definition at line 671 of file formats.c.
Referenced by aeval_query_formats(), ff_default_query_formats(), and query_formats().
int ff_set_common_samplerates | ( | AVFilterContext * | ctx, |
AVFilterFormats * | samplerates | ||
) |
Definition at line 676 of file formats.c.
Referenced by asink_query_formats(), ff_set_common_all_samplerates(), ff_set_common_samplerates_from_list(), and query_formats().
int ff_set_common_samplerates_from_list | ( | AVFilterContext * | ctx, |
const int * | samplerates | ||
) |
Equivalent to ff_set_common_samplerates(ctx, ff_make_format_list(samplerates))
Definition at line 683 of file formats.c.
Referenced by query_formats().
int ff_set_common_all_samplerates | ( | AVFilterContext * | ctx | ) |
Equivalent to ff_set_common_samplerates(ctx, ff_all_samplerates())
Definition at line 689 of file formats.c.
Referenced by aeval_query_formats(), channelmap_query_formats(), ff_default_query_formats(), filter_query_formats(), join_query_formats(), and query_formats().
int ff_set_common_formats | ( | AVFilterContext * | ctx, |
AVFilterFormats * | formats | ||
) |
A helper for query_formats() which sets all links to the same list of formats.
If there are no links hooked to this filter, the list of formats is freed.
Definition at line 699 of file formats.c.
Referenced by asink_query_formats(), channelmap_query_formats(), ff_default_query_formats(), ff_set_common_formats_from_list(), filter_query_formats(), join_query_formats(), query_formats(), and vsink_query_formats().
int ff_set_common_formats_from_list | ( | AVFilterContext * | ctx, |
const int * | fmts | ||
) |
Equivalent to ff_set_common_formats(ctx, ff_make_format_list(fmts))
Definition at line 705 of file formats.c.
Referenced by aeval_query_formats(), geq_query_formats(), and query_formats().
int ff_default_query_formats | ( | AVFilterContext * | ctx | ) |
Definition at line 710 of file formats.c.
Referenced by main(), query_formats(), and vsink_query_formats().
int ff_parse_pixel_format | ( | enum AVPixelFormat * | 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. |
nret | integer pointer to the number of channels; if not NULL, then unknown channel layouts are accepted |
arg | string to parse |
log_ctx | log context |
|
static |
Definition at line 810 of file formats.c.
Referenced by ff_formats_check_pixel_formats(), ff_formats_check_sample_formats(), and ff_formats_check_sample_rates().
int ff_formats_check_pixel_formats | ( | void * | log, |
const AVFilterFormats * | fmts | ||
) |
Check that fmts is a valid pixel formats list.
In particular, check for duplicates.
Definition at line 831 of file formats.c.
Referenced by filter_link_check_formats().
int ff_formats_check_sample_formats | ( | void * | log, |
const AVFilterFormats * | fmts | ||
) |
Check that fmts is a valid sample formats list.
In particular, check for duplicates.
Definition at line 836 of file formats.c.
Referenced by filter_link_check_formats().
int ff_formats_check_sample_rates | ( | void * | log, |
const AVFilterFormats * | fmts | ||
) |
Check that fmts is a valid sample rates list.
In particular, check for duplicates.
Definition at line 841 of file formats.c.
Referenced by filter_link_check_formats().
|
static |
Definition at line 848 of file formats.c.
Referenced by ff_formats_check_channel_layouts().
int ff_formats_check_channel_layouts | ( | void * | log, |
const AVFilterChannelLayouts * | fmts | ||
) |
Check that fmts is a valid channel layouts list.
In particular, check for duplicates.
Definition at line 855 of file formats.c.
Referenced by filter_link_check_formats().
|
static |
|
static |
|
static |
Definition at line 329 of file formats.c.
Referenced by ff_filter_get_negotiation().
|
static |
Definition at line 336 of file formats.c.
Referenced by ff_filter_get_negotiation().