Update code according to review result

This commit is contained in:
ybai001 2024-12-19 16:28:33 +08:00
parent 545d37c104
commit 1ac847ad60
2 changed files with 36 additions and 19 deletions

View File

@ -2115,6 +2115,34 @@ public final class Util {
return builder.length() > 0 ? builder.toString() : null;
}
/**
* Returns a copy of {@code codecs} without the codecs whose track type matches {@code
* trackType}.
*
* @param codecs A codec sequence string, as defined in RFC 6381.
* @param trackType The {@link C.TrackType track type}.
* @return A copy of {@code codecs} without the codecs whose track type matches {@code
* trackType}. If this ends up empty, or {@code codecs} is null, returns null.
*/
@UnstableApi
@Nullable
public static String getCodecsWithoutType(@Nullable String codecs, @C.TrackType int trackType) {
String[] codecArray = splitCodecs(codecs);
if (codecArray.length == 0) {
return null;
}
StringBuilder builder = new StringBuilder();
for (String codec : codecArray) {
if (trackType != MimeTypes.getTrackTypeOfCodec(codec)) {
if (builder.length() > 0) {
builder.append(",");
}
builder.append(codec);
}
}
return builder.length() > 0 ? builder.toString() : null;
}
/**
* Splits a codecs sequence string, as defined in RFC 6381, into individual codec strings.
*

View File

@ -418,30 +418,19 @@ public final class HlsPlaylistParser implements ParsingLoadable.Parser<HlsPlayli
String supplementalCodecs = null;
String supplementalProfiles = null; // i.e. Compatibility brand
if (supplementalCodecsStrings != null) {
String[] supplementalCodecsString = Util.split(supplementalCodecsStrings, ",");
if (!supplementalCodecsString[0].isEmpty()) {
// TODO: Support more than one element
String[] codecsAndProfiles = Util.split(supplementalCodecsString[0], "/");
supplementalCodecs = codecsAndProfiles[0];
if (codecsAndProfiles.length > 1) {
supplementalProfiles = codecsAndProfiles[1];
}
String[] supplementalCodecsString = Util.splitAtFirst(supplementalCodecsStrings, ",");
// TODO: Support more than one element
String[] codecsAndProfiles = Util.split(supplementalCodecsString[0], "/");
supplementalCodecs = codecsAndProfiles[0];
if (codecsAndProfiles.length > 1) {
supplementalProfiles = codecsAndProfiles[1];
}
}
String videoCodecs = Util.getCodecsOfType(codecs, C.TRACK_TYPE_VIDEO);
if (isDolbyVisionFormat(videoRange, videoCodecs, supplementalCodecs, supplementalProfiles)) {
videoCodecs = supplementalCodecs != null ? supplementalCodecs : videoCodecs;
String[] codecArray = Util.splitCodecs(codecs);
StringBuilder builder = new StringBuilder();
for (String codec : codecArray) {
if (builder.length() > 0) {
builder.append(",");
}
builder.append(MimeTypes.getTrackTypeOfCodec(codec) == C.TRACK_TYPE_VIDEO
? videoCodecs
: codec);
}
codecs = builder.length() > 0 ? builder.toString() : codecs;
String nonVideoCodecs = Util.getCodecsWithoutType(codecs, C.TRACK_TYPE_VIDEO);
codecs = nonVideoCodecs != null ? videoCodecs + "," + nonVideoCodecs : videoCodecs;
}
String resolutionString =