From e5acc5a2c86466c26917f810deff2455f9b4272b Mon Sep 17 00:00:00 2001 From: Sergio Moreno Mozota Date: Mon, 13 Apr 2015 16:54:24 +0200 Subject: [PATCH] resync with Extractor changes --- .../parser => extractor/ts}/MpaReader.java | 31 ++++++++++--------- .../exoplayer/extractor/ts/TsExtractor.java | 4 ++- .../android/exoplayer/util/MimeTypes.java | 1 - 3 files changed, 19 insertions(+), 17 deletions(-) rename library/src/main/java/com/google/android/exoplayer/{hls/parser => extractor/ts}/MpaReader.java (93%) diff --git a/library/src/main/java/com/google/android/exoplayer/hls/parser/MpaReader.java b/library/src/main/java/com/google/android/exoplayer/extractor/ts/MpaReader.java similarity index 93% rename from library/src/main/java/com/google/android/exoplayer/hls/parser/MpaReader.java rename to library/src/main/java/com/google/android/exoplayer/extractor/ts/MpaReader.java index 69e9ece08f..2131f2f7a5 100644 --- a/library/src/main/java/com/google/android/exoplayer/hls/parser/MpaReader.java +++ b/library/src/main/java/com/google/android/exoplayer/extractor/ts/MpaReader.java @@ -13,11 +13,11 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.google.android.exoplayer.hls.parser; +package com.google.android.exoplayer.extractor.ts; import com.google.android.exoplayer.C; import com.google.android.exoplayer.MediaFormat; -import com.google.android.exoplayer.upstream.BufferPool; +import com.google.android.exoplayer.extractor.TrackOutput; import com.google.android.exoplayer.util.CodecSpecificDataUtil; import com.google.android.exoplayer.util.MimeTypes; import com.google.android.exoplayer.util.ParsableBitArray; @@ -48,7 +48,8 @@ import java.util.Collections; // Used to find the header. private boolean hasCrc; - // Parsed from the header. + // Used when parsing the header. + private boolean hasOutputFormat; private long frameDurationUs; private int sampleSize; @@ -149,8 +150,8 @@ import java.util.Collections; 1 // Layer3 }; - public MpaReader(BufferPool bufferPool) { - super(bufferPool); + public MpaReader(TrackOutput output) { + super(output); mpaScratch = new ParsableBitArray(new byte[HEADER_SIZE + CRC_SIZE]); state = STATE_FINDING_SYNC; } @@ -171,18 +172,17 @@ import java.util.Collections; case STATE_READING_HEADER: int targetLength = hasCrc ? HEADER_SIZE + CRC_SIZE : HEADER_SIZE; if (continueRead(data, mpaScratch.getData(), targetLength)) { - startSample(timeUs); parseHeader(); - bytesRead = 0; + bytesRead = targetLength; state = STATE_READING_SAMPLE; } break; case STATE_READING_SAMPLE: int bytesToRead = Math.min(data.bytesLeft(), sampleSize - bytesRead); - appendData(data, bytesToRead); + output.sampleData(data, bytesToRead); bytesRead += bytesToRead; if (bytesRead == sampleSize) { - commitSample(true); + output.sampleMetadata(timeUs, C.SAMPLE_FLAG_SYNC, sampleSize, 0, null); timeUs += frameDurationUs; bytesRead = 0; state = STATE_FINDING_SYNC; @@ -243,7 +243,7 @@ import java.util.Collections; * @param LSF Low Sample rate Format (MPEG 2) * @param bitrate The bitrate in bits per second * @param samplesPerSec The sampling rate in hertz - * @param paddingSize + * @param -paddingSize * @return Frame size in bytes */ private static int CalcMpaFrameSize (int layer, int LSF, int bitrate, int samplesPerSec, int paddingSize) { @@ -255,9 +255,9 @@ import java.util.Collections; */ private void parseHeader() { int headerLength = hasCrc ? HEADER_SIZE + CRC_SIZE : HEADER_SIZE; - mpaScratch.setPosition(0); - if (!hasMediaFormat()) { + if (!hasOutputFormat) { + mpaScratch.setPosition(0); mpaScratch.skipBits(12); int isLSF = (!mpaScratch.readBit()) ? 1 : 0; int layer = mpaScratch.readBits(2) ^ 3; @@ -279,14 +279,15 @@ import java.util.Collections; MediaFormat mediaFormat = MediaFormat.createAudioFormat(/*isLSF == 1 ?*/ MimeTypes.AUDIO_MPEG/* : MimeTypes.AUDIO_MP1L2*/, MediaFormat.NO_VALUE, audioParams.second, audioParams.first, Collections.singletonList(audioSpecificConfig)); + output.format(mediaFormat); + hasOutputFormat = true; frameDurationUs = (C.MICROS_PER_SECOND * MPA_SAMPLES_PER_FRAME[isLSF][layer]) / mediaFormat.sampleRate; - setMediaFormat(mediaFormat); - sampleSize = CalcMpaFrameSize(layer, isLSF, bitRate * 1000, sampleRate, paddingBit) - headerLength; + sampleSize = CalcMpaFrameSize(layer, isLSF, bitRate * 1000, sampleRate, paddingBit); } mpaScratch.setPosition(0); ParsableByteArray header = new ParsableByteArray(mpaScratch.getData(),headerLength); - appendData(header, headerLength); + output.sampleData(header, headerLength); } } diff --git a/library/src/main/java/com/google/android/exoplayer/extractor/ts/TsExtractor.java b/library/src/main/java/com/google/android/exoplayer/extractor/ts/TsExtractor.java index 5e2fb1041a..4d66527f1b 100644 --- a/library/src/main/java/com/google/android/exoplayer/extractor/ts/TsExtractor.java +++ b/library/src/main/java/com/google/android/exoplayer/extractor/ts/TsExtractor.java @@ -248,8 +248,10 @@ public final class TsExtractor implements Extractor { ElementaryStreamReader pesPayloadReader = null; switch (streamType) { case TS_STREAM_TYPE_MPA: + pesPayloadReader = new MpaReader(output.track(TS_STREAM_TYPE_MPA)); + break; case TS_STREAM_TYPE_MPA_LSF: - pesPayloadReader = new MpaReader(bufferPool); + pesPayloadReader = new MpaReader(output.track(TS_STREAM_TYPE_MPA_LSF)); break; case TS_STREAM_TYPE_AAC: pesPayloadReader = new AdtsReader(output.track(TS_STREAM_TYPE_AAC)); diff --git a/library/src/main/java/com/google/android/exoplayer/util/MimeTypes.java b/library/src/main/java/com/google/android/exoplayer/util/MimeTypes.java index 1d66360951..9dcc1638ee 100644 --- a/library/src/main/java/com/google/android/exoplayer/util/MimeTypes.java +++ b/library/src/main/java/com/google/android/exoplayer/util/MimeTypes.java @@ -31,7 +31,6 @@ public class MimeTypes { public static final String VIDEO_VP9 = BASE_TYPE_VIDEO + "/x-vnd.on2.vp9"; public static final String VIDEO_MP4V = BASE_TYPE_VIDEO + "/mp4v-es"; - public static final String AUDIO_MPEG = BASE_TYPE_AUDIO + "/mpeg"; public static final String AUDIO_MP4 = BASE_TYPE_AUDIO + "/mp4"; public static final String AUDIO_AAC = BASE_TYPE_AUDIO + "/mp4a-latm"; public static final String AUDIO_AC3 = BASE_TYPE_AUDIO + "/ac3";