avfilter/vf_vectorscope: make it possible to override colorspace

Signed-off-by: Paul B Mahol <onemda@gmail.com>
pull/187/head
Paul B Mahol 9 years ago
parent a61cd42c8d
commit 4a7c705fde
  1. 9
      doc/filters.texi
  2. 26
      libavfilter/vf_vectorscope.c

@ -12656,6 +12656,15 @@ Values higher than this value will be ignored. Default is 1.
Note this value is multiplied with actual max possible value one pixel component Note this value is multiplied with actual max possible value one pixel component
can have. So for 8-bit input and high threshold value of 0.9 actual threshold can have. So for 8-bit input and high threshold value of 0.9 actual threshold
is 0.9 * 255 = 230. is 0.9 * 255 = 230.
@item colorspace, c
Set what kind of colorspace to use when drawing graticule.
@table @samp
@item auto
@item 601
@item 709
@end table
Default is auto.
@end table @end table
@anchor{vidstabdetect} @anchor{vidstabdetect}

@ -62,6 +62,7 @@ typedef struct VectorscopeContext {
int tmin; int tmin;
int tmax; int tmax;
int flags; int flags;
int colorspace;
int cs; int cs;
uint8_t peak[4096][4096]; uint8_t peak[4096][4096];
@ -111,6 +112,11 @@ static const AVOption vectorscope_options[] = {
{ "l", "set low threshold", OFFSET(lthreshold), AV_OPT_TYPE_FLOAT, {.dbl=0}, 0, 1, FLAGS}, { "l", "set low threshold", OFFSET(lthreshold), AV_OPT_TYPE_FLOAT, {.dbl=0}, 0, 1, FLAGS},
{ "hthreshold", "set high threshold", OFFSET(hthreshold), AV_OPT_TYPE_FLOAT, {.dbl=1}, 0, 1, FLAGS}, { "hthreshold", "set high threshold", OFFSET(hthreshold), AV_OPT_TYPE_FLOAT, {.dbl=1}, 0, 1, FLAGS},
{ "h", "set high threshold", OFFSET(hthreshold), AV_OPT_TYPE_FLOAT, {.dbl=1}, 0, 1, FLAGS}, { "h", "set high threshold", OFFSET(hthreshold), AV_OPT_TYPE_FLOAT, {.dbl=1}, 0, 1, FLAGS},
{ "colorspace", "set colorspace", OFFSET(colorspace), AV_OPT_TYPE_INT, {.i64=0}, 0, 2, FLAGS, "colorspace"},
{ "c", "set colorspace", OFFSET(colorspace), AV_OPT_TYPE_INT, {.i64=0}, 0, 2, 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" },
{ "709", 0, 0, AV_OPT_TYPE_CONST, {.i64=2}, 0, 0, FLAGS, "colorspace" },
{ NULL } { NULL }
}; };
@ -1190,14 +1196,18 @@ static int filter_frame(AVFilterLink *inlink, AVFrame *in)
AVFilterLink *outlink = ctx->outputs[0]; AVFilterLink *outlink = ctx->outputs[0];
AVFrame *out; AVFrame *out;
switch (av_frame_get_colorspace(in)) { if (s->colorspace) {
case AVCOL_SPC_SMPTE170M: s->cs = (s->depth - 8) * 2 + s->colorspace - 1;
case AVCOL_SPC_BT470BG: } else {
s->cs = (s->depth - 8) * 2 + 0; switch (av_frame_get_colorspace(in)) {
break; case AVCOL_SPC_SMPTE170M:
case AVCOL_SPC_BT709: case AVCOL_SPC_BT470BG:
default: s->cs = (s->depth - 8) * 2 + 0;
s->cs = (s->depth - 8) * 2 + 1; break;
case AVCOL_SPC_BT709:
default:
s->cs = (s->depth - 8) * 2 + 1;
}
} }
out = ff_get_video_buffer(outlink, outlink->w, outlink->h); out = ff_get_video_buffer(outlink, outlink->w, outlink->h);

Loading…
Cancel
Save