[FFmpeg-devel] lavf/isom: add "dvhe" fourCC for HEVC

Submitted by Rodger Combs on Nov. 5, 2018, 4:27 p.m.

Details

Message ID 20181105162734.87879-1-rodger.combs@gmail.com
State New
Headers show

Commit Message

Rodger Combs Nov. 5, 2018, 4:27 p.m.
This refers to "Dolby Vision", which can have some additional extensions,
but (usually?) is also valid HEVC.
---
 libavformat/isom.c | 1 +
 1 file changed, 1 insertion(+)

Comments

Jan Ekström Nov. 5, 2018, 5:26 p.m.
On Mon, Nov 5, 2018 at 6:34 PM Rodger Combs <rodger.combs@gmail.com> wrote:
>
> This refers to "Dolby Vision", which can have some additional extensions,
> but (usually?) is also valid HEVC.

This probably will have to be referenced against
https://www.dolby.com/us/en/technologies/dolby-vision/dolby-vision-bitstreams-within-the-iso-base-media-file-format-v2.0.pdf
.

It seems to define additional boxes which most likely contain the
information regarding if the Base Layer (BL) is compatible with
standard SDR or HDR AVC/HEVC.

The referenced Dolby Vision profile defitions seem to be defined in
https://www.dolby.com/us/en/technologies/dolby-vision/dolby-vision-profiles-levels.pdf
.

Best regards,
Jan
Carl Eugen Hoyos Nov. 6, 2018, 9:55 p.m.
2018-11-05 18:26 GMT+01:00, Jan Ekström <jeebjp@gmail.com>:
> On Mon, Nov 5, 2018 at 6:34 PM Rodger Combs <rodger.combs@gmail.com> wrote:
>>
>> This refers to "Dolby Vision", which can have some additional extensions,
>> but (usually?) is also valid HEVC.
>
> This probably will have to be referenced against
> https://www.dolby.com/us/en/technologies/dolby-vision/dolby-vision-bitstreams-within-the-iso-base-media-file-format-v2.0.pdf
> .
>
> It seems to define additional boxes which most likely contain the
> information regarding if the Base Layer (BL) is compatible with
> standard SDR or HDR AVC/HEVC.
>
> The referenced Dolby Vision profile defitions seem to be defined in
> https://www.dolby.com/us/en/technologies/dolby-vision/dolby-vision-profiles-levels.pdf

Since the patch doesn't change default muxing behaviour, it could
be committed for the time being, please mention ticket #7347.
Maybe print a warning if not reading the additional information
can be an issue.

Carl Eugen
Jan Ekström Nov. 7, 2018, 10:41 p.m.
On Tue, Nov 6, 2018 at 11:56 PM Carl Eugen Hoyos <ceffmpeg@gmail.com> wrote:
>
> Since the patch doesn't change default muxing behaviour, it could
> be committed for the time being, please mention ticket #7347.
> Maybe print a warning if not reading the additional information
> can be an issue.
>
> Carl Eugen

I will post a v2 in a moment which contains all of the AVC and HEVC
identifiers specified in that Dolby specification and which are
registered at the MPEG-4 registration authority (they have two AVC and
two HEVC ones).

After looking at the relevant specs:
* These custom registered identifiers should only be utilized when the
stream cannot be played as-is by a standards-compliant AVC/HEVC
player. In other words, no color metadata is (supposed) to be left in
the video stream, and a custom DOVIConfigurationBox is required to be
parsed in order for the application to be able to interpret the actual
contents of the stream (YCbCr vs ICtCp('ish), HDR or SDR, base layer
or enhancement layer etc).
* These sample entries all contain the standardized configuration box,
which means that they should always be decode'able. Thus I am for
adding these identifiers to the demuxer, even if the actual content
cannot be interpreted without additional parsing.

Jan
Carl Eugen Hoyos Nov. 8, 2018, 1:38 a.m.
2018-11-07 23:41 GMT+01:00, Jan Ekström <jeebjp@gmail.com>:
> On Tue, Nov 6, 2018 at 11:56 PM Carl Eugen Hoyos <ceffmpeg@gmail.com> wrote:
>>
>> Since the patch doesn't change default muxing behaviour, it could
>> be committed for the time being, please mention ticket #7347.
>> Maybe print a warning if not reading the additional information
>> can be an issue.
>>
>> Carl Eugen
>
> I will post a v2 in a moment which contains all of the AVC and HEVC
> identifiers specified in that Dolby specification and which are
> registered at the MPEG-4 registration authority

Apart from "please see archives":
Why can't we do it like the last decade and fix files that don't work
instead of creating patches that apparently are impossible to test?

Carl Eugen
Jan Ekström Nov. 8, 2018, 7:25 a.m.
On Thu, Nov 8, 2018, 03:38 Carl Eugen Hoyos <ceffmpeg@gmail.com wrote:

>
> Apart from "please see archives":
> Why can't we do it like the last decade and fix files that don't work
> instead of creating patches that apparently are impossible to test?
>
> Carl Eugen
>

We have something that:
a) has a specification (albeit by Dolby, which we all can have our opinions
on, but still a specification).
b) has the identifiers registered to itself by mpeg-4 ra

When looking into something that is specified, wouldn't you go through it
and enable what it mentions if you notice that there were actually more
things than you originally thought?! I'm pretty sure this way of going
through it has nothing special regarding it compared to the "last decade".

Generally picking up values from samples happens when there are no
specifications, or if there's a specific agenda from the side of FFmpeg to
prefer one identifier to the other. Or if someone just forgot to look at a
specification during initial implementation. Or the specification changed.

Jan
Carl Eugen Hoyos Nov. 10, 2018, 1:37 p.m.
2018-11-08 8:25 GMT+01:00, Jan Ekström <jeebjp@gmail.com>:

> When looking into something that is specified, wouldn't you go
> through it and enable what it mentions if you notice that there
> were actually more things than you originally thought?!

This may be acceptable for "DTS4" or similar but in general, it
is much better to test with a sample.

Carl Eugen

Patch hide | download patch | download mbox

diff --git a/libavformat/isom.c b/libavformat/isom.c
index ca9d22e4f7..fbfa0dc057 100644
--- a/libavformat/isom.c
+++ b/libavformat/isom.c
@@ -163,6 +163,7 @@  const AVCodecTag ff_codec_movvideo_tags[] = {
 
     { AV_CODEC_ID_HEVC, MKTAG('h', 'e', 'v', '1') }, /* HEVC/H.265 which indicates parameter sets may be in ES */
     { AV_CODEC_ID_HEVC, MKTAG('h', 'v', 'c', '1') }, /* HEVC/H.265 which indicates parameter sets shall not be in ES */
+    { AV_CODEC_ID_HEVC, MKTAG('d', 'v', 'h', 'e') }, /* HEVC/H.265 with Dolby Vision extensions */
 
     { AV_CODEC_ID_H264, MKTAG('a', 'v', 'c', '1') }, /* AVC-1/H.264 */
     { AV_CODEC_ID_H264, MKTAG('a', 'v', 'c', '2') },