Merge pull request #9023 from DolbyLaboratories:dev-v2-multicodecs
PiperOrigin-RevId: 379440699
This commit is contained in:
commit
f90d0a26a4
@ -45,6 +45,7 @@
|
|||||||
* Fix `IncorrectContextUseViolation` strict mode warning on Android 11
|
* Fix `IncorrectContextUseViolation` strict mode warning on Android 11
|
||||||
([#8246](https://github.com/google/ExoPlayer/pull/8246)).
|
([#8246](https://github.com/google/ExoPlayer/pull/8246)).
|
||||||
* Audio:
|
* Audio:
|
||||||
|
* Fix track selection for E-AC-3 streams.
|
||||||
* Use `AudioTrack.isDirectPlaybackSupported` to check for encoded audio
|
* Use `AudioTrack.isDirectPlaybackSupported` to check for encoded audio
|
||||||
passthrough capability from API 29 onwards, instead of using the HDMI
|
passthrough capability from API 29 onwards, instead of using the HDMI
|
||||||
audio plug intent
|
audio plug intent
|
||||||
|
@ -91,6 +91,13 @@ public final class Ac3Util {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A non-standard codec string for E-AC-3. Use of this constant allows for disambiguation between
|
||||||
|
* regular AC-3 ("ec-3") and E-AC-3 ("ec+3") streams from the codec string alone. The standard is
|
||||||
|
* to use "ec-3" for both, as per the <a href="https://mp4ra.org/#/codecs">MP4RA registered codec
|
||||||
|
* types</a>.
|
||||||
|
*/
|
||||||
|
public static final String E_AC_3_CODEC_STRING = "ec+3";
|
||||||
/** Maximum rate for an AC-3 audio stream, in bytes per second. */
|
/** Maximum rate for an AC-3 audio stream, in bytes per second. */
|
||||||
public static final int AC3_MAX_RATE_BYTES_PER_SECOND = 640 * 1000 / 8;
|
public static final int AC3_MAX_RATE_BYTES_PER_SECOND = 640 * 1000 / 8;
|
||||||
/** Maximum rate for an E-AC-3 audio stream, in bytes per second. */
|
/** Maximum rate for an E-AC-3 audio stream, in bytes per second. */
|
||||||
|
@ -20,6 +20,7 @@ import androidx.annotation.Nullable;
|
|||||||
import androidx.annotation.VisibleForTesting;
|
import androidx.annotation.VisibleForTesting;
|
||||||
import com.google.android.exoplayer2.C;
|
import com.google.android.exoplayer2.C;
|
||||||
import com.google.android.exoplayer2.audio.AacUtil;
|
import com.google.android.exoplayer2.audio.AacUtil;
|
||||||
|
import com.google.android.exoplayer2.audio.Ac3Util;
|
||||||
import com.google.common.base.Ascii;
|
import com.google.common.base.Ascii;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.regex.Matcher;
|
import java.util.regex.Matcher;
|
||||||
@ -375,7 +376,7 @@ public final class MimeTypes {
|
|||||||
return MimeTypes.AUDIO_AC3;
|
return MimeTypes.AUDIO_AC3;
|
||||||
} else if (codec.startsWith("ec-3") || codec.startsWith("dec3")) {
|
} else if (codec.startsWith("ec-3") || codec.startsWith("dec3")) {
|
||||||
return MimeTypes.AUDIO_E_AC3;
|
return MimeTypes.AUDIO_E_AC3;
|
||||||
} else if (codec.startsWith("ec+3")) {
|
} else if (codec.startsWith(Ac3Util.E_AC_3_CODEC_STRING)) {
|
||||||
return MimeTypes.AUDIO_E_AC3_JOC;
|
return MimeTypes.AUDIO_E_AC3_JOC;
|
||||||
} else if (codec.startsWith("ac-4") || codec.startsWith("dac4")) {
|
} else if (codec.startsWith("ac-4") || codec.startsWith("dac4")) {
|
||||||
return MimeTypes.AUDIO_AC4;
|
return MimeTypes.AUDIO_AC4;
|
||||||
|
@ -24,6 +24,7 @@ import androidx.annotation.Nullable;
|
|||||||
import com.google.android.exoplayer2.C;
|
import com.google.android.exoplayer2.C;
|
||||||
import com.google.android.exoplayer2.Format;
|
import com.google.android.exoplayer2.Format;
|
||||||
import com.google.android.exoplayer2.ParserException;
|
import com.google.android.exoplayer2.ParserException;
|
||||||
|
import com.google.android.exoplayer2.audio.Ac3Util;
|
||||||
import com.google.android.exoplayer2.drm.DrmInitData;
|
import com.google.android.exoplayer2.drm.DrmInitData;
|
||||||
import com.google.android.exoplayer2.drm.DrmInitData.SchemeData;
|
import com.google.android.exoplayer2.drm.DrmInitData.SchemeData;
|
||||||
import com.google.android.exoplayer2.extractor.mp4.PsshAtomUtil;
|
import com.google.android.exoplayer2.extractor.mp4.PsshAtomUtil;
|
||||||
@ -765,6 +766,9 @@ public class DashManifestParser extends DefaultHandler
|
|||||||
@Nullable String sampleMimeType = getSampleMimeType(containerMimeType, codecs);
|
@Nullable String sampleMimeType = getSampleMimeType(containerMimeType, codecs);
|
||||||
if (MimeTypes.AUDIO_E_AC3.equals(sampleMimeType)) {
|
if (MimeTypes.AUDIO_E_AC3.equals(sampleMimeType)) {
|
||||||
sampleMimeType = parseEac3SupplementalProperties(supplementalProperties);
|
sampleMimeType = parseEac3SupplementalProperties(supplementalProperties);
|
||||||
|
if (MimeTypes.AUDIO_E_AC3_JOC.equals(sampleMimeType)) {
|
||||||
|
codecs = Ac3Util.E_AC_3_CODEC_STRING;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
@C.SelectionFlags int selectionFlags = parseSelectionFlagsFromRoleDescriptors(roleDescriptors);
|
@C.SelectionFlags int selectionFlags = parseSelectionFlagsFromRoleDescriptors(roleDescriptors);
|
||||||
@C.RoleFlags int roleFlags = parseRoleFlagsFromRoleDescriptors(roleDescriptors);
|
@C.RoleFlags int roleFlags = parseRoleFlagsFromRoleDescriptors(roleDescriptors);
|
||||||
|
@ -26,6 +26,7 @@ import androidx.annotation.Nullable;
|
|||||||
import com.google.android.exoplayer2.C;
|
import com.google.android.exoplayer2.C;
|
||||||
import com.google.android.exoplayer2.Format;
|
import com.google.android.exoplayer2.Format;
|
||||||
import com.google.android.exoplayer2.ParserException;
|
import com.google.android.exoplayer2.ParserException;
|
||||||
|
import com.google.android.exoplayer2.audio.Ac3Util;
|
||||||
import com.google.android.exoplayer2.drm.DrmInitData;
|
import com.google.android.exoplayer2.drm.DrmInitData;
|
||||||
import com.google.android.exoplayer2.drm.DrmInitData.SchemeData;
|
import com.google.android.exoplayer2.drm.DrmInitData.SchemeData;
|
||||||
import com.google.android.exoplayer2.extractor.mp4.PsshAtomUtil;
|
import com.google.android.exoplayer2.extractor.mp4.PsshAtomUtil;
|
||||||
@ -515,6 +516,7 @@ public final class HlsPlaylistParser implements ParsingLoadable.Parser<HlsPlayli
|
|||||||
formatBuilder.setChannelCount(channelCount);
|
formatBuilder.setChannelCount(channelCount);
|
||||||
if (MimeTypes.AUDIO_E_AC3.equals(sampleMimeType) && channelsString.endsWith("/JOC")) {
|
if (MimeTypes.AUDIO_E_AC3.equals(sampleMimeType) && channelsString.endsWith("/JOC")) {
|
||||||
sampleMimeType = MimeTypes.AUDIO_E_AC3_JOC;
|
sampleMimeType = MimeTypes.AUDIO_E_AC3_JOC;
|
||||||
|
formatBuilder.setCodecs(Ac3Util.E_AC_3_CODEC_STRING);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
formatBuilder.setSampleMimeType(sampleMimeType);
|
formatBuilder.setSampleMimeType(sampleMimeType);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user