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:
parent
02a2d5f932
commit
bccffb017d
@ -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]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -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;
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user