Cleanup - Make PesReader classes static.

This avoids accessing PtsTimestampAdjuster through a thunk method,
and allows the PesReader classes to be static, which is nice in
general.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=117220139
This commit is contained in:
olly 2016-03-15 02:47:22 -07:00 committed by Oliver Woodman
parent 02a2d5f932
commit bccffb017d
2 changed files with 27 additions and 26 deletions

View File

@ -24,7 +24,6 @@ import com.google.android.exoplayer.extractor.SeekMap;
import com.google.android.exoplayer.util.ParsableBitArray; import com.google.android.exoplayer.util.ParsableBitArray;
import com.google.android.exoplayer.util.ParsableByteArray; import com.google.android.exoplayer.util.ParsableByteArray;
import android.util.Log;
import android.util.SparseArray; import android.util.SparseArray;
import java.io.IOException; import java.io.IOException;
@ -34,8 +33,6 @@ import java.io.IOException;
*/ */
public final class PsExtractor implements Extractor { public final class PsExtractor implements Extractor {
private static final String TAG = "PsExtractor";
private static final int PACK_START_CODE = 0x000001BA; private static final int PACK_START_CODE = 0x000001BA;
private static final int SYSTEM_HEADER_START_CODE = 0x000001BB; private static final int SYSTEM_HEADER_START_CODE = 0x000001BB;
private static final int PACKET_START_CODE_PREFIX = 0x000001; private static final int PACKET_START_CODE_PREFIX = 0x000001;
@ -159,7 +156,6 @@ public final class PsExtractor implements Extractor {
input.skipFully(systemHeaderLength + 6); input.skipFully(systemHeaderLength + 6);
return RESULT_CONTINUE; return RESULT_CONTINUE;
} else if (((nextStartCode & 0xFFFFFF00) >> 8) != PACKET_START_CODE_PREFIX) { } else if (((nextStartCode & 0xFFFFFF00) >> 8) != PACKET_START_CODE_PREFIX) {
Log.w(TAG, "Missing PACKET_START_CODE_PREFIX!!");
input.skipFully(1); // Skip bytes until we see a valid start code again. input.skipFully(1); // Skip bytes until we see a valid start code again.
return RESULT_CONTINUE; return RESULT_CONTINUE;
} }
@ -172,30 +168,28 @@ public final class PsExtractor implements Extractor {
PesReader payloadReader = psPayloadReaders.get(streamId); PesReader payloadReader = psPayloadReaders.get(streamId);
if (!foundAllTracks) { if (!foundAllTracks) {
if (payloadReader == null) { if (payloadReader == null) {
if (streamId == PRIVATE_STREAM_1 && !foundAudioTrack) { ElementaryStreamReader elementaryStreamReader = null;
if (!foundAudioTrack && streamId == PRIVATE_STREAM_1) {
// Private stream, used for AC3 audio. // Private stream, used for AC3 audio.
// NOTE: This may need further parsing to determine if its DTS, // NOTE: This may need further parsing to determine if its DTS, but that's likely only
// but that's likely only valid for DVDs. // valid for DVDs.
payloadReader = new PesReader(new Ac3Reader(output.track(streamId), false)); elementaryStreamReader = new Ac3Reader(output.track(streamId), false);
psPayloadReaders.put(streamId, payloadReader);
foundAudioTrack = true; foundAudioTrack = true;
Log.d(TAG, "Setup payload reader for AC3"); } else if (!foundAudioTrack && (streamId & AUDIO_STREAM_MASK) == AUDIO_STREAM) {
} else if ((streamId & AUDIO_STREAM_MASK) == AUDIO_STREAM && !foundAudioTrack) { elementaryStreamReader = new MpegAudioReader(output.track(streamId));
payloadReader = new PesReader(new MpegAudioReader(output.track(streamId)));
psPayloadReaders.put(streamId, payloadReader);
foundAudioTrack = true; foundAudioTrack = true;
Log.d(TAG, "Setup payload reader for MP2"); } else if (!foundVideoTrack && (streamId & VIDEO_STREAM_MASK) == VIDEO_STREAM) {
} else if ((streamId & VIDEO_STREAM_MASK) == VIDEO_STREAM && !foundVideoTrack) { elementaryStreamReader = new H262Reader(output.track(streamId));
payloadReader = new PesReader(new H262Reader(output.track(streamId)));
psPayloadReaders.put(streamId, payloadReader);
foundVideoTrack = true; foundVideoTrack = true;
Log.d(TAG, "Setup payload reader for MPEG2Video"); }
if (elementaryStreamReader != null) {
payloadReader = new PesReader(elementaryStreamReader, ptsTimestampAdjuster);
psPayloadReaders.put(streamId, payloadReader);
} }
} }
if ((foundAudioTrack && foundVideoTrack) || input.getPosition() > MAX_SEARCH_LENGTH) { if ((foundAudioTrack && foundVideoTrack) || input.getPosition() > MAX_SEARCH_LENGTH) {
foundAllTracks = true; foundAllTracks = true;
output.endTracks(); output.endTracks();
Log.d(TAG, "Signalled that all tracks were found");
} }
} }
@ -229,12 +223,13 @@ public final class PsExtractor implements Extractor {
/** /**
* Parses PES packet data and extracts samples. * Parses PES packet data and extracts samples.
*/ */
private class PesReader { private static final class PesReader {
private static final int PES_SCRATCH_SIZE = 64; private static final int PES_SCRATCH_SIZE = 64;
private final ParsableBitArray pesScratch;
private final ElementaryStreamReader pesPayloadReader; private final ElementaryStreamReader pesPayloadReader;
private final PtsTimestampAdjuster ptsTimestampAdjuster;
private final ParsableBitArray pesScratch;
private boolean ptsFlag; private boolean ptsFlag;
private boolean dtsFlag; private boolean dtsFlag;
@ -242,8 +237,10 @@ public final class PsExtractor implements Extractor {
private int extendedHeaderLength; private int extendedHeaderLength;
private long timeUs; private long timeUs;
public PesReader(ElementaryStreamReader pesPayloadReader) { public PesReader(ElementaryStreamReader pesPayloadReader,
PtsTimestampAdjuster ptsTimestampAdjuster) {
this.pesPayloadReader = pesPayloadReader; this.pesPayloadReader = pesPayloadReader;
this.ptsTimestampAdjuster = ptsTimestampAdjuster;
pesScratch = new ParsableBitArray(new byte[PES_SCRATCH_SIZE]); pesScratch = new ParsableBitArray(new byte[PES_SCRATCH_SIZE]);
} }

View File

@ -372,7 +372,8 @@ public final class TsExtractor implements Extractor {
if (pesPayloadReader != null) { if (pesPayloadReader != null) {
streamTypes.put(streamType, true); streamTypes.put(streamType, true);
tsPayloadReaders.put(elementaryPid, new PesReader(pesPayloadReader)); tsPayloadReaders.put(elementaryPid,
new PesReader(pesPayloadReader, ptsTimestampAdjuster));
} }
} }
@ -423,7 +424,7 @@ public final class TsExtractor implements Extractor {
/** /**
* Parses PES packet data and extracts samples. * Parses PES packet data and extracts samples.
*/ */
private class PesReader extends TsPayloadReader { private static final class PesReader extends TsPayloadReader {
private static final int STATE_FINDING_HEADER = 0; private static final int STATE_FINDING_HEADER = 0;
private static final int STATE_READING_HEADER = 1; private static final int STATE_READING_HEADER = 1;
@ -434,8 +435,9 @@ public final class TsExtractor implements Extractor {
private static final int MAX_HEADER_EXTENSION_SIZE = 10; private static final int MAX_HEADER_EXTENSION_SIZE = 10;
private static final int PES_SCRATCH_SIZE = 10; // max(HEADER_SIZE, MAX_HEADER_EXTENSION_SIZE) private static final int PES_SCRATCH_SIZE = 10; // max(HEADER_SIZE, MAX_HEADER_EXTENSION_SIZE)
private final ParsableBitArray pesScratch;
private final ElementaryStreamReader pesPayloadReader; private final ElementaryStreamReader pesPayloadReader;
private final PtsTimestampAdjuster ptsTimestampAdjuster;
private final ParsableBitArray pesScratch;
private int state; private int state;
private int bytesRead; private int bytesRead;
@ -448,8 +450,10 @@ public final class TsExtractor implements Extractor {
private boolean dataAlignmentIndicator; private boolean dataAlignmentIndicator;
private long timeUs; private long timeUs;
public PesReader(ElementaryStreamReader pesPayloadReader) { public PesReader(ElementaryStreamReader pesPayloadReader,
PtsTimestampAdjuster ptsTimestampAdjuster) {
this.pesPayloadReader = pesPayloadReader; this.pesPayloadReader = pesPayloadReader;
this.ptsTimestampAdjuster = ptsTimestampAdjuster;
pesScratch = new ParsableBitArray(new byte[PES_SCRATCH_SIZE]); pesScratch = new ParsableBitArray(new byte[PES_SCRATCH_SIZE]);
state = STATE_FINDING_HEADER; state = STATE_FINDING_HEADER;
} }