summaryrefslogtreecommitdiff
path: root/libavfilter/vf_colorchannelmixer.c
diff options
context:
space:
mode:
authorPaul B Mahol <onemda@gmail.com>2022-03-02 16:59:18 +0100
committerPaul B Mahol <onemda@gmail.com>2022-03-03 09:57:53 +0100
commit59520f068da89006d527f044a6560235260bcc6c (patch)
treea8dc2d779eabf5c1bb2f6358f551f4b9d4757bd1 /libavfilter/vf_colorchannelmixer.c
parent835446a8e10bf402a2731bbf5db7c282fff8c4f8 (diff)
avfilter/vf_colorchannelmixer: add float formats support
Diffstat (limited to 'libavfilter/vf_colorchannelmixer.c')
-rw-r--r--libavfilter/vf_colorchannelmixer.c33
1 files changed, 33 insertions, 0 deletions
diff --git a/libavfilter/vf_colorchannelmixer.c b/libavfilter/vf_colorchannelmixer.c
index b32e0a9d0e..88dd7451dc 100644
--- a/libavfilter/vf_colorchannelmixer.c
+++ b/libavfilter/vf_colorchannelmixer.c
@@ -77,6 +77,10 @@ static void preservel(float *r, float *g, float *b, float lin, float lout, float
#define DEPTH 16
#include "colorchannelmixer_template.c"
+#undef DEPTH
+#define DEPTH 32
+#include "colorchannelmixer_template.c"
+
#define OFFSET(x) offsetof(ColorChannelMixerContext, x)
#define FLAGS AV_OPT_FLAG_FILTERING_PARAM|AV_OPT_FLAG_VIDEO_PARAM|AV_OPT_FLAG_RUNTIME_PARAM
@@ -125,6 +129,7 @@ static const enum AVPixelFormat pix_fmts[] = {
AV_PIX_FMT_GBRP12, AV_PIX_FMT_GBRAP12,
AV_PIX_FMT_GBRP14,
AV_PIX_FMT_GBRP16, AV_PIX_FMT_GBRAP16,
+ AV_PIX_FMT_GBRPF32, AV_PIX_FMT_GBRAPF32,
AV_PIX_FMT_NONE
};
@@ -278,6 +283,26 @@ static int filter_slice_rgb0_pl(AVFilterContext *ctx, void *arg, int jobnr, int
return filter_slice_rgba_packed_8(ctx, arg, jobnr, nb_jobs, -1, 4, 1, 8);
}
+static int filter_slice_gbrp32(AVFilterContext *ctx, void *arg, int jobnr, int nb_jobs)
+{
+ return filter_slice_rgba_planar_32(ctx, arg, jobnr, nb_jobs, 0, 1, 0);
+}
+
+static int filter_slice_gbrap32(AVFilterContext *ctx, void *arg, int jobnr, int nb_jobs)
+{
+ return filter_slice_rgba_planar_32(ctx, arg, jobnr, nb_jobs, 1, 1, 0);
+}
+
+static int filter_slice_gbrp32_pl(AVFilterContext *ctx, void *arg, int jobnr, int nb_jobs)
+{
+ return filter_slice_rgba_planar_32(ctx, arg, jobnr, nb_jobs, 0, 1, 1);
+}
+
+static int filter_slice_gbrap32_pl(AVFilterContext *ctx, void *arg, int jobnr, int nb_jobs)
+{
+ return filter_slice_rgba_planar_32(ctx, arg, jobnr, nb_jobs, 1, 1, 1);
+}
+
static int config_output(AVFilterLink *outlink)
{
AVFilterContext *ctx = outlink->src;
@@ -391,6 +416,14 @@ static int config_output(AVFilterLink *outlink)
s->filter_slice[0] = filter_slice_gbrap16;
s->filter_slice[1] = filter_slice_gbrap16_pl;
break;
+ case AV_PIX_FMT_GBRPF32:
+ s->filter_slice[0] = filter_slice_gbrp32;
+ s->filter_slice[1] = filter_slice_gbrp32_pl;
+ break;
+ case AV_PIX_FMT_GBRAPF32:
+ s->filter_slice[0] = filter_slice_gbrap32;
+ s->filter_slice[1] = filter_slice_gbrap32_pl;
+ break;
}
return 0;