ffmpeg | branch: master | Paul B Mahol <one...@gmail.com> | Sun Mar 13 00:17:29 
2016 +0100| [4a7c705fde1a25cc3dd4ffcb56e3b4acf12dea41] | committer: Paul B Mahol

avfilter/vf_vectorscope: make it possible to override colorspace

Signed-off-by: Paul B Mahol <one...@gmail.com>

> http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=4a7c705fde1a25cc3dd4ffcb56e3b4acf12dea41
---

 doc/filters.texi             |    9 +++++++++
 libavfilter/vf_vectorscope.c |   26 ++++++++++++++++++--------
 2 files changed, 27 insertions(+), 8 deletions(-)

diff --git a/doc/filters.texi b/doc/filters.texi
index d5d619e..1f86c04 100644
--- a/doc/filters.texi
+++ b/doc/filters.texi
@@ -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
 can have. So for 8-bit input and high threshold value of 0.9 actual threshold
 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
 
 @anchor{vidstabdetect}
diff --git a/libavfilter/vf_vectorscope.c b/libavfilter/vf_vectorscope.c
index 2696a12..da087ab 100644
--- a/libavfilter/vf_vectorscope.c
+++ b/libavfilter/vf_vectorscope.c
@@ -62,6 +62,7 @@ typedef struct VectorscopeContext {
     int tmin;
     int tmax;
     int flags;
+    int colorspace;
     int cs;
     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},
     { "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},
+    { "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 }
 };
 
@@ -1190,14 +1196,18 @@ static int filter_frame(AVFilterLink *inlink, AVFrame 
*in)
     AVFilterLink *outlink = ctx->outputs[0];
     AVFrame *out;
 
-    switch (av_frame_get_colorspace(in)) {
-    case AVCOL_SPC_SMPTE170M:
-    case AVCOL_SPC_BT470BG:
-        s->cs = (s->depth - 8) * 2 + 0;
-        break;
-    case AVCOL_SPC_BT709:
-    default:
-        s->cs = (s->depth - 8) * 2 + 1;
+    if (s->colorspace) {
+        s->cs = (s->depth - 8) * 2 + s->colorspace - 1;
+    } else {
+        switch (av_frame_get_colorspace(in)) {
+        case AVCOL_SPC_SMPTE170M:
+        case AVCOL_SPC_BT470BG:
+            s->cs = (s->depth - 8) * 2 + 0;
+            break;
+        case AVCOL_SPC_BT709:
+        default:
+            s->cs = (s->depth - 8) * 2 + 1;
+        }
     }
 
     out = ff_get_video_buffer(outlink, outlink->w, outlink->h);

_______________________________________________
ffmpeg-cvslog mailing list
ffmpeg-cvslog@ffmpeg.org
http://ffmpeg.org/mailman/listinfo/ffmpeg-cvslog

Reply via email to