Browse code

avfilter/vf_scale: add in/out color range option

Signed-off-by: Michael Niedermayer <michaelni@gmx.at>

Michael Niedermayer authored on 2013/07/21 05:12:42
Showing 2 changed files
... ...
@@ -31,7 +31,7 @@
31 31
 
32 32
 #define LIBAVFILTER_VERSION_MAJOR  3
33 33
 #define LIBAVFILTER_VERSION_MINOR  81
34
-#define LIBAVFILTER_VERSION_MICRO 101
34
+#define LIBAVFILTER_VERSION_MICRO 102
35 35
 
36 36
 #define LIBAVFILTER_VERSION_INT AV_VERSION_INT(LIBAVFILTER_VERSION_MAJOR, \
37 37
                                                LIBAVFILTER_VERSION_MINOR, \
... ...
@@ -93,6 +93,9 @@ typedef struct {
93 93
 
94 94
     char *in_color_matrix;
95 95
     char *out_color_matrix;
96
+
97
+    int in_range;
98
+    int out_range;
96 99
 } ScaleContext;
97 100
 
98 101
 static av_cold int init(AVFilterContext *ctx)
... ...
@@ -432,6 +435,11 @@ static int filter_frame(AVFilterLink *link, AVFrame *in)
432 432
         if (scale->out_color_matrix)
433 433
             table     = parse_yuv_type(scale->out_color_matrix, AVCOL_SPC_UNSPECIFIED);
434 434
 
435
+        if (scale-> in_range != AVCOL_RANGE_UNSPECIFIED)
436
+            in_full  = (scale-> in_range == AVCOL_RANGE_JPEG);
437
+        if (scale->out_range != AVCOL_RANGE_UNSPECIFIED)
438
+            out_full = (scale->out_range == AVCOL_RANGE_JPEG);
439
+
435 440
         sws_setColorspaceDetails(scale->sws, inv_table, in_full,
436 441
                                  table, out_full,
437 442
                                  brightness, contrast, saturation);
... ...
@@ -475,6 +483,14 @@ static const AVOption scale_options[] = {
475 475
     { "s",      "set video size",          OFFSET(size_str), AV_OPT_TYPE_STRING, {.str = NULL}, 0, FLAGS },
476 476
     {  "in_color_matrix", "set input YCbCr type",   OFFSET(in_color_matrix),  AV_OPT_TYPE_STRING, { .str = NULL }, .flags = FLAGS },
477 477
     { "out_color_matrix", "set output YCbCr type",  OFFSET(out_color_matrix), AV_OPT_TYPE_STRING, { .str = NULL }, .flags = FLAGS },
478
+    {  "in_range", "set input color range",  OFFSET( in_range), AV_OPT_TYPE_INT, {.i64 = AVCOL_RANGE_UNSPECIFIED }, 0, 2, FLAGS, "range" },
479
+    { "out_range", "set output color range", OFFSET(out_range), AV_OPT_TYPE_INT, {.i64 = AVCOL_RANGE_UNSPECIFIED }, 0, 2, FLAGS, "range" },
480
+    { "auto",   NULL, 0, AV_OPT_TYPE_CONST, {.i64 = AVCOL_RANGE_UNSPECIFIED }, 0, 0, FLAGS, "range" },
481
+    { "full",   NULL, 0, AV_OPT_TYPE_CONST, {.i64 = AVCOL_RANGE_JPEG}, 0, 0, FLAGS, "range" },
482
+    { "jpeg",   NULL, 0, AV_OPT_TYPE_CONST, {.i64 = AVCOL_RANGE_JPEG}, 0, 0, FLAGS, "range" },
483
+    { "mpeg",   NULL, 0, AV_OPT_TYPE_CONST, {.i64 = AVCOL_RANGE_MPEG}, 0, 0, FLAGS, "range" },
484
+    { "tv",     NULL, 0, AV_OPT_TYPE_CONST, {.i64 = AVCOL_RANGE_JPEG}, 0, 0, FLAGS, "range" },
485
+    { "pc",     NULL, 0, AV_OPT_TYPE_CONST, {.i64 = AVCOL_RANGE_MPEG}, 0, 0, FLAGS, "range" },
478 486
     { NULL },
479 487
 };
480 488