BoxParser: Update Dolby Vision codec support.

1. Append initialization data of Dolby Vision codec to list of initialization data.
2. Parse `dwcC` box in BoxParser.

PiperOrigin-RevId: 740737770
This commit is contained in:
Googler 2025-03-26 06:06:04 -07:00 committed by Copybara-Service
parent 3d5e650980
commit a24d1d41d9
22 changed files with 41 additions and 1 deletions

View File

@ -117,6 +117,9 @@ public abstract class Mp4Box {
@SuppressWarnings("ConstantCaseForConstants")
public static final int TYPE_dvvC = 0x64767643;
@SuppressWarnings("ConstantCaseForConstants")
public static final int TYPE_dvwC = 0x64767743;
@SuppressWarnings("ConstantCaseForConstants")
public static final int TYPE_s263 = 0x73323633;

View File

@ -1367,7 +1367,24 @@ public final class BoxParser {
: C.STEREO_MODE_INTERLEAVED_LEFT_PRIMARY;
}
}
} else if (childAtomType == Mp4Box.TYPE_dvcC || childAtomType == Mp4Box.TYPE_dvvC) {
} else if (childAtomType == Mp4Box.TYPE_dvcC
|| childAtomType == Mp4Box.TYPE_dvvC
|| childAtomType == Mp4Box.TYPE_dvwC) {
int childAtomBodySize = childAtomSize - Mp4Box.HEADER_SIZE;
byte[] initializationDataChunk = new byte[childAtomBodySize];
parent.readBytes(initializationDataChunk, /* offset= */ 0, childAtomBodySize);
// Add the initialization data of Dolby Vision to the existing list of initialization data.
if (initializationData != null) {
initializationData =
ImmutableList.<byte[]>builder()
.addAll(initializationData)
.add(initializationDataChunk)
.build();
} else {
ExtractorUtil.checkContainerInput(
false, "initializationData must already be set from hvcC or avcC atom");
}
parent.setPosition(childStartPosition + Mp4Box.HEADER_SIZE);
@Nullable DolbyVisionConfig dolbyVisionConfig = DolbyVisionConfig.parse(parent);
if (dolbyVisionConfig != null) {
codecs = dolbyVisionConfig.codecs;

View File

@ -32,6 +32,7 @@ track 0:
metadata = entries=[Mp4Timestamp: creation time=3788952614, modification time=3788952614, timescale=600]
initializationData:
data = length 97, hash 32FB3D18
data = length 24, hash A31E9935
sample 0:
time = -455000
flags = 1

View File

@ -32,6 +32,7 @@ track 0:
metadata = entries=[Mp4Timestamp: creation time=3788952614, modification time=3788952614, timescale=600]
initializationData:
data = length 97, hash 32FB3D18
data = length 24, hash A31E9935
sample 0:
time = 611666
flags = 1

View File

@ -32,6 +32,7 @@ track 0:
metadata = entries=[Mp4Timestamp: creation time=3788952614, modification time=3788952614, timescale=600]
initializationData:
data = length 97, hash 32FB3D18
data = length 24, hash A31E9935
sample 0:
time = 1680000
flags = 1

View File

@ -32,6 +32,7 @@ track 0:
metadata = entries=[Mp4Timestamp: creation time=3788952614, modification time=3788952614, timescale=600]
initializationData:
data = length 97, hash 32FB3D18
data = length 24, hash A31E9935
sample 0:
time = 1680000
flags = 1

View File

@ -32,6 +32,7 @@ track 0:
metadata = entries=[Mp4Timestamp: creation time=3788952614, modification time=3788952614, timescale=600]
initializationData:
data = length 97, hash 32FB3D18
data = length 24, hash A31E9935
sample 0:
time = -455000
flags = 1

View File

@ -32,6 +32,7 @@ track 0:
metadata = entries=[Mp4Timestamp: creation time=3788952614, modification time=3788952614, timescale=600]
initializationData:
data = length 97, hash 32FB3D18
data = length 24, hash A31E9935
sample 0:
time = 611666
flags = 1

View File

@ -32,6 +32,7 @@ track 0:
metadata = entries=[Mp4Timestamp: creation time=3788952614, modification time=3788952614, timescale=600]
initializationData:
data = length 97, hash 32FB3D18
data = length 24, hash A31E9935
sample 0:
time = 1680000
flags = 1

View File

@ -32,6 +32,7 @@ track 0:
metadata = entries=[Mp4Timestamp: creation time=3788952614, modification time=3788952614, timescale=600]
initializationData:
data = length 97, hash 32FB3D18
data = length 24, hash A31E9935
sample 0:
time = 1680000
flags = 1

View File

@ -32,6 +32,7 @@ track 0:
metadata = entries=[Mp4Timestamp: creation time=3788952614, modification time=3788952614, timescale=600]
initializationData:
data = length 97, hash 32FB3D18
data = length 24, hash A31E9935
sample 0:
time = -455000
flags = 1

View File

@ -32,6 +32,7 @@ track 0:
metadata = entries=[Mp4Timestamp: creation time=3788952614, modification time=3788952614, timescale=600]
initializationData:
data = length 97, hash 32FB3D18
data = length 24, hash A31E9935
sample 0:
time = -455000
flags = 1

View File

@ -32,6 +32,7 @@ track 0:
metadata = entries=[mdta: key=com.apple.quicktime.location.accuracy.horizontal, value=3.754789, mdta: key=com.apple.quicktime.location.ISO6709, value=+37.7450-122.4301+066.374/, mdta: key=com.apple.quicktime.make, value=Apple, mdta: key=com.apple.quicktime.model, value=iPhone 12 Pro Max, mdta: key=com.apple.quicktime.software, value=14.5.1, mdta: key=com.apple.quicktime.creationdate, value=2021-05-25T09:21:51-0700, Mp4Timestamp: creation time=3704804511, modification time=3704804511, timescale=600]
initializationData:
data = length 526, hash 7B3FC433
data = length 24, hash A31E9935
sample 0:
time = 0
flags = 1

View File

@ -32,6 +32,7 @@ track 0:
metadata = entries=[mdta: key=com.apple.quicktime.location.accuracy.horizontal, value=3.754789, mdta: key=com.apple.quicktime.location.ISO6709, value=+37.7450-122.4301+066.374/, mdta: key=com.apple.quicktime.make, value=Apple, mdta: key=com.apple.quicktime.model, value=iPhone 12 Pro Max, mdta: key=com.apple.quicktime.software, value=14.5.1, mdta: key=com.apple.quicktime.creationdate, value=2021-05-25T09:21:51-0700, Mp4Timestamp: creation time=3704804511, modification time=3704804511, timescale=600]
initializationData:
data = length 526, hash 7B3FC433
data = length 24, hash A31E9935
sample 0:
time = 0
flags = 1

View File

@ -32,6 +32,7 @@ track 0:
metadata = entries=[mdta: key=com.apple.quicktime.location.accuracy.horizontal, value=3.754789, mdta: key=com.apple.quicktime.location.ISO6709, value=+37.7450-122.4301+066.374/, mdta: key=com.apple.quicktime.make, value=Apple, mdta: key=com.apple.quicktime.model, value=iPhone 12 Pro Max, mdta: key=com.apple.quicktime.software, value=14.5.1, mdta: key=com.apple.quicktime.creationdate, value=2021-05-25T09:21:51-0700, Mp4Timestamp: creation time=3704804511, modification time=3704804511, timescale=600]
initializationData:
data = length 526, hash 7B3FC433
data = length 24, hash A31E9935
sample 0:
time = 0
flags = 1

View File

@ -32,6 +32,7 @@ track 0:
metadata = entries=[mdta: key=com.apple.quicktime.location.accuracy.horizontal, value=3.754789, mdta: key=com.apple.quicktime.location.ISO6709, value=+37.7450-122.4301+066.374/, mdta: key=com.apple.quicktime.make, value=Apple, mdta: key=com.apple.quicktime.model, value=iPhone 12 Pro Max, mdta: key=com.apple.quicktime.software, value=14.5.1, mdta: key=com.apple.quicktime.creationdate, value=2021-05-25T09:21:51-0700, Mp4Timestamp: creation time=3704804511, modification time=3704804511, timescale=600]
initializationData:
data = length 526, hash 7B3FC433
data = length 24, hash A31E9935
sample 0:
time = 0
flags = 1

View File

@ -32,6 +32,7 @@ track 0:
metadata = entries=[mdta: key=com.apple.quicktime.location.accuracy.horizontal, value=3.754789, mdta: key=com.apple.quicktime.location.ISO6709, value=+37.7450-122.4301+066.374/, mdta: key=com.apple.quicktime.make, value=Apple, mdta: key=com.apple.quicktime.model, value=iPhone 12 Pro Max, mdta: key=com.apple.quicktime.software, value=14.5.1, mdta: key=com.apple.quicktime.creationdate, value=2021-05-25T09:21:51-0700, Mp4Timestamp: creation time=3704804511, modification time=3704804511, timescale=600]
initializationData:
data = length 526, hash 7B3FC433
data = length 24, hash A31E9935
sample 0:
time = 0
flags = 1

View File

@ -32,6 +32,7 @@ track 0:
metadata = entries=[mdta: key=com.apple.quicktime.location.accuracy.horizontal, value=3.754789, mdta: key=com.apple.quicktime.location.ISO6709, value=+37.7450-122.4301+066.374/, mdta: key=com.apple.quicktime.make, value=Apple, mdta: key=com.apple.quicktime.model, value=iPhone 12 Pro Max, mdta: key=com.apple.quicktime.software, value=14.5.1, mdta: key=com.apple.quicktime.creationdate, value=2021-05-25T09:21:51-0700, Mp4Timestamp: creation time=3704804511, modification time=3704804511, timescale=600]
initializationData:
data = length 526, hash 7B3FC433
data = length 24, hash A31E9935
sample 0:
time = 0
flags = 1

View File

@ -32,6 +32,7 @@ track 0:
metadata = entries=[mdta: key=com.apple.quicktime.location.accuracy.horizontal, value=3.754789, mdta: key=com.apple.quicktime.location.ISO6709, value=+37.7450-122.4301+066.374/, mdta: key=com.apple.quicktime.make, value=Apple, mdta: key=com.apple.quicktime.model, value=iPhone 12 Pro Max, mdta: key=com.apple.quicktime.software, value=14.5.1, mdta: key=com.apple.quicktime.creationdate, value=2021-05-25T09:21:51-0700, Mp4Timestamp: creation time=3704804511, modification time=3704804511, timescale=600]
initializationData:
data = length 526, hash 7B3FC433
data = length 24, hash A31E9935
sample 0:
time = 0
flags = 1

View File

@ -32,6 +32,7 @@ track 0:
metadata = entries=[mdta: key=com.apple.quicktime.location.accuracy.horizontal, value=3.754789, mdta: key=com.apple.quicktime.location.ISO6709, value=+37.7450-122.4301+066.374/, mdta: key=com.apple.quicktime.make, value=Apple, mdta: key=com.apple.quicktime.model, value=iPhone 12 Pro Max, mdta: key=com.apple.quicktime.software, value=14.5.1, mdta: key=com.apple.quicktime.creationdate, value=2021-05-25T09:21:51-0700, Mp4Timestamp: creation time=3704804511, modification time=3704804511, timescale=600]
initializationData:
data = length 526, hash 7B3FC433
data = length 24, hash A31E9935
sample 0:
time = 0
flags = 1

View File

@ -32,6 +32,7 @@ track 0:
metadata = entries=[mdta: key=com.apple.quicktime.location.accuracy.horizontal, value=3.754789, mdta: key=com.apple.quicktime.location.ISO6709, value=+37.7450-122.4301+066.374/, mdta: key=com.apple.quicktime.make, value=Apple, mdta: key=com.apple.quicktime.model, value=iPhone 12 Pro Max, mdta: key=com.apple.quicktime.software, value=14.5.1, mdta: key=com.apple.quicktime.creationdate, value=2021-05-25T09:21:51-0700, Mp4Timestamp: creation time=3704804511, modification time=3704804511, timescale=600]
initializationData:
data = length 526, hash 7B3FC433
data = length 24, hash A31E9935
sample 0:
time = 0
flags = 1

View File

@ -32,6 +32,7 @@ track 0:
metadata = entries=[mdta: key=com.apple.quicktime.location.accuracy.horizontal, value=3.754789, mdta: key=com.apple.quicktime.location.ISO6709, value=+37.7450-122.4301+066.374/, mdta: key=com.apple.quicktime.make, value=Apple, mdta: key=com.apple.quicktime.model, value=iPhone 12 Pro Max, mdta: key=com.apple.quicktime.software, value=14.5.1, mdta: key=com.apple.quicktime.creationdate, value=2021-05-25T09:21:51-0700, Mp4Timestamp: creation time=3704804511, modification time=3704804511, timescale=600]
initializationData:
data = length 526, hash 7B3FC433
data = length 24, hash A31E9935
sample 0:
time = 0
flags = 1