Commit 1ca9a061 by andrewlewis Committed by Oliver Woodman

Split AAC utils out of CodecSpecificDataUtil

PiperOrigin-RevId: 297823929
parent ffdc5805
...@@ -28,7 +28,6 @@ import com.google.android.exoplayer2.Format; ...@@ -28,7 +28,6 @@ import com.google.android.exoplayer2.Format;
import com.google.android.exoplayer2.PlaybackParameters; import com.google.android.exoplayer2.PlaybackParameters;
import com.google.android.exoplayer2.audio.AudioProcessor.UnhandledAudioFormatException; import com.google.android.exoplayer2.audio.AudioProcessor.UnhandledAudioFormatException;
import com.google.android.exoplayer2.util.Assertions; import com.google.android.exoplayer2.util.Assertions;
import com.google.android.exoplayer2.util.CodecSpecificDataUtil;
import com.google.android.exoplayer2.util.Log; import com.google.android.exoplayer2.util.Log;
import com.google.android.exoplayer2.util.Util; import com.google.android.exoplayer2.util.Util;
import java.nio.ByteBuffer; import java.nio.ByteBuffer;
...@@ -1258,14 +1257,14 @@ public final class DefaultAudioSink implements AudioSink { ...@@ -1258,14 +1257,14 @@ public final class DefaultAudioSink implements AudioSink {
case C.ENCODING_MP3: case C.ENCODING_MP3:
return MpegAudioUtil.parseMpegAudioFrameSampleCount(buffer.get(buffer.position())); return MpegAudioUtil.parseMpegAudioFrameSampleCount(buffer.get(buffer.position()));
case C.ENCODING_AAC_LC: case C.ENCODING_AAC_LC:
return CodecSpecificDataUtil.AAC_LC_AUDIO_SAMPLE_COUNT; return AacUtil.AAC_LC_AUDIO_SAMPLE_COUNT;
case C.ENCODING_AAC_HE_V1: case C.ENCODING_AAC_HE_V1:
case C.ENCODING_AAC_HE_V2: case C.ENCODING_AAC_HE_V2:
return CodecSpecificDataUtil.AAC_HE_AUDIO_SAMPLE_COUNT; return AacUtil.AAC_HE_AUDIO_SAMPLE_COUNT;
case C.ENCODING_AAC_XHE: case C.ENCODING_AAC_XHE:
return CodecSpecificDataUtil.AAC_XHE_AUDIO_SAMPLE_COUNT; return AacUtil.AAC_XHE_AUDIO_SAMPLE_COUNT;
case C.ENCODING_AAC_ELD: case C.ENCODING_AAC_ELD:
return CodecSpecificDataUtil.AAC_LD_AUDIO_SAMPLE_COUNT; return AacUtil.AAC_LD_AUDIO_SAMPLE_COUNT;
case C.ENCODING_DTS: case C.ENCODING_DTS:
case C.ENCODING_DTS_HD: case C.ENCODING_DTS_HD:
return DtsUtil.parseDtsAudioSampleCount(buffer); return DtsUtil.parseDtsAudioSampleCount(buffer);
......
...@@ -18,9 +18,8 @@ package com.google.android.exoplayer2.extractor.flv; ...@@ -18,9 +18,8 @@ package com.google.android.exoplayer2.extractor.flv;
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.AacUtil;
import com.google.android.exoplayer2.extractor.TrackOutput; import com.google.android.exoplayer2.extractor.TrackOutput;
import com.google.android.exoplayer2.util.CodecSpecificDataUtil;
import com.google.android.exoplayer2.util.CodecSpecificDataUtil.AacConfig;
import com.google.android.exoplayer2.util.MimeTypes; import com.google.android.exoplayer2.util.MimeTypes;
import com.google.android.exoplayer2.util.ParsableByteArray; import com.google.android.exoplayer2.util.ParsableByteArray;
import java.util.Collections; import java.util.Collections;
...@@ -109,8 +108,7 @@ import java.util.Collections; ...@@ -109,8 +108,7 @@ import java.util.Collections;
// Parse the sequence header. // Parse the sequence header.
byte[] audioSpecificConfig = new byte[data.bytesLeft()]; byte[] audioSpecificConfig = new byte[data.bytesLeft()];
data.readBytes(audioSpecificConfig, 0, audioSpecificConfig.length); data.readBytes(audioSpecificConfig, 0, audioSpecificConfig.length);
AacConfig aacConfig = AacUtil.Config aacConfig = AacUtil.parseAudioSpecificConfig(audioSpecificConfig);
CodecSpecificDataUtil.parseAacAudioSpecificConfig(audioSpecificConfig);
Format format = Format format =
new Format.Builder() new Format.Builder()
.setSampleMimeType(MimeTypes.AUDIO_AAC) .setSampleMimeType(MimeTypes.AUDIO_AAC)
......
...@@ -22,6 +22,7 @@ import androidx.annotation.Nullable; ...@@ -22,6 +22,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.AacUtil;
import com.google.android.exoplayer2.audio.Ac3Util; import com.google.android.exoplayer2.audio.Ac3Util;
import com.google.android.exoplayer2.audio.Ac4Util; import com.google.android.exoplayer2.audio.Ac4Util;
import com.google.android.exoplayer2.drm.DrmInitData; import com.google.android.exoplayer2.drm.DrmInitData;
...@@ -29,7 +30,6 @@ import com.google.android.exoplayer2.extractor.GaplessInfoHolder; ...@@ -29,7 +30,6 @@ import com.google.android.exoplayer2.extractor.GaplessInfoHolder;
import com.google.android.exoplayer2.metadata.Metadata; import com.google.android.exoplayer2.metadata.Metadata;
import com.google.android.exoplayer2.util.Assertions; import com.google.android.exoplayer2.util.Assertions;
import com.google.android.exoplayer2.util.CodecSpecificDataUtil; import com.google.android.exoplayer2.util.CodecSpecificDataUtil;
import com.google.android.exoplayer2.util.CodecSpecificDataUtil.AacConfig;
import com.google.android.exoplayer2.util.Log; import com.google.android.exoplayer2.util.Log;
import com.google.android.exoplayer2.util.MimeTypes; import com.google.android.exoplayer2.util.MimeTypes;
import com.google.android.exoplayer2.util.ParsableByteArray; import com.google.android.exoplayer2.util.ParsableByteArray;
...@@ -1184,8 +1184,7 @@ import org.checkerframework.checker.nullness.compatqual.NullableType; ...@@ -1184,8 +1184,7 @@ import org.checkerframework.checker.nullness.compatqual.NullableType;
if (MimeTypes.AUDIO_AAC.equals(mimeType) && initializationData != null) { if (MimeTypes.AUDIO_AAC.equals(mimeType) && initializationData != null) {
// Update sampleRate and channelCount from the AudioSpecificConfig initialization data, // Update sampleRate and channelCount from the AudioSpecificConfig initialization data,
// which is more reliable. See [Internal: b/10903778]. // which is more reliable. See [Internal: b/10903778].
AacConfig aacConfig = AacUtil.Config aacConfig = AacUtil.parseAudioSpecificConfig(initializationData);
CodecSpecificDataUtil.parseAacAudioSpecificConfig(initializationData);
sampleRate = aacConfig.sampleRateHz; sampleRate = aacConfig.sampleRateHz;
channelCount = aacConfig.channelCount; channelCount = aacConfig.channelCount;
codecs = aacConfig.codecs; codecs = aacConfig.codecs;
......
...@@ -19,13 +19,12 @@ import androidx.annotation.Nullable; ...@@ -19,13 +19,12 @@ 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.AacUtil;
import com.google.android.exoplayer2.extractor.DummyTrackOutput; import com.google.android.exoplayer2.extractor.DummyTrackOutput;
import com.google.android.exoplayer2.extractor.ExtractorOutput; import com.google.android.exoplayer2.extractor.ExtractorOutput;
import com.google.android.exoplayer2.extractor.TrackOutput; import com.google.android.exoplayer2.extractor.TrackOutput;
import com.google.android.exoplayer2.extractor.ts.TsPayloadReader.TrackIdGenerator; import com.google.android.exoplayer2.extractor.ts.TsPayloadReader.TrackIdGenerator;
import com.google.android.exoplayer2.util.Assertions; import com.google.android.exoplayer2.util.Assertions;
import com.google.android.exoplayer2.util.CodecSpecificDataUtil;
import com.google.android.exoplayer2.util.CodecSpecificDataUtil.AacConfig;
import com.google.android.exoplayer2.util.Log; import com.google.android.exoplayer2.util.Log;
import com.google.android.exoplayer2.util.MimeTypes; import com.google.android.exoplayer2.util.MimeTypes;
import com.google.android.exoplayer2.util.ParsableBitArray; import com.google.android.exoplayer2.util.ParsableBitArray;
...@@ -467,9 +466,9 @@ public final class AdtsReader implements ElementaryStreamReader { ...@@ -467,9 +466,9 @@ public final class AdtsReader implements ElementaryStreamReader {
int channelConfig = adtsScratch.readBits(3); int channelConfig = adtsScratch.readBits(3);
byte[] audioSpecificConfig = byte[] audioSpecificConfig =
CodecSpecificDataUtil.buildAacAudioSpecificConfig( AacUtil.buildAudioSpecificConfig(
audioObjectType, firstFrameSampleRateIndex, channelConfig); audioObjectType, firstFrameSampleRateIndex, channelConfig);
AacConfig aacConfig = CodecSpecificDataUtil.parseAacAudioSpecificConfig(audioSpecificConfig); AacUtil.Config aacConfig = AacUtil.parseAudioSpecificConfig(audioSpecificConfig);
Format format = Format format =
new Format.Builder() new Format.Builder()
.setId(formatId) .setId(formatId)
......
...@@ -19,12 +19,11 @@ import androidx.annotation.Nullable; ...@@ -19,12 +19,11 @@ 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.AacUtil;
import com.google.android.exoplayer2.extractor.ExtractorOutput; import com.google.android.exoplayer2.extractor.ExtractorOutput;
import com.google.android.exoplayer2.extractor.TrackOutput; import com.google.android.exoplayer2.extractor.TrackOutput;
import com.google.android.exoplayer2.extractor.ts.TsPayloadReader.TrackIdGenerator; import com.google.android.exoplayer2.extractor.ts.TsPayloadReader.TrackIdGenerator;
import com.google.android.exoplayer2.util.Assertions; import com.google.android.exoplayer2.util.Assertions;
import com.google.android.exoplayer2.util.CodecSpecificDataUtil;
import com.google.android.exoplayer2.util.CodecSpecificDataUtil.AacConfig;
import com.google.android.exoplayer2.util.MimeTypes; import com.google.android.exoplayer2.util.MimeTypes;
import com.google.android.exoplayer2.util.ParsableBitArray; import com.google.android.exoplayer2.util.ParsableBitArray;
import com.google.android.exoplayer2.util.ParsableByteArray; import com.google.android.exoplayer2.util.ParsableByteArray;
...@@ -273,8 +272,7 @@ public final class LatmReader implements ElementaryStreamReader { ...@@ -273,8 +272,7 @@ public final class LatmReader implements ElementaryStreamReader {
private int parseAudioSpecificConfig(ParsableBitArray data) throws ParserException { private int parseAudioSpecificConfig(ParsableBitArray data) throws ParserException {
int bitsLeft = data.bitsLeft(); int bitsLeft = data.bitsLeft();
AacConfig config = AacUtil.Config config = AacUtil.parseAudioSpecificConfig(data, /* forceReadToEnd= */ true);
CodecSpecificDataUtil.parseAacAudioSpecificConfig(data, /* forceReadToEnd= */ true);
sampleRateHz = config.sampleRateHz; sampleRateHz = config.sampleRateHz;
channelCount = config.channelCount; channelCount = config.channelCount;
return bitsLeft - data.bitsLeft(); return bitsLeft - data.bitsLeft();
......
...@@ -23,6 +23,7 @@ import androidx.annotation.Nullable; ...@@ -23,6 +23,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.AacUtil;
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;
...@@ -687,7 +688,7 @@ public class SsManifestParser implements ParsingLoadable.Parser<SsManifest> { ...@@ -687,7 +688,7 @@ public class SsManifestParser implements ParsingLoadable.Parser<SsManifest> {
if (codecSpecificData.isEmpty() && MimeTypes.AUDIO_AAC.equals(sampleMimeType)) { if (codecSpecificData.isEmpty() && MimeTypes.AUDIO_AAC.equals(sampleMimeType)) {
codecSpecificData = codecSpecificData =
Collections.singletonList( Collections.singletonList(
CodecSpecificDataUtil.buildAacLcAudioSpecificConfig(sampleRate, channelCount)); AacUtil.buildAacLcAudioSpecificConfig(sampleRate, channelCount));
} }
formatBuilder formatBuilder
.setContainerMimeType(MimeTypes.AUDIO_MP4) .setContainerMimeType(MimeTypes.AUDIO_MP4)
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or sign in to comment