[FFmpeg-devel] [PATCH] vf_zscale: Add more supported input properties
Vittorio Giovara
vittorio.giovara at gmail.com
Wed Nov 15 02:56:53 EET 2017
---
libavfilter/vf_zscale.c | 26 ++++++++++++++++++++++++--
libavformat/mxfdec.c | 20 ++++++++++++++++++++
2 files changed, 44 insertions(+), 2 deletions(-)
diff --git a/libavfilter/vf_zscale.c b/libavfilter/vf_zscale.c
index 09fd842fe5..7d048da1ef 100644
--- a/libavfilter/vf_zscale.c
+++ b/libavfilter/vf_zscale.c
@@ -353,10 +353,10 @@ static int convert_matrix(enum AVColorSpace colorspace)
return ZIMG_MATRIX_709;
case AVCOL_SPC_UNSPECIFIED:
return ZIMG_MATRIX_UNSPECIFIED;
- case AVCOL_SPC_BT470BG:
- return ZIMG_MATRIX_470BG;
case AVCOL_SPC_SMPTE170M:
return ZIMG_MATRIX_170M;
+ case AVCOL_SPC_SMPTE240M:
+ return ZIMG_MATRIX_240M;
case AVCOL_SPC_YCGCO:
return ZIMG_MATRIX_YCGCO;
case AVCOL_SPC_BT2020_NCL:
@@ -374,10 +374,22 @@ static int convert_trc(enum AVColorTransferCharacteristic color_trc)
return ZIMG_TRANSFER_UNSPECIFIED;
case AVCOL_TRC_BT709:
return ZIMG_TRANSFER_709;
+ case AVCOL_TRC_GAMMA22:
+ return ZIMG_TRANSFER_470_M;
+ case AVCOL_TRC_GAMMA28:
+ return ZIMG_TRANSFER_470_BG;
case AVCOL_TRC_SMPTE170M:
return ZIMG_TRANSFER_601;
+ case AVCOL_TRC_SMPTE240M:
+ return ZIMG_TRANSFER_240M;
case AVCOL_TRC_LINEAR:
return ZIMG_TRANSFER_LINEAR;
+ case AVCOL_TRC_LOG:
+ return ZIMG_TRANSFER_LOG_100;
+ case AVCOL_TRC_LOG_SQRT:
+ return ZIMG_TRANSFER_LOG_316;
+ case AVCOL_TRC_IEC61966_2_4:
+ return ZIMG_TRANSFER_IEC_61966_2_4;
case AVCOL_TRC_BT2020_10:
return ZIMG_TRANSFER_2020_10;
case AVCOL_TRC_BT2020_12:
@@ -399,6 +411,10 @@ static int convert_primaries(enum AVColorPrimaries color_primaries)
return ZIMG_PRIMARIES_UNSPECIFIED;
case AVCOL_PRI_BT709:
return ZIMG_PRIMARIES_709;
+ case AVCOL_PRI_BT470M:
+ return ZIMG_PRIMARIES_470_M;
+ case AVCOL_PRI_BT470BG:
+ return ZIMG_PRIMARIES_470_BG;
case AVCOL_PRI_SMPTE170M:
return ZIMG_PRIMARIES_170M;
case AVCOL_PRI_SMPTE240M:
@@ -745,6 +761,8 @@ static const AVOption zscale_options[] = {
{ "2020", 0, 0, AV_OPT_TYPE_CONST, {.i64 = ZIMG_PRIMARIES_2020}, 0, 0, FLAGS, "primaries" },
{ "unknown", 0, 0, AV_OPT_TYPE_CONST, {.i64 = ZIMG_PRIMARIES_UNSPECIFIED}, 0, 0, FLAGS, "primaries" },
{ "bt709", 0, 0, AV_OPT_TYPE_CONST, {.i64 = ZIMG_PRIMARIES_709}, 0, 0, FLAGS, "primaries" },
+ { "bt470m", 0, 0, AV_OPT_TYPE_CONST, {.i64 = ZIMG_PRIMARIES_470_M}, 0, 0, FLAGS, "primaries" },
+ { "bt470bg", 0, 0, AV_OPT_TYPE_CONST, {.i64 = ZIMG_PRIMARIES_470_BG}, 0, 0, FLAGS, "primaries" },
{ "smpte170m", 0, 0, AV_OPT_TYPE_CONST, {.i64 = ZIMG_PRIMARIES_170M}, 0, 0, FLAGS, "primaries" },
{ "smpte240m", 0, 0, AV_OPT_TYPE_CONST, {.i64 = ZIMG_PRIMARIES_240M}, 0, 0, FLAGS, "primaries" },
{ "bt2020", 0, 0, AV_OPT_TYPE_CONST, {.i64 = ZIMG_PRIMARIES_2020}, 0, 0, FLAGS, "primaries" },
@@ -756,9 +774,13 @@ static const AVOption zscale_options[] = {
{ "unspecified", 0, 0, AV_OPT_TYPE_CONST, {.i64 = ZIMG_TRANSFER_UNSPECIFIED}, 0, 0, FLAGS, "transfer" },
{ "601", 0, 0, AV_OPT_TYPE_CONST, {.i64 = ZIMG_TRANSFER_601}, 0, 0, FLAGS, "transfer" },
{ "linear", 0, 0, AV_OPT_TYPE_CONST, {.i64 = ZIMG_TRANSFER_LINEAR}, 0, 0, FLAGS, "transfer" },
+ { "log100", 0, 0, AV_OPT_TYPE_CONST, {.i64 = ZIMG_TRANSFER_LOG_100}, 0, 0, FLAGS, "transfer" },
+ { "log316", 0, 0, AV_OPT_TYPE_CONST, {.i64 = ZIMG_TRANSFER_LOG_316}, 0, 0, FLAGS, "transfer" },
{ "2020_10", 0, 0, AV_OPT_TYPE_CONST, {.i64 = ZIMG_TRANSFER_2020_10}, 0, 0, FLAGS, "transfer" },
{ "2020_12", 0, 0, AV_OPT_TYPE_CONST, {.i64 = ZIMG_TRANSFER_2020_12}, 0, 0, FLAGS, "transfer" },
{ "unknown", 0, 0, AV_OPT_TYPE_CONST, {.i64 = ZIMG_TRANSFER_UNSPECIFIED}, 0, 0, FLAGS, "transfer" },
+ { "bt470m", 0, 0, AV_OPT_TYPE_CONST, {.i64 = ZIMG_TRANSFER_470_M}, 0, 0, FLAGS, "transfer" },
+ { "bt470bg", 0, 0, AV_OPT_TYPE_CONST, {.i64 = ZIMG_TRANSFER_470_BG}, 0, 0, FLAGS, "transfer" },
{ "smpte170m", 0, 0, AV_OPT_TYPE_CONST, {.i64 = ZIMG_TRANSFER_601}, 0, 0, FLAGS, "transfer" },
{ "bt709", 0, 0, AV_OPT_TYPE_CONST, {.i64 = ZIMG_TRANSFER_709}, 0, 0, FLAGS, "transfer" },
{ "linear", 0, 0, AV_OPT_TYPE_CONST, {.i64 = ZIMG_TRANSFER_LINEAR}, 0, 0, FLAGS, "transfer" },
diff --git a/libavformat/mxfdec.c b/libavformat/mxfdec.c
index 118e3e40b4..90a7d2ab27 100644
--- a/libavformat/mxfdec.c
+++ b/libavformat/mxfdec.c
@@ -192,6 +192,10 @@ typedef struct MXFDescriptor {
uint8_t *extradata;
int extradata_size;
enum AVPixelFormat pix_fmt;
+ int coeffcients;
+ int primaries;
+ int transfer;
+ int range;
} MXFDescriptor;
typedef struct MXFIndexTableSegment {
@@ -1008,6 +1012,15 @@ static int mxf_read_generic_descriptor(void *arg, AVIOContext *pb, int tag, int
break;
case 0x3202:
descriptor->height = avio_rb32(pb);
+ break;
+ case 0x3210:
+ avio_read(pb, descriptor->essence_codec_ul, 16);
+
+ for (int i = 0; i < 16; i++) {
+ fprintf(stderr, "0x%02X ", descriptor->essence_codec_ul[i]);
+ }
+ fprintf(stderr, "\n");
+
break;
case 0x320C:
descriptor->frame_layout = avio_r8(pb);
@@ -2111,6 +2124,12 @@ static int mxf_parse_structural_metadata(MXFContext *mxf)
st->codecpar->codec_id = container_ul->id;
st->codecpar->width = descriptor->width;
st->codecpar->height = descriptor->height; /* Field height, not frame height */
+
+/* int coeffcients;
+ int primaries;
+ int transfer;
+ int range;
+*/
switch (descriptor->frame_layout) {
case FullFrame:
st->codecpar->field_order = AV_FIELD_PROGRESSIVE;
@@ -2395,6 +2414,7 @@ static const MXFMetadataReadTableEntry mxf_metadata_read_table[] = {
{ { 0x06,0x0e,0x2b,0x34,0x02,0x53,0x01,0x01,0x0d,0x01,0x01,0x01,0x01,0x01,0x51,0x00 }, mxf_read_generic_descriptor, sizeof(MXFDescriptor), Descriptor }, /* MPEG2VideoDescriptor */
{ { 0x06,0x0e,0x2b,0x34,0x02,0x53,0x01,0x01,0x0d,0x01,0x01,0x01,0x01,0x01,0x5c,0x00 }, mxf_read_generic_descriptor, sizeof(MXFDescriptor), Descriptor }, /* VANC/VBI - SMPTE 436M */
{ { 0x06,0x0e,0x2b,0x34,0x02,0x53,0x01,0x01,0x0d,0x01,0x01,0x01,0x01,0x01,0x5e,0x00 }, mxf_read_generic_descriptor, sizeof(MXFDescriptor), Descriptor }, /* MPEG2AudioDescriptor */
+ { { 0x06,0x0E,0x2B,0x34,0x01,0x01,0x01,0x0E,0x0E,0x20,0x04,0x01,0x05,0x03,0x01,0x01 }, mxf_read_generic_descriptor, sizeof(MXFDescriptor), Descriptor }, /* */
{ { 0x06,0x0e,0x2b,0x34,0x02,0x53,0x01,0x01,0x0d,0x01,0x01,0x01,0x01,0x01,0x3A,0x00 }, mxf_read_track, sizeof(MXFTrack), Track }, /* Static Track */
{ { 0x06,0x0e,0x2b,0x34,0x02,0x53,0x01,0x01,0x0d,0x01,0x01,0x01,0x01,0x01,0x3B,0x00 }, mxf_read_track, sizeof(MXFTrack), Track }, /* Generic Track */
{ { 0x06,0x0e,0x2b,0x34,0x02,0x53,0x01,0x01,0x0d,0x01,0x01,0x01,0x01,0x01,0x14,0x00 }, mxf_read_timecode_component, sizeof(MXFTimecodeComponent), TimecodeComponent },
--
2.14.2
More information about the ffmpeg-devel
mailing list