mirror of
https://github.com/androidx/media.git
synced 2025-04-30 06:46:50 +08:00
Merge pull request #2023 from DolbyLaboratories:dlb/dovi-format/dev
PiperOrigin-RevId: 716226613
This commit is contained in:
commit
fda8b8a35d
@ -317,15 +317,24 @@ public final class MediaCodecInfo {
|
||||
int profile = codecProfileAndLevel.first;
|
||||
int level = codecProfileAndLevel.second;
|
||||
if (MimeTypes.VIDEO_DOLBY_VISION.equals(format.sampleMimeType)) {
|
||||
// If this codec is H264 or H265, we only support the Dolby Vision base layer and need to map
|
||||
// the Dolby Vision profile to the corresponding base layer profile. Also assume all levels of
|
||||
// this base layer profile are supported.
|
||||
if (MimeTypes.VIDEO_H264.equals(mimeType)) {
|
||||
profile = CodecProfileLevel.AVCProfileHigh;
|
||||
level = 0;
|
||||
} else if (MimeTypes.VIDEO_H265.equals(mimeType)) {
|
||||
profile = CodecProfileLevel.HEVCProfileMain10;
|
||||
level = 0;
|
||||
// If this codec is H.264, H.265 or AV1, we only support the Dolby Vision base layer and need
|
||||
// to map the Dolby Vision profile to the corresponding base layer profile. Also assume all
|
||||
// levels of this base layer profile are supported.
|
||||
switch (mimeType) {
|
||||
case MimeTypes.VIDEO_H264:
|
||||
profile = CodecProfileLevel.AVCProfileHigh;
|
||||
level = 0;
|
||||
break;
|
||||
case MimeTypes.VIDEO_H265:
|
||||
profile = CodecProfileLevel.HEVCProfileMain10;
|
||||
level = 0;
|
||||
break;
|
||||
case MimeTypes.VIDEO_AV1:
|
||||
profile = CodecProfileLevel.AV1ProfileMain10;
|
||||
level = 0;
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -1155,11 +1155,11 @@ public class MediaCodecVideoRenderer extends MediaCodecRenderer
|
||||
|
||||
String sampleMimeType = checkNotNull(format.sampleMimeType);
|
||||
if (MimeTypes.VIDEO_DOLBY_VISION.equals(sampleMimeType)) {
|
||||
// Dolby vision can be a wrapper around H264 or H265. We assume it's wrapping H265 by default
|
||||
// because it's the common case, and because some devices may fail to allocate the codec when
|
||||
// the larger buffer size required for H264 is requested. We size buffers for H264 only if the
|
||||
// format contains sufficient information for us to determine unambiguously that it's a H264
|
||||
// profile.
|
||||
// Dolby vision can be a wrapper around H.264, H.265 or AV1. We assume it's wrapping H.265 by
|
||||
// default because it's the common case, and because some devices may fail to allocate the
|
||||
// codec when the larger buffer size required for H.264/AV1 is requested. We size buffers
|
||||
// for H.264/AV1 only if the format contains sufficient information for us to determine
|
||||
// unambiguously that it's a H.264/AV1 based profile.
|
||||
sampleMimeType = MimeTypes.VIDEO_H265;
|
||||
@Nullable
|
||||
Pair<Integer, Integer> codecProfileAndLevel = MediaCodecUtil.getCodecProfileAndLevel(format);
|
||||
@ -1169,6 +1169,8 @@ public class MediaCodecVideoRenderer extends MediaCodecRenderer
|
||||
|| profile == CodecProfileLevel.DolbyVisionProfileDvavPer
|
||||
|| profile == CodecProfileLevel.DolbyVisionProfileDvavPen) {
|
||||
sampleMimeType = MimeTypes.VIDEO_H264;
|
||||
} else if (profile == CodecProfileLevel.DolbyVisionProfileDvav110) {
|
||||
sampleMimeType = MimeTypes.VIDEO_AV1;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -38,16 +38,21 @@ public final class DolbyVisionConfig {
|
||||
int dvProfile = (profileData >> 1);
|
||||
int dvLevel = ((profileData & 0x1) << 5) | ((data.readUnsignedByte() >> 3) & 0x1F);
|
||||
String codecsPrefix;
|
||||
if (dvProfile == 4 || dvProfile == 5 || dvProfile == 7) {
|
||||
if (dvProfile == 4 || dvProfile == 5 || dvProfile == 7 || dvProfile == 8) {
|
||||
codecsPrefix = "dvhe";
|
||||
} else if (dvProfile == 8) {
|
||||
codecsPrefix = "hev1";
|
||||
} else if (dvProfile == 9) {
|
||||
codecsPrefix = "avc3";
|
||||
codecsPrefix = "dvav";
|
||||
} else if (dvProfile == 10) {
|
||||
codecsPrefix = "dav1";
|
||||
} else {
|
||||
return null;
|
||||
}
|
||||
String codecs = codecsPrefix + ".0" + dvProfile + (dvLevel < 10 ? ".0" : ".") + dvLevel;
|
||||
String codecs =
|
||||
codecsPrefix
|
||||
+ (dvProfile < 10 ? ".0" : ".")
|
||||
+ dvProfile
|
||||
+ (dvLevel < 10 ? ".0" : ".")
|
||||
+ dvLevel;
|
||||
return new DolbyVisionConfig(dvProfile, dvLevel, codecs);
|
||||
}
|
||||
|
||||
|
@ -14,7 +14,7 @@ track 0:
|
||||
id = 1
|
||||
containerMimeType = video/mp4
|
||||
sampleMimeType = video/dolby-vision
|
||||
codecs = hev1.08.04
|
||||
codecs = dvhe.08.04
|
||||
maxInputSize = 196379
|
||||
maxNumReorderSamples = 2
|
||||
width = 1920
|
||||
|
@ -14,7 +14,7 @@ track 0:
|
||||
id = 1
|
||||
containerMimeType = video/mp4
|
||||
sampleMimeType = video/dolby-vision
|
||||
codecs = hev1.08.04
|
||||
codecs = dvhe.08.04
|
||||
maxInputSize = 196379
|
||||
maxNumReorderSamples = 2
|
||||
width = 1920
|
||||
|
@ -14,7 +14,7 @@ track 0:
|
||||
id = 1
|
||||
containerMimeType = video/mp4
|
||||
sampleMimeType = video/dolby-vision
|
||||
codecs = hev1.08.04
|
||||
codecs = dvhe.08.04
|
||||
maxInputSize = 196379
|
||||
maxNumReorderSamples = 2
|
||||
width = 1920
|
||||
|
@ -14,7 +14,7 @@ track 0:
|
||||
id = 1
|
||||
containerMimeType = video/mp4
|
||||
sampleMimeType = video/dolby-vision
|
||||
codecs = hev1.08.04
|
||||
codecs = dvhe.08.04
|
||||
maxInputSize = 196379
|
||||
maxNumReorderSamples = 2
|
||||
width = 1920
|
||||
|
@ -14,7 +14,7 @@ track 0:
|
||||
id = 1
|
||||
containerMimeType = video/mp4
|
||||
sampleMimeType = video/dolby-vision
|
||||
codecs = hev1.08.04
|
||||
codecs = dvhe.08.04
|
||||
maxInputSize = 196379
|
||||
maxNumReorderSamples = 2
|
||||
width = 1920
|
||||
|
@ -14,7 +14,7 @@ track 0:
|
||||
id = 1
|
||||
containerMimeType = video/mp4
|
||||
sampleMimeType = video/dolby-vision
|
||||
codecs = hev1.08.04
|
||||
codecs = dvhe.08.04
|
||||
maxInputSize = 196379
|
||||
maxNumReorderSamples = 2
|
||||
width = 1920
|
||||
|
@ -14,7 +14,7 @@ track 0:
|
||||
id = 1
|
||||
containerMimeType = video/mp4
|
||||
sampleMimeType = video/dolby-vision
|
||||
codecs = hev1.08.04
|
||||
codecs = dvhe.08.04
|
||||
maxInputSize = 196379
|
||||
maxNumReorderSamples = 2
|
||||
width = 1920
|
||||
|
@ -14,7 +14,7 @@ track 0:
|
||||
id = 1
|
||||
containerMimeType = video/mp4
|
||||
sampleMimeType = video/dolby-vision
|
||||
codecs = hev1.08.04
|
||||
codecs = dvhe.08.04
|
||||
maxInputSize = 196379
|
||||
maxNumReorderSamples = 2
|
||||
width = 1920
|
||||
|
@ -14,7 +14,7 @@ track 0:
|
||||
id = 1
|
||||
containerMimeType = video/mp4
|
||||
sampleMimeType = video/dolby-vision
|
||||
codecs = hev1.08.04
|
||||
codecs = dvhe.08.04
|
||||
maxInputSize = 196379
|
||||
maxNumReorderSamples = 2
|
||||
width = 1920
|
||||
|
@ -14,7 +14,7 @@ track 0:
|
||||
id = 1
|
||||
containerMimeType = video/mp4
|
||||
sampleMimeType = video/dolby-vision
|
||||
codecs = hev1.08.04
|
||||
codecs = dvhe.08.04
|
||||
maxInputSize = 196379
|
||||
maxNumReorderSamples = 2
|
||||
width = 1920
|
||||
|
@ -14,7 +14,7 @@ track 0:
|
||||
id = 1
|
||||
containerMimeType = video/mp4
|
||||
sampleMimeType = video/dolby-vision
|
||||
codecs = hev1.08.04
|
||||
codecs = dvhe.08.04
|
||||
maxInputSize = 40550
|
||||
maxNumReorderSamples = 2
|
||||
width = 1920
|
||||
|
@ -14,7 +14,7 @@ track 0:
|
||||
id = 1
|
||||
containerMimeType = video/mp4
|
||||
sampleMimeType = video/dolby-vision
|
||||
codecs = hev1.08.04
|
||||
codecs = dvhe.08.04
|
||||
maxInputSize = 40550
|
||||
maxNumReorderSamples = 2
|
||||
width = 1920
|
||||
|
@ -14,7 +14,7 @@ track 0:
|
||||
id = 1
|
||||
containerMimeType = video/mp4
|
||||
sampleMimeType = video/dolby-vision
|
||||
codecs = hev1.08.04
|
||||
codecs = dvhe.08.04
|
||||
maxInputSize = 40550
|
||||
maxNumReorderSamples = 2
|
||||
width = 1920
|
||||
|
@ -14,7 +14,7 @@ track 0:
|
||||
id = 1
|
||||
containerMimeType = video/mp4
|
||||
sampleMimeType = video/dolby-vision
|
||||
codecs = hev1.08.04
|
||||
codecs = dvhe.08.04
|
||||
maxInputSize = 40550
|
||||
maxNumReorderSamples = 2
|
||||
width = 1920
|
||||
|
@ -14,7 +14,7 @@ track 0:
|
||||
id = 1
|
||||
containerMimeType = video/mp4
|
||||
sampleMimeType = video/dolby-vision
|
||||
codecs = hev1.08.04
|
||||
codecs = dvhe.08.04
|
||||
maxInputSize = 40550
|
||||
maxNumReorderSamples = 2
|
||||
width = 1920
|
||||
|
@ -14,7 +14,7 @@ track 0:
|
||||
id = 1
|
||||
containerMimeType = video/mp4
|
||||
sampleMimeType = video/dolby-vision
|
||||
codecs = hev1.08.04
|
||||
codecs = dvhe.08.04
|
||||
maxInputSize = 40550
|
||||
maxNumReorderSamples = 2
|
||||
width = 1920
|
||||
|
@ -14,7 +14,7 @@ track 0:
|
||||
id = 1
|
||||
containerMimeType = video/mp4
|
||||
sampleMimeType = video/dolby-vision
|
||||
codecs = hev1.08.04
|
||||
codecs = dvhe.08.04
|
||||
maxInputSize = 40550
|
||||
maxNumReorderSamples = 2
|
||||
width = 1920
|
||||
|
@ -14,7 +14,7 @@ track 0:
|
||||
id = 1
|
||||
containerMimeType = video/mp4
|
||||
sampleMimeType = video/dolby-vision
|
||||
codecs = hev1.08.04
|
||||
codecs = dvhe.08.04
|
||||
maxInputSize = 40550
|
||||
maxNumReorderSamples = 2
|
||||
width = 1920
|
||||
|
@ -14,7 +14,7 @@ track 0:
|
||||
id = 1
|
||||
containerMimeType = video/mp4
|
||||
sampleMimeType = video/dolby-vision
|
||||
codecs = hev1.08.04
|
||||
codecs = dvhe.08.04
|
||||
maxInputSize = 40550
|
||||
maxNumReorderSamples = 2
|
||||
width = 1920
|
||||
|
@ -14,7 +14,7 @@ track 0:
|
||||
id = 1
|
||||
containerMimeType = video/mp4
|
||||
sampleMimeType = video/dolby-vision
|
||||
codecs = hev1.08.04
|
||||
codecs = dvhe.08.04
|
||||
maxInputSize = 40550
|
||||
maxNumReorderSamples = 2
|
||||
width = 1920
|
||||
|
Loading…
x
Reference in New Issue
Block a user