aboutsummaryrefslogtreecommitdiff
path: root/usbtuner/src/com/android/usbtuner/exoplayer/MpegTsSampleSourceExtractor.java
diff options
context:
space:
mode:
Diffstat (limited to 'usbtuner/src/com/android/usbtuner/exoplayer/MpegTsSampleSourceExtractor.java')
-rw-r--r--usbtuner/src/com/android/usbtuner/exoplayer/MpegTsSampleSourceExtractor.java62
1 files changed, 39 insertions, 23 deletions
diff --git a/usbtuner/src/com/android/usbtuner/exoplayer/MpegTsSampleSourceExtractor.java b/usbtuner/src/com/android/usbtuner/exoplayer/MpegTsSampleSourceExtractor.java
index 7a6cbf10..7a7248be 100644
--- a/usbtuner/src/com/android/usbtuner/exoplayer/MpegTsSampleSourceExtractor.java
+++ b/usbtuner/src/com/android/usbtuner/exoplayer/MpegTsSampleSourceExtractor.java
@@ -18,12 +18,13 @@ package com.android.usbtuner.exoplayer;
import android.media.MediaDataSource;
-import com.google.android.exoplayer.C;
+import com.google.android.exoplayer.MediaFormat;
import com.google.android.exoplayer.MediaFormatHolder;
+import com.google.android.exoplayer.MediaFormatUtil;
import com.google.android.exoplayer.SampleHolder;
import com.google.android.exoplayer.SampleSource;
-import com.google.android.exoplayer.TrackInfo;
import com.google.android.exoplayer.util.MimeTypes;
+import com.android.usbtuner.exoplayer.cache.CacheManager;
import com.android.usbtuner.tvinput.PlaybackCacheListener;
import java.io.IOException;
@@ -38,7 +39,7 @@ public final class MpegTsSampleSourceExtractor implements SampleExtractor {
private static final int CC_BUFFER_SIZE_IN_BYTES = 9600 / 8;
private final SampleExtractor mSampleExtractor;
- private TrackInfo[] mTrackInfos;
+ private MediaFormat[] mTrackFormats;
private boolean[] mGotEos;
private int mVideoTrackIndex;
private int mCea708TextTrackIndex;
@@ -56,16 +57,34 @@ public final class MpegTsSampleSourceExtractor implements SampleExtractor {
mCea708TextTrackSelected = false;
}
+ /**
+ * Creates MpegTsSampleSourceExtractor for {@link MediaDataSource}.
+ *
+ * @param source the {@link MediaDataSource} to extract from
+ * @param cacheManager the manager for reading & writing samples backed by physical storage
+ * @param cacheListener the {@link com.android.usbtuner.tvinput.PlaybackCacheListener}
+ * to notify cache storage status change
+ */
public MpegTsSampleSourceExtractor(MediaDataSource source,
CacheManager cacheManager, PlaybackCacheListener cacheListener) {
if (cacheManager == null || cacheManager.isDisabled()) {
- mSampleExtractor = new SimpleSampleSourceExtractor(source, cacheListener);
+ mSampleExtractor =
+ new PlaySampleExtractor(source, cacheManager, cacheListener, false);
+
} else {
- mSampleExtractor = new CachedSampleSourceExtractor(source, cacheManager, cacheListener);
+ mSampleExtractor =
+ new PlaySampleExtractor(source, cacheManager, cacheListener, true);
}
init();
}
+ /**
+ * Creates MpegTsSampleSourceExtractor for a recorded program.
+ *
+ * @param cacheManager the samples provider which is stored in physical storage
+ * @param cacheListener the {@link com.android.usbtuner.tvinput.PlaybackCacheListener}
+ * to notify cache storage status change
+ */
public MpegTsSampleSourceExtractor(CacheManager cacheManager,
PlaybackCacheListener cacheListener) {
mSampleExtractor = new ReplaySampleSourceExtractor(cacheManager, cacheListener);
@@ -74,13 +93,15 @@ public final class MpegTsSampleSourceExtractor implements SampleExtractor {
@Override
public boolean prepare() throws IOException {
- mSampleExtractor.prepare();
- TrackInfo trackInfos[] = mSampleExtractor.getTrackInfos();
- int trackCount = trackInfos.length;
+ if(!mSampleExtractor.prepare()) {
+ return false;
+ }
+ MediaFormat trackFormats[] = mSampleExtractor.getTrackFormats();
+ int trackCount = trackFormats.length;
mGotEos = new boolean[trackCount];
for (int i = 0; i < trackCount; ++i) {
- String mime = trackInfos[i].mimeType;
+ String mime = trackFormats[i].mimeType;
if (MimeTypes.isVideo(mime) && mVideoTrackIndex == -1) {
mVideoTrackIndex = i;
if (android.media.MediaFormat.MIMETYPE_VIDEO_MPEG2.equals(mime)) {
@@ -94,18 +115,18 @@ public final class MpegTsSampleSourceExtractor implements SampleExtractor {
if (mVideoTrackIndex != -1) {
mCea708TextTrackIndex = trackCount;
}
- mTrackInfos = new TrackInfo[mCea708TextTrackIndex < 0 ? trackCount : trackCount + 1];
- System.arraycopy(trackInfos, 0, mTrackInfos, 0, trackCount);
+ mTrackFormats = new MediaFormat[mCea708TextTrackIndex < 0 ? trackCount : trackCount + 1];
+ System.arraycopy(trackFormats, 0, mTrackFormats, 0, trackCount);
if (mCea708TextTrackIndex >= 0) {
- mTrackInfos[trackCount] = new TrackInfo(MIMETYPE_TEXT_CEA_708,
- trackCount > 0 ? mTrackInfos[0].durationUs : C.UNKNOWN_TIME_US);
+ mTrackFormats[trackCount] = MediaFormatUtil.createTextMediaFormat(MIMETYPE_TEXT_CEA_708,
+ mTrackFormats[0].durationUs);
}
return true;
}
@Override
- public TrackInfo[] getTrackInfos() {
- return mTrackInfos;
+ public MediaFormat[] getTrackFormats() {
+ return mTrackFormats;
}
@Override
@@ -137,9 +158,9 @@ public final class MpegTsSampleSourceExtractor implements SampleExtractor {
}
@Override
- public void getTrackMediaFormat(int track, MediaFormatHolder mediaFormatHolder) {
+ public void getTrackMediaFormat(int track, MediaFormatHolder outMediaFormatHolder) {
if (track != mCea708TextTrackIndex) {
- mSampleExtractor.getTrackMediaFormat(track, mediaFormatHolder);
+ mSampleExtractor.getTrackMediaFormat(track, outMediaFormatHolder);
}
}
@@ -163,12 +184,7 @@ public final class MpegTsSampleSourceExtractor implements SampleExtractor {
return mGotEos[track] ? SampleSource.END_OF_STREAM : SampleSource.NOTHING_READ;
}
- int result;
- try {
- result = mSampleExtractor.readSample(track, sampleHolder);
- } catch (IOException ex) {
- return SampleSource.NOTHING_READ;
- }
+ int result = mSampleExtractor.readSample(track, sampleHolder);
switch (result) {
case SampleSource.END_OF_STREAM: {
mGotEos[track] = true;