#include "libavutil/opt.h"
#include "libavutil/pixdesc.h"
-#define FF_INTERNAL_FIELDS 1
-#include "libavfilter/framequeue.h"
-
#include "avfilter.h"
#include "drawutils.h"
+#include "filters.h"
#include "internal.h"
#define PLANE_R 0x01
AVFILTER_DEFINE_CLASS(extractplanes);
+#define EIGHTBIT_FORMATS \
+ AV_PIX_FMT_YUV410P, \
+ AV_PIX_FMT_YUV411P, \
+ AV_PIX_FMT_YUV440P, \
+ AV_PIX_FMT_YUV420P, AV_PIX_FMT_YUVA420P, \
+ AV_PIX_FMT_YUV422P, AV_PIX_FMT_YUVA422P, \
+ AV_PIX_FMT_YUVJ420P, AV_PIX_FMT_YUVJ422P, \
+ AV_PIX_FMT_YUVJ440P, AV_PIX_FMT_YUVJ444P, \
+ AV_PIX_FMT_YUVJ411P, \
+ AV_PIX_FMT_YUV444P, AV_PIX_FMT_YUVA444P, \
+ AV_PIX_FMT_GRAY8, AV_PIX_FMT_GRAY8A, \
+ AV_PIX_FMT_RGB24, AV_PIX_FMT_BGR24, \
+ AV_PIX_FMT_RGBA, AV_PIX_FMT_BGRA, \
+ AV_PIX_FMT_ARGB, AV_PIX_FMT_ABGR, \
+ AV_PIX_FMT_RGB0, AV_PIX_FMT_BGR0, \
+ AV_PIX_FMT_0RGB, AV_PIX_FMT_0BGR, \
+ AV_PIX_FMT_GBRP, AV_PIX_FMT_GBRAP
+
+#define HIGHDEPTH_FORMATS(suf) \
+ AV_PIX_FMT_YA16##suf, AV_PIX_FMT_GRAY16##suf, \
+ AV_PIX_FMT_YUV420P16##suf, AV_PIX_FMT_YUVA420P16##suf, \
+ AV_PIX_FMT_YUV422P16##suf, AV_PIX_FMT_YUVA422P16##suf, \
+ AV_PIX_FMT_YUV444P16##suf, AV_PIX_FMT_YUVA444P16##suf, \
+ AV_PIX_FMT_RGB48##suf, AV_PIX_FMT_BGR48##suf, \
+ AV_PIX_FMT_RGBA64##suf, AV_PIX_FMT_BGRA64##suf, \
+ AV_PIX_FMT_GBRP16##suf, AV_PIX_FMT_GBRAP16##suf, \
+ AV_PIX_FMT_YUV420P10##suf, \
+ AV_PIX_FMT_YUV422P10##suf, \
+ AV_PIX_FMT_YUV444P10##suf, \
+ AV_PIX_FMT_YUV440P10##suf, \
+ AV_PIX_FMT_YUVA420P10##suf, \
+ AV_PIX_FMT_YUVA422P10##suf, \
+ AV_PIX_FMT_YUVA444P10##suf, \
+ AV_PIX_FMT_YUV420P12##suf, \
+ AV_PIX_FMT_YUV422P12##suf, \
+ AV_PIX_FMT_YUV444P12##suf, \
+ AV_PIX_FMT_YUV440P12##suf, \
+ AV_PIX_FMT_YUVA422P12##suf, \
+ AV_PIX_FMT_YUVA444P12##suf, \
+ AV_PIX_FMT_GBRP10##suf, AV_PIX_FMT_GBRAP10##suf, \
+ AV_PIX_FMT_GBRP12##suf, AV_PIX_FMT_GBRAP12##suf, \
+ AV_PIX_FMT_YUV420P9##suf, \
+ AV_PIX_FMT_YUV422P9##suf, \
+ AV_PIX_FMT_YUV444P9##suf, \
+ AV_PIX_FMT_YUVA420P9##suf, \
+ AV_PIX_FMT_YUVA422P9##suf, \
+ AV_PIX_FMT_YUVA444P9##suf, \
+ AV_PIX_FMT_GBRP9##suf, \
+ AV_PIX_FMT_GBRP14##suf, \
+ AV_PIX_FMT_YUV420P14##suf, \
+ AV_PIX_FMT_YUV422P14##suf, \
+ AV_PIX_FMT_YUV444P14##suf
+
+#define FLOAT_FORMATS(suf) \
+ AV_PIX_FMT_GRAYF32##suf, \
+ AV_PIX_FMT_GBRPF32##suf, AV_PIX_FMT_GBRAPF32##suf \
+
static int query_formats(AVFilterContext *ctx)
{
static const enum AVPixelFormat in_pixfmts_le[] = {
- AV_PIX_FMT_YUV410P,
- AV_PIX_FMT_YUV411P,
- AV_PIX_FMT_YUV440P,
- AV_PIX_FMT_YUV420P, AV_PIX_FMT_YUVA420P,
- AV_PIX_FMT_YUV422P, AV_PIX_FMT_YUVA422P,
- AV_PIX_FMT_YUVJ420P, AV_PIX_FMT_YUVJ422P,
- AV_PIX_FMT_YUVJ440P, AV_PIX_FMT_YUVJ444P,
- AV_PIX_FMT_YUVJ411P,
- AV_PIX_FMT_YUV444P, AV_PIX_FMT_YUVA444P,
- AV_PIX_FMT_YUV420P16LE, AV_PIX_FMT_YUVA420P16LE,
- AV_PIX_FMT_YUV422P16LE, AV_PIX_FMT_YUVA422P16LE,
- AV_PIX_FMT_YUV444P16LE, AV_PIX_FMT_YUVA444P16LE,
- AV_PIX_FMT_GRAY8, AV_PIX_FMT_GRAY8A,
- AV_PIX_FMT_YA16LE, AV_PIX_FMT_GRAY16LE,
- AV_PIX_FMT_RGB24, AV_PIX_FMT_BGR24,
- AV_PIX_FMT_RGBA, AV_PIX_FMT_BGRA,
- AV_PIX_FMT_ARGB, AV_PIX_FMT_ABGR,
- AV_PIX_FMT_RGB0, AV_PIX_FMT_BGR0,
- AV_PIX_FMT_0RGB, AV_PIX_FMT_0BGR,
- AV_PIX_FMT_RGB48LE, AV_PIX_FMT_BGR48LE,
- AV_PIX_FMT_RGBA64LE, AV_PIX_FMT_BGRA64LE,
- AV_PIX_FMT_GBRP, AV_PIX_FMT_GBRAP,
- AV_PIX_FMT_GBRP16LE, AV_PIX_FMT_GBRAP16LE,
- AV_PIX_FMT_YUV420P10LE,
- AV_PIX_FMT_YUV422P10LE,
- AV_PIX_FMT_YUV444P10LE,
- AV_PIX_FMT_YUV440P10LE,
- AV_PIX_FMT_YUVA420P10LE,
- AV_PIX_FMT_YUVA422P10LE,
- AV_PIX_FMT_YUVA444P10LE,
- AV_PIX_FMT_YUV420P12LE,
- AV_PIX_FMT_YUV422P12LE,
- AV_PIX_FMT_YUV444P12LE,
- AV_PIX_FMT_YUV440P12LE,
- AV_PIX_FMT_GBRP10LE, AV_PIX_FMT_GBRAP10LE,
- AV_PIX_FMT_GBRP12LE, AV_PIX_FMT_GBRAP12LE,
- AV_PIX_FMT_YUV420P9LE,
- AV_PIX_FMT_YUV422P9LE,
- AV_PIX_FMT_YUV444P9LE,
- AV_PIX_FMT_YUVA420P9LE,
- AV_PIX_FMT_YUVA422P9LE,
- AV_PIX_FMT_YUVA444P9LE,
- AV_PIX_FMT_GBRP9LE,
+ EIGHTBIT_FORMATS,
+ HIGHDEPTH_FORMATS(LE),
+ FLOAT_FORMATS(LE),
AV_PIX_FMT_NONE,
};
static const enum AVPixelFormat in_pixfmts_be[] = {
- AV_PIX_FMT_YUV410P,
- AV_PIX_FMT_YUV411P,
- AV_PIX_FMT_YUV440P,
- AV_PIX_FMT_YUV420P, AV_PIX_FMT_YUVA420P,
- AV_PIX_FMT_YUV422P, AV_PIX_FMT_YUVA422P,
- AV_PIX_FMT_YUVJ420P, AV_PIX_FMT_YUVJ422P,
- AV_PIX_FMT_YUVJ440P, AV_PIX_FMT_YUVJ444P,
- AV_PIX_FMT_YUVJ411P,
- AV_PIX_FMT_YUV444P, AV_PIX_FMT_YUVA444P,
- AV_PIX_FMT_YUV420P16BE, AV_PIX_FMT_YUVA420P16BE,
- AV_PIX_FMT_YUV422P16BE, AV_PIX_FMT_YUVA422P16BE,
- AV_PIX_FMT_YUV444P16BE, AV_PIX_FMT_YUVA444P16BE,
- AV_PIX_FMT_GRAY8, AV_PIX_FMT_GRAY8A,
- AV_PIX_FMT_YA16BE, AV_PIX_FMT_GRAY16BE,
- AV_PIX_FMT_RGB24, AV_PIX_FMT_BGR24,
- AV_PIX_FMT_RGBA, AV_PIX_FMT_BGRA,
- AV_PIX_FMT_ARGB, AV_PIX_FMT_ABGR,
- AV_PIX_FMT_RGB0, AV_PIX_FMT_BGR0,
- AV_PIX_FMT_0RGB, AV_PIX_FMT_0BGR,
- AV_PIX_FMT_RGB48BE, AV_PIX_FMT_BGR48BE,
- AV_PIX_FMT_RGBA64BE, AV_PIX_FMT_BGRA64BE,
- AV_PIX_FMT_GBRP, AV_PIX_FMT_GBRAP,
- AV_PIX_FMT_GBRP16BE, AV_PIX_FMT_GBRAP16BE,
- AV_PIX_FMT_YUV420P10BE,
- AV_PIX_FMT_YUV422P10BE,
- AV_PIX_FMT_YUV444P10BE,
- AV_PIX_FMT_YUV440P10BE,
- AV_PIX_FMT_YUVA420P10BE,
- AV_PIX_FMT_YUVA422P10BE,
- AV_PIX_FMT_YUVA444P10BE,
- AV_PIX_FMT_YUV420P12BE,
- AV_PIX_FMT_YUV422P12BE,
- AV_PIX_FMT_YUV444P12BE,
- AV_PIX_FMT_YUV440P12BE,
- AV_PIX_FMT_GBRP10BE, AV_PIX_FMT_GBRAP10BE,
- AV_PIX_FMT_GBRP12BE, AV_PIX_FMT_GBRAP12BE,
- AV_PIX_FMT_YUV420P9BE,
- AV_PIX_FMT_YUV422P9BE,
- AV_PIX_FMT_YUV444P9BE,
- AV_PIX_FMT_YUVA420P9BE,
- AV_PIX_FMT_YUVA422P9BE,
- AV_PIX_FMT_YUVA444P9BE,
- AV_PIX_FMT_GBRP9BE,
+ EIGHTBIT_FORMATS,
+ HIGHDEPTH_FORMATS(BE),
+ FLOAT_FORMATS(BE),
AV_PIX_FMT_NONE,
};
static const enum AVPixelFormat out8_pixfmts[] = { AV_PIX_FMT_GRAY8, AV_PIX_FMT_NONE };
static const enum AVPixelFormat out14be_pixfmts[] = { AV_PIX_FMT_GRAY14BE, AV_PIX_FMT_NONE };
static const enum AVPixelFormat out16le_pixfmts[] = { AV_PIX_FMT_GRAY16LE, AV_PIX_FMT_NONE };
static const enum AVPixelFormat out16be_pixfmts[] = { AV_PIX_FMT_GRAY16BE, AV_PIX_FMT_NONE };
+ static const enum AVPixelFormat out32le_pixfmts[] = { AV_PIX_FMT_GRAYF32LE, AV_PIX_FMT_NONE };
+ static const enum AVPixelFormat out32be_pixfmts[] = { AV_PIX_FMT_GRAYF32BE, AV_PIX_FMT_NONE };
const enum AVPixelFormat *out_pixfmts, *in_pixfmts;
const AVPixFmtDescriptor *desc;
AVFilterFormats *avff;
int i, ret, depth = 0, be = 0;
- if (!ctx->inputs[0]->in_formats ||
- !ctx->inputs[0]->in_formats->nb_formats) {
+ if (!ctx->inputs[0]->incfg.formats ||
+ !ctx->inputs[0]->incfg.formats->nb_formats) {
return AVERROR(EAGAIN);
}
- avff = ctx->inputs[0]->in_formats;
+ avff = ctx->inputs[0]->incfg.formats;
desc = av_pix_fmt_desc_get(avff->formats[0]);
depth = desc->comp[0].depth;
be = desc->flags & AV_PIX_FMT_FLAG_BE;
} else {
in_pixfmts = in_pixfmts_le;
}
- if (!ctx->inputs[0]->out_formats)
- if ((ret = ff_formats_ref(ff_make_format_list(in_pixfmts), &ctx->inputs[0]->out_formats)) < 0)
+ if (!ctx->inputs[0]->outcfg.formats)
+ if ((ret = ff_formats_ref(ff_make_format_list(in_pixfmts), &ctx->inputs[0]->outcfg.formats)) < 0)
return ret;
for (i = 1; i < avff->nb_formats; i++) {
out_pixfmts = out14le_pixfmts;
else if (be && depth == 14)
out_pixfmts = out14be_pixfmts;
- else if (be)
+ else if (be && depth == 16)
out_pixfmts = out16be_pixfmts;
- else
+ else if (!be && depth == 16)
out_pixfmts = out16le_pixfmts;
+ else if (be && depth == 32)
+ out_pixfmts = out32be_pixfmts;
+ else
+ out_pixfmts = out32le_pixfmts;
for (i = 0; i < ctx->nb_outputs; i++)
- if ((ret = ff_formats_ref(ff_make_format_list(out_pixfmts), &ctx->outputs[i]->in_formats)) < 0)
+ if ((ret = ff_formats_ref(ff_make_format_list(out_pixfmts), &ctx->outputs[i]->incfg.formats)) < 0)
return ret;
return 0;
}
const int idx = s->map[i];
AVFrame *out;
- if (outlink->status_in)
+ if (ff_outlink_get_status(outlink))
continue;
out = ff_get_video_buffer(outlink, outlink->w, outlink->h);
{ NULL }
};
-AVFilter ff_vf_extractplanes = {
+const AVFilter ff_vf_extractplanes = {
.name = "extractplanes",
.description = NULL_IF_CONFIG_SMALL("Extract planes as grayscale frames."),
.priv_size = sizeof(ExtractPlanesContext),
return init(ctx);
}
-AVFilter ff_vf_alphaextract = {
+const AVFilter ff_vf_alphaextract = {
.name = "alphaextract",
.description = NULL_IF_CONFIG_SMALL("Extract an alpha channel as a "
"grayscale image component."),