X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=libavfilter%2Fvf_extractplanes.c;h=cede3d669ee4144306b138a310a573b8694e6354;hb=a859e57424ca0a00d17bdc034c52005c18184961;hp=739c2420cb61463b62fd5ecbdfd807af76bdb1bb;hpb=f60fdbc96074a884eaa36d44946415203d3b2b79;p=ffmpeg diff --git a/libavfilter/vf_extractplanes.c b/libavfilter/vf_extractplanes.c index 739c2420cb6..cede3d669ee 100644 --- a/libavfilter/vf_extractplanes.c +++ b/libavfilter/vf_extractplanes.c @@ -115,16 +115,22 @@ AVFILTER_DEFINE_CLASS(extractplanes); 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[] = { EIGHTBIT_FORMATS, HIGHDEPTH_FORMATS(LE), + FLOAT_FORMATS(LE), AV_PIX_FMT_NONE, }; static const enum AVPixelFormat in_pixfmts_be[] = { 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 }; @@ -138,17 +144,19 @@ static int query_formats(AVFilterContext *ctx) 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; @@ -157,8 +165,8 @@ static int query_formats(AVFilterContext *ctx) } 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++) { @@ -187,13 +195,17 @@ static int query_formats(AVFilterContext *ctx) 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; } @@ -367,7 +379,7 @@ static const AVFilterPad extractplanes_inputs[] = { { 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), @@ -391,7 +403,7 @@ static av_cold int init_alphaextract(AVFilterContext *ctx) 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."),