amldemux: CB2 qtdemux remove support dolby vision unknown Compatibility ID [1/1]
PD#SWPL-135907
Problem:
qtdemux remove support dolby vision unknown compatibility ID
Solution:
00024-qtdemux-remove-support-dolby-vision-unknown-Compatibility-ID.patch
Verify:
Yocto
Signed-off-by: zengliang.li <zengliang.li@amlogic.com>
Change-Id: I3d7b837fd94b59c706e2c4d9e8096c12e07d514b
diff --git a/aml-qtdemux/fourcc.h b/aml-qtdemux/fourcc.h
index 5be6921..7b837b3 100644
--- a/aml-qtdemux/fourcc.h
+++ b/aml-qtdemux/fourcc.h
@@ -136,6 +136,8 @@
#define FOURCC_dvh1 GST_MAKE_FOURCC('d','v','h','1')
#define FOURCC_dvhe GST_MAKE_FOURCC('d','v','h','e')
#define FOURCC_dvcC GST_MAKE_FOURCC('d','v','c','C')
+#define FOURCC_dvvC GST_MAKE_FOURCC('d','v','v','C')
+#define FOURCC_dvwC GST_MAKE_FOURCC('d','v','w','C')
#define FOURCC_edts GST_MAKE_FOURCC('e','d','t','s')
#define FOURCC_elst GST_MAKE_FOURCC('e','l','s','t')
#define FOURCC_enda GST_MAKE_FOURCC('e','n','d','a')
diff --git a/aml-qtdemux/qtdemux.c b/aml-qtdemux/qtdemux.c
index 815792a..2c5dce5 100644
--- a/aml-qtdemux/qtdemux.c
+++ b/aml-qtdemux/qtdemux.c
@@ -8272,6 +8272,56 @@
qtdemux_parse_container (qtdemux, node, buffer + 36, end);
break;
}
+ case FOURCC_dvcC:
+ case FOURCC_dvvC:
+ case FOURCC_dvwC:
+ {
+ guint32 dv_version_major = QT_UINT8(buffer+8);
+ guint32 dv_version_minor = QT_UINT8(buffer+9);
+ guint32 tmp = QT_UINT16(buffer+10);
+ guint32 dv_profile = (tmp >> 9) & 0x7f; // 7 bits
+ guint32 dv_level = (tmp >> 3) & 0x3f; // 6 bits
+ guint32 rpu_present_flag = (tmp >> 2) & 0x01;
+ guint32 el_present_flag = (tmp >> 1) & 0x01; // 1 bit
+ guint32 bl_present_flag = tmp & 0x01; // 1 bit
+
+ guint32 dv_bl_signal_compatibility_id = 0;// 0 stands for None
+ if (node_length >= 24) {
+ guint32 id = QT_UINT8(buffer+12);
+ dv_bl_signal_compatibility_id = (id >> 4) & 0x0f; // 4 bits
+ }
+ GST_DEBUG_OBJECT (qtdemux,"DOVI in dvcC/dvvC box, version: %d.%d, profile: %d, level: %d, "
+ "rpu flag: %d, el flag: %d, bl flag: %d, compatibility id: %d\n",
+ dv_version_major, dv_version_minor,
+ dv_profile, dv_level,
+ rpu_present_flag,
+ el_present_flag,
+ bl_present_flag,
+ dv_bl_signal_compatibility_id
+ );
+ /*
+ Expected results are:
+ • If the test vector (MP4) carries an undefined/unknown Base Layer Signal Compatibility ID (dv_bl_signal_
+ compatibility_id), the device under test rejects the playback.
+ • If the test vector (MP4) is of an undefined/unknown Dolby Vision profile, but its Base Layer Signal
+ Compatibility ID (dv_bl_signal_compatibility_id) is valid, the device under test plays the content
+ properly and TV displays in Dolby Vision picture mode.
+ Note: Level 11 metadata changes when the embedded label on the left side of the test pattern
+ changes.
+ • If the Dolby Vision configuration box contains unknown elements (reserved fields with non-zero value),
+ the device under test ignores the unknown elements properly and play the MP4 test vector properly and
+ TV displays in Dolby Vision picture mode.
+ */
+ if (dv_bl_signal_compatibility_id != 0 &&
+ dv_bl_signal_compatibility_id != 1 &&
+ dv_bl_signal_compatibility_id != 2 &&
+ dv_bl_signal_compatibility_id != 4 &&
+ dv_bl_signal_compatibility_id != 6) {
+ GST_ERROR_OBJECT(qtdemux,"Not support dolby vision config box");
+ goto broken_atom_size;
+ }
+
+ } break;
default:
if (!strcmp (type->name, "unknown"))
GST_MEMDUMP ("Unknown tag", buffer + 4, end - buffer - 4);
@@ -11456,7 +11506,56 @@
break;
}
+ case FOURCC_dvcC:
+ case FOURCC_dvvC:
+ case FOURCC_dvwC:
+ {
+ guint32 dv_version_major = QT_UINT8(avc_data+8);
+ guint32 dv_version_minor = QT_UINT8(avc_data+9);
+ guint32 tmp = QT_UINT16(avc_data+10);
+ guint32 dv_profile = (tmp >> 9) & 0x7f; // 7 bits
+ guint32 dv_level = (tmp >> 3) & 0x3f; // 6 bits
+ guint32 rpu_present_flag = (tmp >> 2) & 0x01;
+ guint32 el_present_flag = (tmp >> 1) & 0x01; // 1 bit
+ guint32 bl_present_flag = tmp & 0x01; // 1 bit
+ guint32 dv_bl_signal_compatibility_id = 0;// 0 stands for None
+ if (len >= 24) {
+ guint32 id = QT_UINT8(avc_data+12);
+ dv_bl_signal_compatibility_id = (id >> 4) & 0x0f; // 4 bits
+ }
+ GST_DEBUG_OBJECT (qtdemux,"DOVI in dvcC/dvvC box, version: %d.%d, profile: %d, level: %d, "
+ "rpu flag: %d, el flag: %d, bl flag: %d, compatibility id: %d\n",
+ dv_version_major, dv_version_minor,
+ dv_profile, dv_level,
+ rpu_present_flag,
+ el_present_flag,
+ bl_present_flag,
+ dv_bl_signal_compatibility_id
+ );
+ /*
+ Expected results are:
+ • If the test vector (MP4) carries an undefined/unknown Base Layer Signal Compatibility ID (dv_bl_signal_
+ compatibility_id), the device under test rejects the playback.
+ • If the test vector (MP4) is of an undefined/unknown Dolby Vision profile, but its Base Layer Signal
+ Compatibility ID (dv_bl_signal_compatibility_id) is valid, the device under test plays the content
+ properly and TV displays in Dolby Vision picture mode.
+ Note: Level 11 metadata changes when the embedded label on the left side of the test pattern
+ changes.
+ • If the Dolby Vision configuration box contains unknown elements (reserved fields with non-zero value),
+ the device under test ignores the unknown elements properly and play the MP4 test vector properly and
+ TV displays in Dolby Vision picture mode.
+ */
+ if (dv_bl_signal_compatibility_id != 0 &&
+ dv_bl_signal_compatibility_id != 1 &&
+ dv_bl_signal_compatibility_id != 2 &&
+ dv_bl_signal_compatibility_id != 4 &&
+ dv_bl_signal_compatibility_id != 6) {
+ GST_ERROR_OBJECT(qtdemux,"Not support dolby vision config box");
+ goto corrupt_file;
+ }
+
+ } break;
default:
break;
}
@@ -12033,6 +12132,56 @@
break;
}
+ case FOURCC_dvcC:
+ case FOURCC_dvvC:
+ case FOURCC_dvwC:
+ {
+ guint32 dv_version_major = QT_UINT8(avc_data+8);
+ guint32 dv_version_minor = QT_UINT8(avc_data+9);
+ guint32 tmp = QT_UINT16(avc_data+10);
+ guint32 dv_profile = (tmp >> 9) & 0x7f; // 7 bits
+ guint32 dv_level = (tmp >> 3) & 0x3f; // 6 bits
+ guint32 rpu_present_flag = (tmp >> 2) & 0x01;
+ guint32 el_present_flag = (tmp >> 1) & 0x01; // 1 bit
+ guint32 bl_present_flag = tmp & 0x01; // 1 bit
+
+ guint32 dv_bl_signal_compatibility_id = 0;// 0 stands for None
+ if (len >= 24) {
+ guint32 id = QT_UINT8(avc_data+12);
+ dv_bl_signal_compatibility_id = (id >> 4) & 0x0f; // 4 bits
+ }
+ GST_DEBUG_OBJECT (qtdemux,"DOVI in dvcC/dvvC box, version: %d.%d, profile: %d, level: %d, "
+ "rpu flag: %d, el flag: %d, bl flag: %d, compatibility id: %d\n",
+ dv_version_major, dv_version_minor,
+ dv_profile, dv_level,
+ rpu_present_flag,
+ el_present_flag,
+ bl_present_flag,
+ dv_bl_signal_compatibility_id
+ );
+ /*
+ Expected results are:
+ • If the test vector (MP4) carries an undefined/unknown Base Layer Signal Compatibility ID (dv_bl_signal_
+ compatibility_id), the device under test rejects the playback.
+ • If the test vector (MP4) is of an undefined/unknown Dolby Vision profile, but its Base Layer Signal
+ Compatibility ID (dv_bl_signal_compatibility_id) is valid, the device under test plays the content
+ properly and TV displays in Dolby Vision picture mode.
+ Note: Level 11 metadata changes when the embedded label on the left side of the test pattern
+ changes.
+ • If the Dolby Vision configuration box contains unknown elements (reserved fields with non-zero value),
+ the device under test ignores the unknown elements properly and play the MP4 test vector properly and
+ TV displays in Dolby Vision picture mode.
+ */
+ if (dv_bl_signal_compatibility_id != 0 &&
+ dv_bl_signal_compatibility_id != 1 &&
+ dv_bl_signal_compatibility_id != 2 &&
+ dv_bl_signal_compatibility_id != 4 &&
+ dv_bl_signal_compatibility_id != 6) {
+ GST_ERROR_OBJECT(qtdemux,"Not support dolby vision config box");
+ goto corrupt_file;
+ }
+
+ } break;
default:
break;
}
diff --git a/aml-qtdemux/qtdemux_types.c b/aml-qtdemux/qtdemux_types.c
index a78415a..5c301b9 100644
--- a/aml-qtdemux/qtdemux_types.c
+++ b/aml-qtdemux/qtdemux_types.c
@@ -230,6 +230,9 @@
{FOURCC_aavd, "AAX encrypted audio", 0},
{FOURCC_adrm, "AAX DRM key data", 0},
{FOURCC_vttc, "VTTCueBox 14496-30", QT_FLAG_CONTAINER},
+ {FOURCC_dvcC, "DOVI in dvcC box", 0},
+ {FOURCC_dvvC, "DOVI in dvvC box", 0},
+ {FOURCC_dvwC, "DOVI in dvwC box", 0},
{0, "unknown", 0,},
};