...
|
...
|
@@ -23,6 +23,7 @@
|
23
|
23
|
* zscale video filter using z.lib library
|
24
|
24
|
*/
|
25
|
25
|
|
|
26
|
+#include <float.h>
|
26
|
27
|
#include <stdio.h>
|
27
|
28
|
#include <string.h>
|
28
|
29
|
|
...
|
...
|
@@ -95,6 +96,7 @@ typedef struct ZScaleContext {
|
95
|
95
|
int range_in;
|
96
|
96
|
int chromal_in;
|
97
|
97
|
char *size_str;
|
|
98
|
+ double nominal_peak_luminance;
|
98
|
99
|
|
99
|
100
|
char *w_expr; ///< width expression string
|
100
|
101
|
char *h_expr; ///< height expression string
|
...
|
...
|
@@ -377,6 +379,12 @@ static int convert_trc(enum AVColorTransferCharacteristic color_trc)
|
377
|
377
|
return ZIMG_TRANSFER_2020_10;
|
378
|
378
|
case AVCOL_TRC_BT2020_12:
|
379
|
379
|
return ZIMG_TRANSFER_2020_12;
|
|
380
|
+ case AVCOL_TRC_SMPTE2084:
|
|
381
|
+ return ZIMG_TRANSFER_ST2084;
|
|
382
|
+ case AVCOL_TRC_ARIB_STD_B67:
|
|
383
|
+ return ZIMG_TRANSFER_ARIB_B67;
|
|
384
|
+ case AVCOL_TRC_IEC61966_2_1:
|
|
385
|
+ return ZIMG_TRANSFER_IEC_61966_2_1;
|
380
|
386
|
}
|
381
|
387
|
return ZIMG_TRANSFER_UNSPECIFIED;
|
382
|
388
|
}
|
...
|
...
|
@@ -394,6 +402,8 @@ static int convert_primaries(enum AVColorPrimaries color_primaries)
|
394
|
394
|
return ZIMG_PRIMARIES_240M;
|
395
|
395
|
case AVCOL_PRI_BT2020:
|
396
|
396
|
return ZIMG_PRIMARIES_2020;
|
|
397
|
+ case AVCOL_PRI_SMPTE432:
|
|
398
|
+ return ZIMG_PRIMARIES_ST432_1;
|
397
|
399
|
}
|
398
|
400
|
return ZIMG_PRIMARIES_UNSPECIFIED;
|
399
|
401
|
}
|
...
|
...
|
@@ -469,6 +479,7 @@ static int filter_frame(AVFilterLink *link, AVFrame *in)
|
469
|
469
|
s->params.cpu_type = ZIMG_CPU_AUTO;
|
470
|
470
|
s->params.resample_filter = s->filter;
|
471
|
471
|
s->params.resample_filter_uv = s->filter;
|
|
472
|
+ s->params.nominal_peak_luminance = s->nominal_peak_luminance;
|
472
|
473
|
|
473
|
474
|
s->src_format.width = in->width;
|
474
|
475
|
s->src_format.height = in->height;
|
...
|
...
|
@@ -700,16 +711,17 @@ static const AVOption zscale_options[] = {
|
700
|
700
|
{ "input", 0, 0, AV_OPT_TYPE_CONST, {.i64 = -1}, 0, 0, FLAGS, "range" },
|
701
|
701
|
{ "limited", 0, 0, AV_OPT_TYPE_CONST, {.i64 = ZIMG_RANGE_LIMITED}, 0, 0, FLAGS, "range" },
|
702
|
702
|
{ "full", 0, 0, AV_OPT_TYPE_CONST, {.i64 = ZIMG_RANGE_FULL}, 0, 0, FLAGS, "range" },
|
703
|
|
- { "primaries", "set color primaries", OFFSET(primaries), AV_OPT_TYPE_INT, {.i64 = -1}, -1, ZIMG_PRIMARIES_2020, FLAGS, "primaries" },
|
704
|
|
- { "p", "set color primaries", OFFSET(primaries), AV_OPT_TYPE_INT, {.i64 = -1}, -1, ZIMG_PRIMARIES_2020, FLAGS, "primaries" },
|
|
703
|
+ { "primaries", "set color primaries", OFFSET(primaries), AV_OPT_TYPE_INT, {.i64 = -1}, -1, ZIMG_PRIMARIES_ST432_1, FLAGS, "primaries" },
|
|
704
|
+ { "p", "set color primaries", OFFSET(primaries), AV_OPT_TYPE_INT, {.i64 = -1}, -1, ZIMG_PRIMARIES_ST432_1, FLAGS, "primaries" },
|
705
|
705
|
{ "input", 0, 0, AV_OPT_TYPE_CONST, {.i64 = -1}, 0, 0, FLAGS, "primaries" },
|
706
|
706
|
{ "709", 0, 0, AV_OPT_TYPE_CONST, {.i64 = ZIMG_PRIMARIES_709}, 0, 0, FLAGS, "primaries" },
|
707
|
707
|
{ "unspecified", 0, 0, AV_OPT_TYPE_CONST, {.i64 = ZIMG_PRIMARIES_UNSPECIFIED}, 0, 0, FLAGS, "primaries" },
|
708
|
708
|
{ "170m", 0, 0, AV_OPT_TYPE_CONST, {.i64 = ZIMG_PRIMARIES_170M}, 0, 0, FLAGS, "primaries" },
|
709
|
709
|
{ "240m", 0, 0, AV_OPT_TYPE_CONST, {.i64 = ZIMG_PRIMARIES_240M}, 0, 0, FLAGS, "primaries" },
|
710
|
710
|
{ "2020", 0, 0, AV_OPT_TYPE_CONST, {.i64 = ZIMG_PRIMARIES_2020}, 0, 0, FLAGS, "primaries" },
|
711
|
|
- { "transfer", "set transfer characteristic", OFFSET(trc), AV_OPT_TYPE_INT, {.i64 = -1}, -1, ZIMG_TRANSFER_2020_12, FLAGS, "transfer" },
|
712
|
|
- { "t", "set transfer characteristic", OFFSET(trc), AV_OPT_TYPE_INT, {.i64 = -1}, -1, ZIMG_TRANSFER_2020_12, FLAGS, "transfer" },
|
|
711
|
+ { "smpte432", 0, 0, AV_OPT_TYPE_CONST, {.i64 = ZIMG_PRIMARIES_ST432_1}, 0, 0, FLAGS, "primaries" },
|
|
712
|
+ { "transfer", "set transfer characteristic", OFFSET(trc), AV_OPT_TYPE_INT, {.i64 = -1}, -1, ZIMG_TRANSFER_ARIB_B67, FLAGS, "transfer" },
|
|
713
|
+ { "t", "set transfer characteristic", OFFSET(trc), AV_OPT_TYPE_INT, {.i64 = -1}, -1, ZIMG_TRANSFER_ARIB_B67, FLAGS, "transfer" },
|
713
|
714
|
{ "input", 0, 0, AV_OPT_TYPE_CONST, {.i64 = -1}, 0, 0, FLAGS, "transfer" },
|
714
|
715
|
{ "709", 0, 0, AV_OPT_TYPE_CONST, {.i64 = ZIMG_TRANSFER_709}, 0, 0, FLAGS, "transfer" },
|
715
|
716
|
{ "unspecified", 0, 0, AV_OPT_TYPE_CONST, {.i64 = ZIMG_TRANSFER_UNSPECIFIED}, 0, 0, FLAGS, "transfer" },
|
...
|
...
|
@@ -717,6 +729,9 @@ static const AVOption zscale_options[] = {
|
717
|
717
|
{ "linear", 0, 0, AV_OPT_TYPE_CONST, {.i64 = ZIMG_TRANSFER_LINEAR}, 0, 0, FLAGS, "transfer" },
|
718
|
718
|
{ "2020_10", 0, 0, AV_OPT_TYPE_CONST, {.i64 = ZIMG_TRANSFER_2020_10}, 0, 0, FLAGS, "transfer" },
|
719
|
719
|
{ "2020_12", 0, 0, AV_OPT_TYPE_CONST, {.i64 = ZIMG_TRANSFER_2020_12}, 0, 0, FLAGS, "transfer" },
|
|
720
|
+ { "smpte2084", 0, 0, AV_OPT_TYPE_CONST, {.i64 = ZIMG_TRANSFER_ST2084}, 0, 0, FLAGS, "transfer" },
|
|
721
|
+ { "iec61966-2-1", 0, 0, AV_OPT_TYPE_CONST, {.i64 = ZIMG_TRANSFER_IEC_61966_2_1},0, 0, FLAGS, "transfer" },
|
|
722
|
+ { "arib-std-b67", 0, 0, AV_OPT_TYPE_CONST, {.i64 = ZIMG_TRANSFER_ARIB_B67}, 0, 0, FLAGS, "transfer" },
|
720
|
723
|
{ "matrix", "set colorspace matrix", OFFSET(colorspace), AV_OPT_TYPE_INT, {.i64 = -1}, -1, ZIMG_MATRIX_2020_CL, FLAGS, "matrix" },
|
721
|
724
|
{ "m", "set colorspace matrix", OFFSET(colorspace), AV_OPT_TYPE_INT, {.i64 = -1}, -1, ZIMG_MATRIX_2020_CL, FLAGS, "matrix" },
|
722
|
725
|
{ "input", 0, 0, AV_OPT_TYPE_CONST, {.i64 = -1}, 0, 0, FLAGS, "matrix" },
|
...
|
...
|
@@ -729,10 +744,10 @@ static const AVOption zscale_options[] = {
|
729
|
729
|
{ "2020_cl", 0, 0, AV_OPT_TYPE_CONST, {.i64 = ZIMG_MATRIX_2020_CL}, 0, 0, FLAGS, "matrix" },
|
730
|
730
|
{ "rangein", "set input color range", OFFSET(range_in), AV_OPT_TYPE_INT, {.i64 = -1}, -1, ZIMG_RANGE_FULL, FLAGS, "range" },
|
731
|
731
|
{ "rin", "set input color range", OFFSET(range_in), AV_OPT_TYPE_INT, {.i64 = -1}, -1, ZIMG_RANGE_FULL, FLAGS, "range" },
|
732
|
|
- { "primariesin", "set input color primaries", OFFSET(primaries_in), AV_OPT_TYPE_INT, {.i64 = -1}, -1, ZIMG_PRIMARIES_2020, FLAGS, "primaries" },
|
733
|
|
- { "pin", "set input color primaries", OFFSET(primaries_in), AV_OPT_TYPE_INT, {.i64 = -1}, -1, ZIMG_PRIMARIES_2020, FLAGS, "primaries" },
|
734
|
|
- { "transferin", "set input transfer characteristic", OFFSET(trc_in), AV_OPT_TYPE_INT, {.i64 = -1}, -1, ZIMG_TRANSFER_2020_12, FLAGS, "transfer" },
|
735
|
|
- { "tin", "set input transfer characteristic", OFFSET(trc_in), AV_OPT_TYPE_INT, {.i64 = -1}, -1, ZIMG_TRANSFER_2020_12, FLAGS, "transfer" },
|
|
732
|
+ { "primariesin", "set input color primaries", OFFSET(primaries_in), AV_OPT_TYPE_INT, {.i64 = -1}, -1, ZIMG_PRIMARIES_ST432_1, FLAGS, "primaries" },
|
|
733
|
+ { "pin", "set input color primaries", OFFSET(primaries_in), AV_OPT_TYPE_INT, {.i64 = -1}, -1, ZIMG_PRIMARIES_ST432_1, FLAGS, "primaries" },
|
|
734
|
+ { "transferin", "set input transfer characteristic", OFFSET(trc_in), AV_OPT_TYPE_INT, {.i64 = -1}, -1, ZIMG_TRANSFER_ARIB_B67, FLAGS, "transfer" },
|
|
735
|
+ { "tin", "set input transfer characteristic", OFFSET(trc_in), AV_OPT_TYPE_INT, {.i64 = -1}, -1, ZIMG_TRANSFER_ARIB_B67, FLAGS, "transfer" },
|
736
|
736
|
{ "matrixin", "set input colorspace matrix", OFFSET(colorspace_in), AV_OPT_TYPE_INT, {.i64 = -1}, -1, ZIMG_MATRIX_2020_CL, FLAGS, "matrix" },
|
737
|
737
|
{ "min", "set input colorspace matrix", OFFSET(colorspace_in), AV_OPT_TYPE_INT, {.i64 = -1}, -1, ZIMG_MATRIX_2020_CL, FLAGS, "matrix" },
|
738
|
738
|
{ "chromal", "set output chroma location", OFFSET(chromal), AV_OPT_TYPE_INT, {.i64 = -1}, -1, ZIMG_CHROMA_BOTTOM, FLAGS, "chroma" },
|
...
|
...
|
@@ -746,6 +761,7 @@ static const AVOption zscale_options[] = {
|
746
|
746
|
{ "bottom", 0, 0, AV_OPT_TYPE_CONST, {.i64 = ZIMG_CHROMA_BOTTOM}, 0, 0, FLAGS, "chroma" },
|
747
|
747
|
{ "chromalin", "set input chroma location", OFFSET(chromal_in), AV_OPT_TYPE_INT, {.i64 = -1}, -1, ZIMG_CHROMA_BOTTOM, FLAGS, "chroma" },
|
748
|
748
|
{ "cin", "set input chroma location", OFFSET(chromal_in), AV_OPT_TYPE_INT, {.i64 = -1}, -1, ZIMG_CHROMA_BOTTOM, FLAGS, "chroma" },
|
|
749
|
+ { "npl", "set nominal peak luminance", OFFSET(nominal_peak_luminance), AV_OPT_TYPE_DOUBLE, {.dbl = NAN}, 0, DBL_MAX, FLAGS },
|
749
|
750
|
{ NULL }
|
750
|
751
|
};
|
751
|
752
|
|