mirror of
https://github.com/FFmpeg/FFmpeg.git
synced 2024-12-23 12:43:46 +02:00
lavfi/formats: add ff_formats_pixdesc_filter().
This commit is contained in:
parent
aef670cff4
commit
563e1df5d6
@ -373,6 +373,47 @@ const int64_t avfilter_all_channel_layouts[] = {
|
|||||||
-1
|
-1
|
||||||
};
|
};
|
||||||
|
|
||||||
|
int ff_formats_pixdesc_filter(AVFilterFormats **rfmts, unsigned want, unsigned rej)
|
||||||
|
{
|
||||||
|
unsigned nb_formats, fmt, flags;
|
||||||
|
AVFilterFormats *formats = NULL;
|
||||||
|
|
||||||
|
while (1) {
|
||||||
|
nb_formats = 0;
|
||||||
|
for (fmt = 0;; fmt++) {
|
||||||
|
const AVPixFmtDescriptor *desc = av_pix_fmt_desc_get(fmt);
|
||||||
|
if (!desc)
|
||||||
|
break;
|
||||||
|
flags = desc->flags;
|
||||||
|
if (!(desc->flags & AV_PIX_FMT_FLAG_HWACCEL) &&
|
||||||
|
!(desc->flags & AV_PIX_FMT_FLAG_PLANAR) &&
|
||||||
|
(desc->log2_chroma_w || desc->log2_chroma_h))
|
||||||
|
flags |= FF_PIX_FMT_FLAG_SW_FLAT_SUB;
|
||||||
|
if ((flags & (want | rej)) != want)
|
||||||
|
continue;
|
||||||
|
if (formats)
|
||||||
|
formats->formats[nb_formats] = fmt;
|
||||||
|
nb_formats++;
|
||||||
|
}
|
||||||
|
if (formats) {
|
||||||
|
av_assert0(formats->nb_formats == nb_formats);
|
||||||
|
*rfmts = formats;
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
formats = av_mallocz(sizeof(*formats));
|
||||||
|
if (!formats)
|
||||||
|
return AVERROR(ENOMEM);
|
||||||
|
formats->nb_formats = nb_formats;
|
||||||
|
if (nb_formats) {
|
||||||
|
formats->formats = av_malloc_array(nb_formats, sizeof(*formats->formats));
|
||||||
|
if (!formats->formats) {
|
||||||
|
av_freep(&formats);
|
||||||
|
return AVERROR(ENOMEM);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// AVFilterFormats *avfilter_make_all_channel_layouts(void)
|
// AVFilterFormats *avfilter_make_all_channel_layouts(void)
|
||||||
// {
|
// {
|
||||||
// return avfilter_make_format64_list(avfilter_all_channel_layouts);
|
// return avfilter_make_format64_list(avfilter_all_channel_layouts);
|
||||||
|
@ -221,6 +221,16 @@ int ff_add_format(AVFilterFormats **avff, int64_t fmt);
|
|||||||
av_warn_unused_result
|
av_warn_unused_result
|
||||||
AVFilterFormats *ff_all_formats(enum AVMediaType type);
|
AVFilterFormats *ff_all_formats(enum AVMediaType type);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Construct a formats list containing all pixel formats with certain
|
||||||
|
* properties
|
||||||
|
*/
|
||||||
|
av_warn_unused_result
|
||||||
|
int ff_formats_pixdesc_filter(AVFilterFormats **rfmts, unsigned want, unsigned rej);
|
||||||
|
|
||||||
|
//* format is software, non-planar with sub-sampling
|
||||||
|
#define FF_PIX_FMT_FLAG_SW_FLAT_SUB (1 << 24)
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Construct a formats list containing all planar sample formats.
|
* Construct a formats list containing all planar sample formats.
|
||||||
*/
|
*/
|
||||||
|
Loading…
Reference in New Issue
Block a user