...
|
...
|
@@ -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
|
|