summaryrefslogtreecommitdiff
path: root/libavfilter/vf_vectorscope.c
diff options
context:
space:
mode:
authorPaul B Mahol <onemda@gmail.com>2016-03-06 20:29:23 +0100
committerPaul B Mahol <onemda@gmail.com>2016-03-06 20:29:23 +0100
commit6e19120ea2064e4534544a28e042e0ef6c08cc2b (patch)
treeac30ba99f9f878675224013a7a08745e51e0c4e3 /libavfilter/vf_vectorscope.c
parent02f84215461aa0a58cf7b4ca4acaaa47b112ecce (diff)
downloadffmpeg-6e19120ea2064e4534544a28e042e0ef6c08cc2b.tar.gz
avfilter/vf_vectorscope: add 12bit depth support
Signed-off-by: Paul B Mahol <onemda@gmail.com>
Diffstat (limited to 'libavfilter/vf_vectorscope.c')
-rw-r--r--libavfilter/vf_vectorscope.c45
1 files changed, 42 insertions, 3 deletions
diff --git a/libavfilter/vf_vectorscope.c b/libavfilter/vf_vectorscope.c
index e3d6627ce0..05616f280d 100644
--- a/libavfilter/vf_vectorscope.c
+++ b/libavfilter/vf_vectorscope.c
@@ -62,7 +62,7 @@ typedef struct VectorscopeContext {
int tmax;
int flags;
int cs;
- uint8_t peak[1024][1024];
+ uint8_t peak[4096][4096];
void (*vectorscope)(struct VectorscopeContext *s,
AVFrame *in, AVFrame *out, int pd);
@@ -129,6 +129,11 @@ static const enum AVPixelFormat out_yuv10_pix_fmts[] = {
AV_PIX_FMT_NONE
};
+static const enum AVPixelFormat out_yuv12_pix_fmts[] = {
+ AV_PIX_FMT_YUV444P12,
+ AV_PIX_FMT_NONE
+};
+
static const enum AVPixelFormat out_rgb8_pix_fmts[] = {
AV_PIX_FMT_GBRAP, AV_PIX_FMT_GBRP,
AV_PIX_FMT_NONE
@@ -144,12 +149,19 @@ static const enum AVPixelFormat out_rgb10_pix_fmts[] = {
AV_PIX_FMT_NONE
};
+static const enum AVPixelFormat out_rgb12_pix_fmts[] = {
+ AV_PIX_FMT_GBRP12, AV_PIX_FMT_GBRAP12,
+ AV_PIX_FMT_NONE
+};
+
static const enum AVPixelFormat in1_pix_fmts[] = {
AV_PIX_FMT_YUVA444P, AV_PIX_FMT_YUV444P, AV_PIX_FMT_YUVJ444P,
AV_PIX_FMT_YUV444P9, AV_PIX_FMT_YUV444P10,
AV_PIX_FMT_YUVA444P9, AV_PIX_FMT_YUVA444P10,
+ AV_PIX_FMT_YUV444P12,
AV_PIX_FMT_GBRAP, AV_PIX_FMT_GBRP,
AV_PIX_FMT_GBRP9, AV_PIX_FMT_GBRP10,
+ AV_PIX_FMT_GBRP12, AV_PIX_FMT_GBRAP12,
AV_PIX_FMT_NONE
};
@@ -161,10 +173,12 @@ static const enum AVPixelFormat in2_pix_fmts[] = {
AV_PIX_FMT_YUV440P, AV_PIX_FMT_YUV410P,
AV_PIX_FMT_GBRAP, AV_PIX_FMT_GBRP,
AV_PIX_FMT_GBRP9, AV_PIX_FMT_GBRP10,
+ AV_PIX_FMT_GBRP12, AV_PIX_FMT_GBRAP12,
AV_PIX_FMT_YUV420P9, AV_PIX_FMT_YUV422P9, AV_PIX_FMT_YUV444P9,
AV_PIX_FMT_YUV420P10, AV_PIX_FMT_YUV422P10, AV_PIX_FMT_YUV444P10,
AV_PIX_FMT_YUVA420P9, AV_PIX_FMT_YUVA422P9, AV_PIX_FMT_YUVA444P9,
AV_PIX_FMT_YUVA420P10, AV_PIX_FMT_YUVA422P10, AV_PIX_FMT_YUVA444P10,
+ AV_PIX_FMT_YUV420P12, AV_PIX_FMT_YUV422P12, AV_PIX_FMT_YUV444P12, AV_PIX_FMT_YUV440P12,
AV_PIX_FMT_NONE
};
@@ -209,12 +223,16 @@ static int query_formats(AVFilterContext *ctx)
out_pix_fmts = out_rgb9_pix_fmts;
else if (rgb && depth == 10)
out_pix_fmts = out_rgb10_pix_fmts;
+ else if (rgb && depth == 12)
+ out_pix_fmts = out_rgb12_pix_fmts;
+ else if (depth == 8)
+ out_pix_fmts = out_yuv8_pix_fmts;
else if (depth == 9)
out_pix_fmts = out_yuv9_pix_fmts;
else if (depth == 10)
out_pix_fmts = out_yuv10_pix_fmts;
- else if (depth == 8)
- out_pix_fmts = out_yuv8_pix_fmts;
+ else if (depth == 12)
+ out_pix_fmts = out_yuv12_pix_fmts;
else
return AVERROR(EAGAIN);
if ((ret = ff_formats_ref(ff_make_format_list(out_pix_fmts), &ctx->outputs[0]->in_formats)) < 0)
@@ -782,6 +800,26 @@ const static uint16_t positions[][14][3] = {
{ 28*4, 212*4, 120*4 }, { 51*4, 109*4, 212*4 }, { 63*4, 193*4, 204*4 },
{ 133*4, 63*4, 52*4 }, { 145*4, 147*4, 44*4 }, { 168*4, 44*4, 136*4 },
{ 940, 512, 512 }, { 64, 512, 512 } },
+ { { 210*8, 16*8, 146*8 }, { 170*8, 166*8, 16*8 }, { 145*8, 54*8, 34*8 },
+ { 106*8, 202*8, 222*8 }, { 81*8, 90*8, 240*8 }, { 41*8, 240*8, 110*8 },
+ { 162*8, 44*8, 142*8 }, { 131*8, 156*8, 44*8 }, { 112*8, 72*8, 58*8 },
+ { 84*8, 184*8, 198*8 }, { 65*8, 100*8, 212*8 }, { 35*8, 212*8, 114*8 },
+ { 1880, 1024, 1024 }, { 128, 1024, 1024 } },
+ { { 63*8, 102*8, 240*8 }, { 32*8, 240*8, 118*8 }, { 188*8, 154*8, 16*8 },
+ { 219*8, 16*8, 138*8 }, { 173*8, 42*8, 26*8 }, { 78*8, 214*8, 230*8 },
+ { 28*8, 212*8, 120*8 }, { 51*8, 109*8, 212*8 }, { 63*8, 193*8, 204*8 },
+ { 133*8, 63*8, 52*8 }, { 145*8, 147*8, 44*8 }, { 168*8, 44*8, 136*8 },
+ { 1880, 1024, 1024 }, { 128, 1024, 1024 } },
+ { { 210*16, 16*16, 146*16 }, { 170*16, 166*16, 16*16 }, { 145*16, 54*16, 34*16 },
+ { 106*16, 202*16, 222*16 }, { 81*16, 90*16, 240*16 }, { 41*16, 240*16, 110*16 },
+ { 162*16, 44*16, 142*16 }, { 131*16, 156*16, 44*16 }, { 112*16, 72*16, 58*16 },
+ { 84*16, 184*16, 198*16 }, { 65*16, 100*16, 212*16 }, { 35*16, 212*16, 114*16 },
+ { 3760, 2048, 2048 }, { 256, 2048, 2048 } },
+ { { 63*16, 102*16, 240*16 }, { 32*16, 240*16, 118*16 }, { 188*16, 154*16, 16*16 },
+ { 219*16, 16*16, 138*16 }, { 173*16, 42*16, 26*16 }, { 78*16, 214*16, 230*16 },
+ { 28*16, 212*16, 120*16 }, { 51*16, 109*16, 212*16 }, { 63*16, 193*16, 204*16 },
+ { 133*16, 63*16, 52*16 }, { 145*16, 147*16, 44*16 }, { 168*16, 44*16, 136*16 },
+ { 3760, 2048, 2048 }, { 256, 2048, 2048 } },
};
static void draw_dots(uint8_t *dst, int L, int v, float o)
@@ -1081,6 +1119,7 @@ static int config_input(AVFilterLink *inlink)
s->bg_color[3] = s->bgopacity * (s->size - 1);
switch (inlink->format) {
+ case AV_PIX_FMT_GBRP12:
case AV_PIX_FMT_GBRP10:
case AV_PIX_FMT_GBRP9:
case AV_PIX_FMT_GBRAP: