|
|
|
@ -34,6 +34,7 @@ enum VectorscopeMode { |
|
|
|
|
COLOR2, |
|
|
|
|
COLOR3, |
|
|
|
|
COLOR4, |
|
|
|
|
COLOR5, |
|
|
|
|
MODE_NB |
|
|
|
|
}; |
|
|
|
|
|
|
|
|
@ -68,6 +69,7 @@ static const AVOption vectorscope_options[] = { |
|
|
|
|
{ "color2", 0, 0, AV_OPT_TYPE_CONST, {.i64=COLOR2}, 0, 0, FLAGS, "mode" }, |
|
|
|
|
{ "color3", 0, 0, AV_OPT_TYPE_CONST, {.i64=COLOR3}, 0, 0, FLAGS, "mode" }, |
|
|
|
|
{ "color4", 0, 0, AV_OPT_TYPE_CONST, {.i64=COLOR4}, 0, 0, FLAGS, "mode" }, |
|
|
|
|
{ "color5", 0, 0, AV_OPT_TYPE_CONST, {.i64=COLOR5}, 0, 0, FLAGS, "mode" }, |
|
|
|
|
{ "x", "set color component on X axis", OFFSET(x), AV_OPT_TYPE_INT, {.i64=1}, 0, 2, FLAGS}, |
|
|
|
|
{ "y", "set color component on Y axis", OFFSET(y), AV_OPT_TYPE_INT, {.i64=2}, 0, 2, FLAGS}, |
|
|
|
|
{ "intensity", "set intensity", OFFSET(fintensity), AV_OPT_TYPE_FLOAT, {.dbl=0.004}, 0, 1, FLAGS}, |
|
|
|
@ -354,11 +356,12 @@ static void vectorscope16(VectorscopeContext *s, AVFrame *in, AVFrame *out, int |
|
|
|
|
for (i = 0; i < out->height ; i++) |
|
|
|
|
for (j = 0; j < out->width; j++) |
|
|
|
|
AV_WN16(out->data[k] + i * out->linesize[k] + j * 2, |
|
|
|
|
s->mode == COLOR && k == s->pd ? 0 : s->bg_color[k] * mult); |
|
|
|
|
(s->mode == COLOR || s->mode == COLOR5) && k == s->pd ? 0 : s->bg_color[k] * mult); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
switch (s->mode) { |
|
|
|
|
case COLOR: |
|
|
|
|
case COLOR5: |
|
|
|
|
case GRAY: |
|
|
|
|
if (s->is_yuv) { |
|
|
|
|
for (i = 0; i < h; i++) { |
|
|
|
@ -480,6 +483,16 @@ static void vectorscope16(VectorscopeContext *s, AVFrame *in, AVFrame *out, int |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} else if (s->mode == COLOR5) { |
|
|
|
|
for (i = 0; i < out->height; i++) { |
|
|
|
|
for (j = 0; j < out->width; j++) { |
|
|
|
|
if (!dpd[i * dlinesize + j]) { |
|
|
|
|
dpx[i * dlinesize + j] = j; |
|
|
|
|
dpy[i * dlinesize + j] = i; |
|
|
|
|
dpd[i * dlinesize + j] = mid * M_SQRT2 - hypot(i - mid, j - mid); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
@ -508,9 +521,10 @@ static void vectorscope8(VectorscopeContext *s, AVFrame *in, AVFrame *out, int p |
|
|
|
|
for (k = 0; k < 4 && dst[k]; k++) |
|
|
|
|
for (i = 0; i < out->height ; i++) |
|
|
|
|
memset(dst[k] + i * out->linesize[k], |
|
|
|
|
s->mode == COLOR && k == s->pd ? 0 : s->bg_color[k], out->width); |
|
|
|
|
(s->mode == COLOR || s->mode == COLOR5) && k == s->pd ? 0 : s->bg_color[k], out->width); |
|
|
|
|
|
|
|
|
|
switch (s->mode) { |
|
|
|
|
case COLOR5: |
|
|
|
|
case COLOR: |
|
|
|
|
case GRAY: |
|
|
|
|
if (s->is_yuv) { |
|
|
|
@ -633,6 +647,16 @@ static void vectorscope8(VectorscopeContext *s, AVFrame *in, AVFrame *out, int p |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} else if (s->mode == COLOR5) { |
|
|
|
|
for (i = 0; i < out->height; i++) { |
|
|
|
|
for (j = 0; j < out->width; j++) { |
|
|
|
|
if (!dpd[i * out->linesize[pd] + j]) { |
|
|
|
|
dpx[i * out->linesize[px] + j] = j; |
|
|
|
|
dpy[i * out->linesize[py] + j] = i; |
|
|
|
|
dpd[i * out->linesize[pd] + j] = 128 * M_SQRT2 - hypot(i - 128, j - 128); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|