summaryrefslogtreecommitdiff
path: root/gst
diff options
context:
space:
mode:
authorStéphane Cerveau <scerveau@collabora.com>2020-07-01 15:17:47 +0200
committerStéphane Cerveau <scerveau@collabora.com>2020-07-21 15:53:52 +0000
commitc943be8b251d9f16b436d0c11197d84c466660ff (patch)
tree15072eeedaf10e2ec088393dbf6ff5438014aa29 /gst
parent1e39fe66ad63138e9fa0be8f762af66e545c2e55 (diff)
qtdemux: add Dolby Vision fourcc
This identifiers are registered in the MPEG-RA and defined to be used by the Dolby Vision AVC/HEVC streams. This is a first step to present the stream to the decoder. Additional box parsing of DOVIConfigurationBox is necessary to complete the media presentation with proper Dolby Vision enhancements. Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-good/-/merge_requests/658>
Diffstat (limited to 'gst')
-rw-r--r--gst/isomp4/fourcc.h5
-rw-r--r--gst/isomp4/qtdemux.c8
-rw-r--r--gst/isomp4/qtdemux_types.c5
3 files changed, 18 insertions, 0 deletions
diff --git a/gst/isomp4/fourcc.h b/gst/isomp4/fourcc.h
index 4516abca3..7952d8e3a 100644
--- a/gst/isomp4/fourcc.h
+++ b/gst/isomp4/fourcc.h
@@ -130,6 +130,11 @@ G_BEGIN_DECLS
#define FOURCC_dvc_ GST_MAKE_FOURCC('d','v','c',' ')
#define FOURCC_dv5p GST_MAKE_FOURCC('d','v','5','p')
#define FOURCC_dv5n GST_MAKE_FOURCC('d','v','5','n')
+#define FOURCC_dva1 GST_MAKE_FOURCC('d','v','a','1')
+#define FOURCC_dvav GST_MAKE_FOURCC('d','v','a','v')
+#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_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/gst/isomp4/qtdemux.c b/gst/isomp4/qtdemux.c
index 82c80b535..93ebef213 100644
--- a/gst/isomp4/qtdemux.c
+++ b/gst/isomp4/qtdemux.c
@@ -7918,6 +7918,8 @@ qtdemux_parse_node (GstQTDemux * qtdemux, GNode * node, const guint8 * buffer,
case FOURCC_H265:
case FOURCC_hvc1:
case FOURCC_hev1:
+ case FOURCC_dvh1:
+ case FOURCC_dvhe:
case FOURCC_mjp2:
case FOURCC_encv:
{
@@ -11064,6 +11066,8 @@ qtdemux_parse_trak (GstQTDemux * qtdemux, GNode * trak)
case FOURCC_H265:
case FOURCC_hvc1:
case FOURCC_hev1:
+ case FOURCC_dvh1:
+ case FOURCC_dvhe:
{
gint len = QT_UINT32 (stsd_entry_data) - 0x56;
const guint8 *hevc_data = stsd_entry_data + 0x56;
@@ -14166,12 +14170,14 @@ qtdemux_video_caps (GstQTDemux * qtdemux, QtDemuxStream * stream,
break;
case FOURCC_H264:
case FOURCC_avc1:
+ case FOURCC_dva1:
_codec ("H.264 / AVC");
caps = gst_caps_new_simple ("video/x-h264",
"stream-format", G_TYPE_STRING, "avc",
"alignment", G_TYPE_STRING, "au", NULL);
break;
case FOURCC_avc3:
+ case FOURCC_dvav:
_codec ("H.264 / AVC");
caps = gst_caps_new_simple ("video/x-h264",
"stream-format", G_TYPE_STRING, "avc3",
@@ -14179,12 +14185,14 @@ qtdemux_video_caps (GstQTDemux * qtdemux, QtDemuxStream * stream,
break;
case FOURCC_H265:
case FOURCC_hvc1:
+ case FOURCC_dvh1:
_codec ("H.265 / HEVC");
caps = gst_caps_new_simple ("video/x-h265",
"stream-format", G_TYPE_STRING, "hvc1",
"alignment", G_TYPE_STRING, "au", NULL);
break;
case FOURCC_hev1:
+ case FOURCC_dvhe:
_codec ("H.265 / HEVC");
caps = gst_caps_new_simple ("video/x-h265",
"stream-format", G_TYPE_STRING, "hev1",
diff --git a/gst/isomp4/qtdemux_types.c b/gst/isomp4/qtdemux_types.c
index 9ab2e7e3e..9852429ba 100644
--- a/gst/isomp4/qtdemux_types.c
+++ b/gst/isomp4/qtdemux_types.c
@@ -186,10 +186,15 @@ static const QtNodeType qt_node_types[] = {
{FOURCC_avcC, "AV codec configuration container", 0},
{FOURCC_avc1, "AV codec configuration v1", 0},
{FOURCC_avc3, "AV codec configuration v3", 0},
+ {FOURCC_dva1, "AVC-based Dolby Vision derived from avc1", 0},
+ {FOURCC_dvav, "AVC-based Dolby Vision derived from avc3", 0},
{FOURCC_mp4s, "VOBSUB codec configuration", 0},
{FOURCC_hvc1, "HEVC codec configuration", 0},
{FOURCC_hev1, "HEVC codec configuration", 0},
{FOURCC_hvcC, "HEVC codec configuration container", 0},
+ {FOURCC_dvhe, "HEVC-based Dolby Vision codec derived from hev1 ", 0},
+ {FOURCC_dvh1, "HEVC-based Dolby Vision codec derived from hvc1 ", 0},
+ {FOURCC_dvcC, "HEVC-based Dolby Vision codec configuration container", 0},
{FOURCC_tfdt, "Track fragment decode time", 0, qtdemux_dump_tfdt},
{FOURCC_chap, "Chapter Reference"},
{FOURCC_btrt, "Bitrate information", 0},