1
0
mirror of https://github.com/FFmpeg/FFmpeg.git synced 2024-12-23 12:43:46 +02:00

avfilter/vf_vectorscope: rename gray mode to tint mode

This commit is contained in:
Paul B Mahol 2019-12-28 13:27:46 +01:00
parent 29b765d657
commit 2736dc0564
8 changed files with 64 additions and 28 deletions

View File

@ -18945,6 +18945,7 @@ Set vectorscope mode.
It accepts the following values: It accepts the following values:
@table @samp @table @samp
@item gray @item gray
@item tint
Gray values are displayed on graph, higher brightness means more pixels have Gray values are displayed on graph, higher brightness means more pixels have
same component color value on location in graph. This is the default mode. same component color value on location in graph. This is the default mode.
@ -19048,6 +19049,11 @@ Set what kind of colorspace to use when drawing graticule.
@item 709 @item 709
@end table @end table
Default is auto. Default is auto.
@item tint0, t0
@item tint1, t1
Set color tint for gray/tint vectorscope mode. By default both options are zero.
This means no tint, and output will remain gray.
@end table @end table
@anchor{vidstabdetect} @anchor{vidstabdetect}

View File

@ -38,7 +38,7 @@ enum GraticuleType {
}; };
enum VectorscopeMode { enum VectorscopeMode {
GRAY, TINT,
COLOR, COLOR,
COLOR2, COLOR2,
COLOR3, COLOR3,
@ -53,6 +53,7 @@ typedef struct VectorscopeContext {
int intensity; int intensity;
float fintensity; float fintensity;
uint16_t bg_color[4]; uint16_t bg_color[4];
float ftint[2];
int planewidth[4]; int planewidth[4];
int planeheight[4]; int planeheight[4];
int hsub, vsub; int hsub, vsub;
@ -67,6 +68,7 @@ typedef struct VectorscopeContext {
float bgopacity; float bgopacity;
float lthreshold; float lthreshold;
float hthreshold; float hthreshold;
int tint[2];
int tmin; int tmin;
int tmax; int tmax;
int flags; int flags;
@ -87,7 +89,8 @@ typedef struct VectorscopeContext {
static const AVOption vectorscope_options[] = { static const AVOption vectorscope_options[] = {
{ "mode", "set vectorscope mode", OFFSET(mode), AV_OPT_TYPE_INT, {.i64=0}, 0, MODE_NB-1, FLAGS, "mode"}, { "mode", "set vectorscope mode", OFFSET(mode), AV_OPT_TYPE_INT, {.i64=0}, 0, MODE_NB-1, FLAGS, "mode"},
{ "m", "set vectorscope mode", OFFSET(mode), AV_OPT_TYPE_INT, {.i64=0}, 0, MODE_NB-1, FLAGS, "mode"}, { "m", "set vectorscope mode", OFFSET(mode), AV_OPT_TYPE_INT, {.i64=0}, 0, MODE_NB-1, FLAGS, "mode"},
{ "gray", 0, 0, AV_OPT_TYPE_CONST, {.i64=GRAY}, 0, 0, FLAGS, "mode" }, { "gray", 0, 0, AV_OPT_TYPE_CONST, {.i64=TINT}, 0, 0, FLAGS, "mode" },
{ "tint", 0, 0, AV_OPT_TYPE_CONST, {.i64=TINT}, 0, 0, FLAGS, "mode" },
{ "color", 0, 0, AV_OPT_TYPE_CONST, {.i64=COLOR}, 0, 0, FLAGS, "mode" }, { "color", 0, 0, AV_OPT_TYPE_CONST, {.i64=COLOR}, 0, 0, FLAGS, "mode" },
{ "color2", 0, 0, AV_OPT_TYPE_CONST, {.i64=COLOR2}, 0, 0, FLAGS, "mode" }, { "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" }, { "color3", 0, 0, AV_OPT_TYPE_CONST, {.i64=COLOR3}, 0, 0, FLAGS, "mode" },
@ -127,6 +130,10 @@ static const AVOption vectorscope_options[] = {
{ "auto", 0, 0, AV_OPT_TYPE_CONST, {.i64=0}, 0, 0, FLAGS, "colorspace" }, { "auto", 0, 0, AV_OPT_TYPE_CONST, {.i64=0}, 0, 0, FLAGS, "colorspace" },
{ "601", 0, 0, AV_OPT_TYPE_CONST, {.i64=1}, 0, 0, FLAGS, "colorspace" }, { "601", 0, 0, AV_OPT_TYPE_CONST, {.i64=1}, 0, 0, FLAGS, "colorspace" },
{ "709", 0, 0, AV_OPT_TYPE_CONST, {.i64=2}, 0, 0, FLAGS, "colorspace" }, { "709", 0, 0, AV_OPT_TYPE_CONST, {.i64=2}, 0, 0, FLAGS, "colorspace" },
{ "tint0", "set 1st tint", OFFSET(ftint[0]), AV_OPT_TYPE_FLOAT, {.dbl=0}, -1, 1, FLAGS},
{ "t0", "set 1st tint", OFFSET(ftint[0]), AV_OPT_TYPE_FLOAT, {.dbl=0}, -1, 1, FLAGS},
{ "tint1", "set 2nd tint", OFFSET(ftint[1]), AV_OPT_TYPE_FLOAT, {.dbl=0}, -1, 1, FLAGS},
{ "t1", "set 2nd tint", OFFSET(ftint[1]), AV_OPT_TYPE_FLOAT, {.dbl=0}, -1, 1, FLAGS},
{ NULL } { NULL }
}; };
@ -442,7 +449,7 @@ static void vectorscope16(VectorscopeContext *s, AVFrame *in, AVFrame *out, int
switch (s->mode) { switch (s->mode) {
case COLOR: case COLOR:
case COLOR5: case COLOR5:
case GRAY: case TINT:
if (s->is_yuv) { if (s->is_yuv) {
for (i = 0; i < h; i++) { for (i = 0; i < h; i++) {
const int iwx = i * slinesizex; const int iwx = i * slinesizex;
@ -581,7 +588,17 @@ static void vectorscope16(VectorscopeContext *s, AVFrame *in, AVFrame *out, int
} }
} }
if (s->mode == COLOR) { if (s->mode == TINT && (s->tint[0] != mid ||
s->tint[1] != mid)) {
for (i = 0; i < out->height; i++) {
for (j = 0; j < out->width; j++) {
if (dpd[i * dlinesize + j]) {
dst[1][i * dlinesize + j] = s->tint[0];
dst[2][i * dlinesize + j] = s->tint[1];
}
}
}
} else if (s->mode == COLOR) {
for (i = 0; i < out->height; i++) { for (i = 0; i < out->height; i++) {
for (j = 0; j < out->width; j++) { for (j = 0; j < out->width; j++) {
if (!dpd[i * dlinesize + j]) { if (!dpd[i * dlinesize + j]) {
@ -636,7 +653,7 @@ static void vectorscope8(VectorscopeContext *s, AVFrame *in, AVFrame *out, int p
switch (s->mode) { switch (s->mode) {
case COLOR5: case COLOR5:
case COLOR: case COLOR:
case GRAY: case TINT:
if (s->is_yuv) { if (s->is_yuv) {
for (i = 0; i < h; i++) { for (i = 0; i < h; i++) {
const int iwx = i * slinesizex; const int iwx = i * slinesizex;
@ -775,7 +792,17 @@ static void vectorscope8(VectorscopeContext *s, AVFrame *in, AVFrame *out, int p
} }
} }
if (s->mode == COLOR) { if (s->mode == TINT && (s->tint[0] != 128 ||
s->tint[1] != 128)) {
for (i = 0; i < out->height; i++) {
for (j = 0; j < out->width; j++) {
if (dpd[i * dlinesize + j]) {
dst[1][i * dlinesize + j] = s->tint[0];
dst[2][i * dlinesize + j] = s->tint[1];
}
}
}
} else if (s->mode == COLOR) {
for (i = 0; i < out->height; i++) { for (i = 0; i < out->height; i++) {
for (j = 0; j < out->width; j++) { for (j = 0; j < out->width; j++) {
if (!dpd[i * out->linesize[pd] + j]) { if (!dpd[i * out->linesize[pd] + j]) {
@ -1483,9 +1510,9 @@ static int config_input(AVFilterLink *inlink)
return AVERROR(EINVAL); return AVERROR(EINVAL);
} }
if (s->mode == GRAY && s->is_yuv) if (s->mode == TINT && s->is_yuv) {
s->pd = 0; s->pd = 0;
else { } else {
if ((s->x == 1 && s->y == 2) || (s->x == 2 && s->y == 1)) if ((s->x == 1 && s->y == 2) || (s->x == 2 && s->y == 1))
s->pd = 0; s->pd = 0;
else if ((s->x == 0 && s->y == 2) || (s->x == 2 && s->y == 0)) else if ((s->x == 0 && s->y == 2) || (s->x == 2 && s->y == 0))
@ -1519,6 +1546,9 @@ static int config_input(AVFilterLink *inlink)
s->bg_color[3] = s->bgopacity * (s->size - 1); s->bg_color[3] = s->bgopacity * (s->size - 1);
s->tint[0] = .5f * (s->ftint[0] + 1.f) * (s->size - 1);
s->tint[1] = .5f * (s->ftint[1] + 1.f) * (s->size - 1);
switch (inlink->format) { switch (inlink->format) {
case AV_PIX_FMT_GBRP12: case AV_PIX_FMT_GBRP12:
case AV_PIX_FMT_GBRP10: case AV_PIX_FMT_GBRP10:
@ -1531,8 +1561,8 @@ static int config_input(AVFilterLink *inlink)
break; break;
default: default:
s->bg_color[0] = 0; s->bg_color[0] = 0;
s->bg_color[1] = s->size / 2 - 1; s->bg_color[1] = s->size / 2;
s->bg_color[2] = s->size / 2 - 1; s->bg_color[2] = s->size / 2;
} }
s->hsub = desc->log2_chroma_w; s->hsub = desc->log2_chroma_w;

View File

@ -3,6 +3,6 @@
#codec_id 0: rawvideo #codec_id 0: rawvideo
#dimensions 0: 256x256 #dimensions 0: 256x256
#sar 0: 1/1 #sar 0: 1/1
0, 0, 0, 1, 196608, 0xf6e3aa30 0, 0, 0, 1, 196608, 0x7c431d1f
0, 1, 1, 1, 196608, 0x5584acf9 0, 1, 1, 1, 196608, 0xb7e82028
0, 2, 2, 1, 196608, 0xa862775d 0, 2, 2, 1, 196608, 0x2feeeb61

View File

@ -3,6 +3,6 @@
#codec_id 0: rawvideo #codec_id 0: rawvideo
#dimensions 0: 256x256 #dimensions 0: 256x256
#sar 0: 1/1 #sar 0: 1/1
0, 0, 0, 1, 196608, 0x5e62fae5 0, 0, 0, 1, 196608, 0xdad38823
0, 1, 1, 1, 196608, 0x4c27fcbf 0, 1, 1, 1, 196608, 0xeb8589bd
0, 2, 2, 1, 196608, 0xb7531088 0, 2, 2, 1, 196608, 0x31a79c93

View File

@ -3,6 +3,6 @@
#codec_id 0: rawvideo #codec_id 0: rawvideo
#dimensions 0: 256x256 #dimensions 0: 256x256
#sar 0: 1/1 #sar 0: 1/1
0, 0, 0, 1, 196608, 0x83df8770 0, 0, 0, 1, 196608, 0x005f14ae
0, 1, 1, 1, 196608, 0xa6a674a7 0, 1, 1, 1, 196608, 0x461301a5
0, 2, 2, 1, 196608, 0x11757143 0, 2, 2, 1, 196608, 0x8bbafd4e

View File

@ -3,6 +3,6 @@
#codec_id 0: rawvideo #codec_id 0: rawvideo
#dimensions 0: 256x256 #dimensions 0: 256x256
#sar 0: 1/1 #sar 0: 1/1
0, 0, 0, 1, 196608, 0x326953c4 0, 0, 0, 1, 196608, 0xaedae0f3
0, 1, 1, 1, 196608, 0x870e1dcc 0, 1, 1, 1, 196608, 0x267baabb
0, 2, 2, 1, 196608, 0x87cb8800 0, 2, 2, 1, 196608, 0x021f141a

View File

@ -3,6 +3,6 @@
#codec_id 0: rawvideo #codec_id 0: rawvideo
#dimensions 0: 256x256 #dimensions 0: 256x256
#sar 0: 1/1 #sar 0: 1/1
0, 0, 0, 1, 196608, 0x79ba71e2 0, 0, 0, 1, 196608, 0xf62bff11
0, 1, 1, 1, 196608, 0x909271e2 0, 1, 1, 1, 196608, 0x2ffffed1
0, 2, 2, 1, 196608, 0x143971e2 0, 2, 2, 1, 196608, 0x8e7efded

View File

@ -3,6 +3,6 @@
#codec_id 0: rawvideo #codec_id 0: rawvideo
#dimensions 0: 256x256 #dimensions 0: 256x256
#sar 0: 1/1 #sar 0: 1/1
0, 0, 0, 1, 196608, 0xa2899af1 0, 0, 0, 1, 196608, 0xd2bfcc40
0, 1, 1, 1, 196608, 0x26409af1 0, 1, 1, 1, 196608, 0x2851cb74
0, 2, 2, 1, 196608, 0xf5209af1 0, 2, 2, 1, 196608, 0x48efcc64