diff options
author | Stéphane Cerveau <scerveau@collabora.com> | 2020-07-01 15:17:47 +0200 |
---|---|---|
committer | Stéphane Cerveau <scerveau@collabora.com> | 2020-07-21 15:53:52 +0000 |
commit | c943be8b251d9f16b436d0c11197d84c466660ff (patch) | |
tree | 15072eeedaf10e2ec088393dbf6ff5438014aa29 /gst | |
parent | 1e39fe66ad63138e9fa0be8f762af66e545c2e55 (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.h | 5 | ||||
-rw-r--r-- | gst/isomp4/qtdemux.c | 8 | ||||
-rw-r--r-- | gst/isomp4/qtdemux_types.c | 5 |
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}, |