aboutsummaryrefslogtreecommitdiff
path: root/tuner
diff options
context:
space:
mode:
authorNick Chalko <nchalko@google.com>2019-09-12 08:58:20 -0700
committerCopybara-Service <copybara-worker@google.com>2019-09-12 09:28:29 -0700
commit50b065b68a685d85b098527eb94184f7c4568c6e (patch)
treefc935647a182add7beb376c344a79c017dc1c303 /tuner
parentc73e0e4bda463d4d677752039d96a30f4cfcac11 (diff)
downloadTV-50b065b68a685d85b098527eb94184f7c4568c6e.tar.gz
Use AutoFactory for tuner module classes
Bug: 140282849 Test: m live-tv-tuner PiperOrigin-RevId: 268695510 Change-Id: I200d102d5df061397d6c87565b000ca3f569bc2b
Diffstat (limited to 'tuner')
-rw-r--r--tuner/build.gradle2
-rw-r--r--tuner/src/com/android/tv/tuner/exoplayer/ExoPlayerSampleExtractor.java35
-rw-r--r--tuner/src/com/android/tv/tuner/exoplayer/FileSampleExtractor.java23
-rw-r--r--tuner/src/com/android/tv/tuner/exoplayer/MpegTsRendererBuilder.java30
-rw-r--r--tuner/src/com/android/tv/tuner/exoplayer/MpegTsSampleExtractor.java35
-rw-r--r--tuner/src/com/android/tv/tuner/exoplayer/buffer/RecordingSampleBuffer.java24
-rw-r--r--tuner/src/com/android/tv/tuner/exoplayer/buffer/SampleChunkIoHelper.java18
-rw-r--r--tuner/src/com/android/tv/tuner/modules/TunerModule.java36
-rw-r--r--tuner/src/com/android/tv/tuner/tvinput/TunerRecordingSessionWorker.java10
-rw-r--r--tuner/src/com/android/tv/tuner/tvinput/TunerSessionWorker.java9
-rw-r--r--tuner/src/com/android/tv/tuner/tvinput/TunerSessionWorkerExoV2.java9
-rw-r--r--tuner/tests/robotests/javatests/com/android/tv/tuner/exoplayer/tests/SampleSourceExtractorTest.java6
-rw-r--r--tuner/tests/robotests/javatests/com/android/tv/tuner/tvinput/TunerSessionWorkerExoV2Test.java2
-rw-r--r--tuner/tests/robotests/javatests/com/android/tv/tuner/tvinput/TunerSessionWorkerTest.java1
-rw-r--r--tuner/tests/unittests/javatests/com/android/tv/tuner/ZappingTimeTest.java26
15 files changed, 233 insertions, 33 deletions
diff --git a/tuner/build.gradle b/tuner/build.gradle
index c1001c8e..b00b4609 100644
--- a/tuner/build.gradle
+++ b/tuner/build.gradle
@@ -69,7 +69,7 @@ dependencies {
implementation 'androidx.tvprovider:tvprovider:1.0.0'
implementation 'com.google.android.exoplayer:exoplayer:r1.5.16'
- implementation 'com.google.android.exoplayer:exoplayer-core:2.10.1'
+ api 'com.google.android.exoplayer:exoplayer-core:2.10.1'
annotationProcessor 'com.google.auto.factory:auto-factory:1.0-beta6'
implementation 'com.google.auto.factory:auto-factory:1.0-beta6'
implementation 'com.google.dagger:dagger:2.23'
diff --git a/tuner/src/com/android/tv/tuner/exoplayer/ExoPlayerSampleExtractor.java b/tuner/src/com/android/tv/tuner/exoplayer/ExoPlayerSampleExtractor.java
index 124e04dc..2a22db17 100644
--- a/tuner/src/com/android/tv/tuner/exoplayer/ExoPlayerSampleExtractor.java
+++ b/tuner/src/com/android/tv/tuner/exoplayer/ExoPlayerSampleExtractor.java
@@ -23,6 +23,7 @@ import android.os.HandlerThread;
import android.os.Looper;
import android.os.Message;
import android.os.SystemClock;
+import android.support.annotation.Nullable;
import android.support.annotation.VisibleForTesting;
import android.util.Pair;
@@ -31,6 +32,7 @@ import com.android.tv.tuner.exoplayer.buffer.BufferManager;
import com.android.tv.tuner.exoplayer.buffer.PlaybackBufferListener;
import com.android.tv.tuner.exoplayer.buffer.RecordingSampleBuffer;
import com.android.tv.tuner.exoplayer.buffer.SimpleSampleBuffer;
+
import com.google.android.exoplayer.MediaFormat;
import com.google.android.exoplayer.MediaFormatHolder;
import com.google.android.exoplayer.SampleHolder;
@@ -47,6 +49,8 @@ import com.google.android.exoplayer2.trackselection.FixedTrackSelection;
import com.google.android.exoplayer2.trackselection.TrackSelection;
import com.google.android.exoplayer2.upstream.DataSource;
import com.google.android.exoplayer2.upstream.DefaultAllocator;
+import com.google.auto.factory.AutoFactory;
+import com.google.auto.factory.Provided;
import java.io.IOException;
import java.util.ArrayList;
@@ -84,12 +88,29 @@ public class ExoPlayerSampleExtractor implements SampleExtractor {
private Handler mOnCompletionListenerHandler;
private IOException mError;
+ /**
+ * Factory for {@link ExoPlayerSampleExtractor}.
+ *
+ * <p>This wrapper class keeps other classes from needing to reference the {@link AutoFactory}
+ * generated class.
+ */
+ public interface Factory {
+ public ExoPlayerSampleExtractor create(
+ Uri uri,
+ DataSource source,
+ @Nullable BufferManager bufferManager,
+ PlaybackBufferListener bufferListener,
+ boolean isRecording);
+ }
+
+ @AutoFactory(implementing = Factory.class)
public ExoPlayerSampleExtractor(
Uri uri,
DataSource source,
- BufferManager bufferManager,
+ @Nullable BufferManager bufferManager,
PlaybackBufferListener bufferListener,
- boolean isRecording) {
+ boolean isRecording,
+ @Provided RecordingSampleBuffer.Factory recordingSampleBufferFactory) {
this(
uri,
source,
@@ -97,7 +118,8 @@ public class ExoPlayerSampleExtractor implements SampleExtractor {
bufferListener,
isRecording,
Looper.myLooper(),
- new HandlerThread("SourceReaderThread"));
+ new HandlerThread("SourceReaderThread"),
+ recordingSampleBufferFactory);
}
@VisibleForTesting
@@ -109,7 +131,8 @@ public class ExoPlayerSampleExtractor implements SampleExtractor {
PlaybackBufferListener bufferListener,
boolean isRecording,
Looper workerLooper,
- HandlerThread sourceReaderThread) {
+ HandlerThread sourceReaderThread,
+ RecordingSampleBuffer.Factory recordingSampleBufferFactory) {
// It'll be used as a timeshift file chunk name's prefix.
mId = System.currentTimeMillis();
@@ -124,7 +147,7 @@ public class ExoPlayerSampleExtractor implements SampleExtractor {
/* eventListener= */ error -> mError = error));
if (isRecording) {
mSampleBuffer =
- new RecordingSampleBuffer(
+ recordingSampleBufferFactory.create(
bufferManager,
bufferListener,
false,
@@ -134,7 +157,7 @@ public class ExoPlayerSampleExtractor implements SampleExtractor {
mSampleBuffer = new SimpleSampleBuffer(bufferListener);
} else {
mSampleBuffer =
- new RecordingSampleBuffer(
+ recordingSampleBufferFactory.create(
bufferManager,
bufferListener,
true,
diff --git a/tuner/src/com/android/tv/tuner/exoplayer/FileSampleExtractor.java b/tuner/src/com/android/tv/tuner/exoplayer/FileSampleExtractor.java
index d6685b2f..aaca043b 100644
--- a/tuner/src/com/android/tv/tuner/exoplayer/FileSampleExtractor.java
+++ b/tuner/src/com/android/tv/tuner/exoplayer/FileSampleExtractor.java
@@ -26,6 +26,8 @@ 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.auto.factory.AutoFactory;
+import com.google.auto.factory.Provided;
import java.io.IOException;
import java.util.ArrayList;
@@ -46,11 +48,28 @@ public class FileSampleExtractor implements SampleExtractor {
private final BufferManager mBufferManager;
private final PlaybackBufferListener mBufferListener;
private BufferManager.SampleBuffer mSampleBuffer;
+ private final RecordingSampleBuffer.Factory mRecordingSampleBufferFactory;
+
+ /**
+ * Factory for {@link FileSampleExtractor}}.
+ *
+ * <p>This wrapper class keeps other classes from needing to reference the {@link AutoFactory}
+ * generated class.
+ */
+ public interface Factory {
+ public FileSampleExtractor create(
+ BufferManager bufferManager, PlaybackBufferListener bufferListener);
+ }
- public FileSampleExtractor(BufferManager bufferManager, PlaybackBufferListener bufferListener) {
+ @AutoFactory(implementing = Factory.class)
+ public FileSampleExtractor(
+ BufferManager bufferManager,
+ PlaybackBufferListener bufferListener,
+ @Provided RecordingSampleBuffer.Factory recordingSampleBufferFactory) {
mBufferManager = bufferManager;
mBufferListener = bufferListener;
mTrackCount = -1;
+ mRecordingSampleBufferFactory = recordingSampleBufferFactory;
}
@Override
@@ -73,7 +92,7 @@ public class FileSampleExtractor implements SampleExtractor {
mTrackFormats.add(MediaFormatUtil.createMediaFormat(trackFormat.format));
}
mSampleBuffer =
- new RecordingSampleBuffer(
+ mRecordingSampleBufferFactory.create(
mBufferManager,
mBufferListener,
true,
diff --git a/tuner/src/com/android/tv/tuner/exoplayer/MpegTsRendererBuilder.java b/tuner/src/com/android/tv/tuner/exoplayer/MpegTsRendererBuilder.java
index a807adbb..f860631c 100644
--- a/tuner/src/com/android/tv/tuner/exoplayer/MpegTsRendererBuilder.java
+++ b/tuner/src/com/android/tv/tuner/exoplayer/MpegTsRendererBuilder.java
@@ -17,28 +17,51 @@
package com.android.tv.tuner.exoplayer;
import android.content.Context;
+import android.support.annotation.Nullable;
import com.android.tv.tuner.exoplayer.MpegTsPlayer.RendererBuilder;
import com.android.tv.tuner.exoplayer.MpegTsPlayer.RendererBuilderCallback;
import com.android.tv.tuner.exoplayer.audio.MpegTsDefaultAudioTrackRenderer;
import com.android.tv.tuner.exoplayer.buffer.BufferManager;
import com.android.tv.tuner.exoplayer.buffer.PlaybackBufferListener;
+
import com.google.android.exoplayer.MediaCodecSelector;
import com.google.android.exoplayer.SampleSource;
import com.google.android.exoplayer.TrackRenderer;
import com.google.android.exoplayer2.upstream.DataSource;
+import com.google.auto.factory.AutoFactory;
+import com.google.auto.factory.Provided;
/** Builder for renderer objects for {@link MpegTsPlayer}. */
public class MpegTsRendererBuilder implements RendererBuilder {
private final Context mContext;
private final BufferManager mBufferManager;
private final PlaybackBufferListener mBufferListener;
+ private final MpegTsSampleExtractor.Factory mMpegTsSampleExtractorFactory;
+
+ /**
+ * Factory for {@link MpegTsRendererBuilder}.
+ *
+ * <p>This wrapper class keeps other classes from needing to reference the {@link AutoFactory}
+ * generated class.
+ */
+ public interface Factory {
+ public MpegTsRendererBuilder create(
+ Context context,
+ @Nullable BufferManager bufferManager,
+ PlaybackBufferListener bufferListener);
+ }
+ @AutoFactory(implementing = Factory.class)
public MpegTsRendererBuilder(
- Context context, BufferManager bufferManager, PlaybackBufferListener bufferListener) {
+ Context context,
+ @Nullable BufferManager bufferManager,
+ PlaybackBufferListener bufferListener,
+ @Provided MpegTsSampleExtractor.Factory mpegTsSampleExtractorFactory) {
mContext = context;
mBufferManager = bufferManager;
mBufferListener = bufferListener;
+ mMpegTsSampleExtractorFactory = mpegTsSampleExtractorFactory;
}
@Override
@@ -47,8 +70,9 @@ public class MpegTsRendererBuilder implements RendererBuilder {
// Build the video and audio renderers.
SampleExtractor extractor =
dataSource == null
- ? new MpegTsSampleExtractor(mBufferManager, mBufferListener)
- : new MpegTsSampleExtractor(dataSource, mBufferManager, mBufferListener);
+ ? mMpegTsSampleExtractorFactory.create(mBufferManager, mBufferListener)
+ : mMpegTsSampleExtractorFactory.create(
+ dataSource, mBufferManager, mBufferListener);
SampleSource sampleSource = new MpegTsSampleSource(extractor);
MpegTsVideoTrackRenderer videoRenderer =
new MpegTsVideoTrackRenderer(
diff --git a/tuner/src/com/android/tv/tuner/exoplayer/MpegTsSampleExtractor.java b/tuner/src/com/android/tv/tuner/exoplayer/MpegTsSampleExtractor.java
index 0b4f980d..8d3668ef 100644
--- a/tuner/src/com/android/tv/tuner/exoplayer/MpegTsSampleExtractor.java
+++ b/tuner/src/com/android/tv/tuner/exoplayer/MpegTsSampleExtractor.java
@@ -18,16 +18,20 @@ package com.android.tv.tuner.exoplayer;
import android.net.Uri;
import android.os.Handler;
+import android.support.annotation.Nullable;
import com.android.tv.tuner.exoplayer.buffer.BufferManager;
import com.android.tv.tuner.exoplayer.buffer.PlaybackBufferListener;
import com.android.tv.tuner.exoplayer.buffer.SamplePool;
+
import com.google.android.exoplayer.MediaFormat;
import com.google.android.exoplayer.MediaFormatHolder;
import com.google.android.exoplayer.SampleHolder;
import com.google.android.exoplayer.SampleSource;
import com.google.android.exoplayer.util.MimeTypes;
import com.google.android.exoplayer2.upstream.DataSource;
+import com.google.auto.factory.AutoFactory;
+import com.google.auto.factory.Provided;
import java.io.IOException;
import java.nio.ByteBuffer;
@@ -60,18 +64,36 @@ public final class MpegTsSampleExtractor implements SampleExtractor {
}
/**
+ * Factory for {@link MpegTsSampleExtractor}.
+ *
+ * <p>This wrapper class keeps other classes from needing to reference the {@link AutoFactory}
+ * generated class.
+ */
+ public interface Factory {
+ public MpegTsSampleExtractor create(
+ BufferManager bufferManager, PlaybackBufferListener bufferListener);
+
+ public MpegTsSampleExtractor create(
+ DataSource source,
+ @Nullable BufferManager bufferManager,
+ PlaybackBufferListener bufferListener);
+ }
+
+ /**
* Creates MpegTsSampleExtractor for a {@link DataSource}.
*
* @param source the {@link DataSource} to extract from
* @param bufferManager the manager for reading & writing samples backed by physical storage
* @param bufferListener the {@link PlaybackBufferListener} to notify buffer storage status
*/
+ @AutoFactory(implementing = Factory.class)
public MpegTsSampleExtractor(
DataSource source,
- BufferManager bufferManager,
- PlaybackBufferListener bufferListener) {
+ @Nullable BufferManager bufferManager,
+ PlaybackBufferListener bufferListener,
+ @Provided ExoPlayerSampleExtractor.Factory exoPlayerSampleExtractorFactory) {
mSampleExtractor =
- new ExoPlayerSampleExtractor(
+ exoPlayerSampleExtractorFactory.create(
Uri.EMPTY, source, bufferManager, bufferListener, false);
init();
}
@@ -83,9 +105,12 @@ public final class MpegTsSampleExtractor implements SampleExtractor {
* @param bufferListener the {@link PlaybackBufferListener} to notify buffer storage status
* change
*/
+ @AutoFactory(implementing = Factory.class)
public MpegTsSampleExtractor(
- BufferManager bufferManager, PlaybackBufferListener bufferListener) {
- mSampleExtractor = new FileSampleExtractor(bufferManager, bufferListener);
+ BufferManager bufferManager,
+ PlaybackBufferListener bufferListener,
+ @Provided FileSampleExtractor.Factory fileSampleExtractorFactory) {
+ mSampleExtractor = fileSampleExtractorFactory.create(bufferManager, bufferListener);
init();
}
diff --git a/tuner/src/com/android/tv/tuner/exoplayer/buffer/RecordingSampleBuffer.java b/tuner/src/com/android/tv/tuner/exoplayer/buffer/RecordingSampleBuffer.java
index 00a34302..df2cd2e6 100644
--- a/tuner/src/com/android/tv/tuner/exoplayer/buffer/RecordingSampleBuffer.java
+++ b/tuner/src/com/android/tv/tuner/exoplayer/buffer/RecordingSampleBuffer.java
@@ -29,6 +29,8 @@ import com.google.android.exoplayer.MediaFormat;
import com.google.android.exoplayer.SampleHolder;
import com.google.android.exoplayer.SampleSource;
import com.google.android.exoplayer.util.Assertions;
+import com.google.auto.factory.AutoFactory;
+import com.google.auto.factory.Provided;
import java.io.IOException;
import java.lang.annotation.Retention;
@@ -71,6 +73,7 @@ public class RecordingSampleBuffer
private final BufferManager mBufferManager;
private final PlaybackBufferListener mBufferListener;
private final @BufferReason int mBufferReason;
+ private final SampleChunkIoHelper.Factory mSampleChunkIoHelperFactory;
private int mTrackCount;
private boolean[] mTrackSelected;
@@ -99,6 +102,20 @@ public class RecordingSampleBuffer
};
/**
+ * Factory for {@link RecordingSampleBuffer}.
+ *
+ * <p>This wrapper class keeps other classes from needing to reference the {@link AutoFactory}
+ * generated class.
+ */
+ public interface Factory {
+ public RecordingSampleBuffer create(
+ BufferManager bufferManager,
+ PlaybackBufferListener bufferListener,
+ boolean enableTrickplay,
+ @BufferReason int bufferReason);
+ }
+
+ /**
* Creates {@link BufferManager.SampleBuffer} with cached I/O backed by physical storage (e.g.
* trickplay,recording,recorded-playback).
*
@@ -107,17 +124,20 @@ public class RecordingSampleBuffer
* @param enableTrickplay {@code true} when trickplay should be enabled
* @param bufferReason the reason for caching samples {@link BufferReason}
*/
+ @AutoFactory(implementing = Factory.class)
public RecordingSampleBuffer(
BufferManager bufferManager,
PlaybackBufferListener bufferListener,
boolean enableTrickplay,
- @BufferReason int bufferReason) {
+ @BufferReason int bufferReason,
+ @Provided SampleChunkIoHelper.Factory sampleChunkIoHelperFactory) {
mBufferManager = bufferManager;
mBufferListener = bufferListener;
if (bufferListener != null) {
bufferListener.onBufferStateChanged(enableTrickplay);
}
mBufferReason = bufferReason;
+ mSampleChunkIoHelperFactory = sampleChunkIoHelperFactory;
}
@Override
@@ -130,7 +150,7 @@ public class RecordingSampleBuffer
mTrackSelected = new boolean[mTrackCount];
mReadSampleQueues = new ArrayList<>();
mSampleChunkIoHelper =
- new SampleChunkIoHelper(
+ mSampleChunkIoHelperFactory.create(
ids, mediaFormats, mBufferReason, mBufferManager, mSamplePool, mIoCallback);
for (int i = 0; i < mTrackCount; ++i) {
mReadSampleQueues.add(i, new SampleQueue(mSamplePool));
diff --git a/tuner/src/com/android/tv/tuner/exoplayer/buffer/SampleChunkIoHelper.java b/tuner/src/com/android/tv/tuner/exoplayer/buffer/SampleChunkIoHelper.java
index d16d0805..1454bdeb 100644
--- a/tuner/src/com/android/tv/tuner/exoplayer/buffer/SampleChunkIoHelper.java
+++ b/tuner/src/com/android/tv/tuner/exoplayer/buffer/SampleChunkIoHelper.java
@@ -31,6 +31,7 @@ import com.android.tv.tuner.exoplayer.buffer.RecordingSampleBuffer.BufferReason;
import com.google.android.exoplayer.MediaFormat;
import com.google.android.exoplayer.SampleHolder;
import com.google.android.exoplayer.util.MimeTypes;
+import com.google.auto.factory.AutoFactory;
import java.io.IOException;
import java.util.ArrayList;
@@ -114,6 +115,22 @@ public class SampleChunkIoHelper implements Handler.Callback {
}
/**
+ * Factory for {@link SampleChunkIoHelper}.
+ *
+ * <p>This wrapper class keeps other classes from needing to reference the {@link AutoFactory}
+ * generated class.
+ */
+ public interface Factory {
+ public SampleChunkIoHelper create(
+ List<String> ids,
+ List<MediaFormat> mediaFormats,
+ @BufferReason int bufferReason,
+ BufferManager bufferManager,
+ SamplePool samplePool,
+ IoCallback ioCallback);
+ }
+
+ /**
* Creates {@link SampleChunk} I/O handler.
*
* @param ids track names
@@ -123,6 +140,7 @@ public class SampleChunkIoHelper implements Handler.Callback {
* @param samplePool allocator for a sample
* @param ioCallback listeners for I/O events
*/
+ @AutoFactory(implementing = Factory.class)
public SampleChunkIoHelper(
List<String> ids,
List<MediaFormat> mediaFormats,
diff --git a/tuner/src/com/android/tv/tuner/modules/TunerModule.java b/tuner/src/com/android/tv/tuner/modules/TunerModule.java
index bf40fbe8..ff86e09f 100644
--- a/tuner/src/com/android/tv/tuner/modules/TunerModule.java
+++ b/tuner/src/com/android/tv/tuner/modules/TunerModule.java
@@ -15,6 +15,18 @@
*/
package com.android.tv.tuner.modules;
+import com.android.tv.tuner.exoplayer.ExoPlayerSampleExtractor;
+import com.android.tv.tuner.exoplayer.ExoPlayerSampleExtractorFactory;
+import com.android.tv.tuner.exoplayer.FileSampleExtractor;
+import com.android.tv.tuner.exoplayer.FileSampleExtractorFactory;
+import com.android.tv.tuner.exoplayer.MpegTsRendererBuilder;
+import com.android.tv.tuner.exoplayer.MpegTsRendererBuilderFactory;
+import com.android.tv.tuner.exoplayer.MpegTsSampleExtractor;
+import com.android.tv.tuner.exoplayer.MpegTsSampleExtractorFactory;
+import com.android.tv.tuner.exoplayer.buffer.RecordingSampleBuffer;
+import com.android.tv.tuner.exoplayer.buffer.RecordingSampleBufferFactory;
+import com.android.tv.tuner.exoplayer.buffer.SampleChunkIoHelper;
+import com.android.tv.tuner.exoplayer.buffer.SampleChunkIoHelperFactory;
import com.android.tv.tuner.source.TunerSourceModule;
import com.android.tv.tuner.tvinput.TunerRecordingSessionFactoryImpl;
import com.android.tv.tuner.tvinput.TunerRecordingSessionWorker;
@@ -61,4 +73,28 @@ public abstract class TunerModule {
@Binds
abstract TunerRecordingSessionFactory tunerRecordingSessionFactory(
TunerRecordingSessionFactoryImpl impl);
+
+ @Binds
+ abstract MpegTsRendererBuilder.Factory mpegTsRendererBuilderFactory(
+ MpegTsRendererBuilderFactory mpegTsRendererBuilderFactory);
+
+ @Binds
+ abstract MpegTsSampleExtractor.Factory mpegTsSampleExtractorFactory(
+ MpegTsSampleExtractorFactory mpegTsSampleExtractorFactory);
+
+ @Binds
+ abstract FileSampleExtractor.Factory fileSampleExtractorFactory(
+ FileSampleExtractorFactory fileSampleExtractorFactory);
+
+ @Binds
+ abstract RecordingSampleBuffer.Factory recordingSampleBufferFactory(
+ RecordingSampleBufferFactory recordingSampleBufferFactory);
+
+ @Binds
+ abstract ExoPlayerSampleExtractor.Factory exoPlayerSampleExtractorFactory(
+ ExoPlayerSampleExtractorFactory exoPlayerSampleExtractorFactory);
+
+ @Binds
+ abstract SampleChunkIoHelper.Factory sampleChunkIoHelperFactory(
+ SampleChunkIoHelperFactory sampleChunkIoHelperFactory);
}
diff --git a/tuner/src/com/android/tv/tuner/tvinput/TunerRecordingSessionWorker.java b/tuner/src/com/android/tv/tuner/tvinput/TunerRecordingSessionWorker.java
index 851593a4..97cd0572 100644
--- a/tuner/src/com/android/tv/tuner/tvinput/TunerRecordingSessionWorker.java
+++ b/tuner/src/com/android/tv/tuner/tvinput/TunerRecordingSessionWorker.java
@@ -172,6 +172,7 @@ public class TunerRecordingSessionWorker
private PsipData.EitItem mCurrenProgram;
private List<AtscCaptionTrack> mCaptionTracks;
private DvrStorageManager mDvrStorageManager;
+ private final ExoPlayerSampleExtractor.Factory mExoPlayerSampleExtractorFactory;
/**
* Factory for {@link TunerRecordingSessionWorker}}.
@@ -187,13 +188,15 @@ public class TunerRecordingSessionWorker
TunerRecordingSession session);
}
- @AutoFactory(implementing = TunerRecordingSessionWorker.Factory.class)
+ @AutoFactory(implementing = Factory.class)
public TunerRecordingSessionWorker(
Context context,
String inputId,
ChannelDataManager dataManager,
TunerRecordingSession session,
+ @Provided ExoPlayerSampleExtractor.Factory exoPlayerSampleExtractorFactory,
@Provided TsDataSourceManager.Factory tsDataSourceManagerFactory) {
+ mExoPlayerSampleExtractorFactory = exoPlayerSampleExtractorFactory;
mRandom.setSeed(System.nanoTime());
mContext = context;
HandlerThread handlerThread = new HandlerThread(TAG);
@@ -473,7 +476,7 @@ public class TunerRecordingSessionWorker
mRecordStartTime = System.currentTimeMillis();
mDvrStorageManager = new DvrStorageManager(mStorageDir, true);
mRecorder =
- new ExoPlayerSampleExtractor(
+ mExoPlayerSampleExtractorFactory.create(
Uri.EMPTY, mTunerSource, new BufferManager(mDvrStorageManager), this, true);
mRecorder.setOnCompletionListener(this, mHandler);
mProgramUri = programUri;
@@ -616,8 +619,7 @@ public class TunerRecordingSessionWorker
private void updateRecordedProgramStateFinished(long endTime, long totalBytes) {
ContentValues values = new ContentValues();
values.put(RecordedPrograms.COLUMN_RECORDING_DATA_BYTES, totalBytes);
- values.put(
- RecordedPrograms.COLUMN_RECORDING_DURATION_MILLIS, endTime - mRecordStartTime);
+ values.put(RecordedPrograms.COLUMN_RECORDING_DURATION_MILLIS, endTime - mRecordStartTime);
values.put(RecordedPrograms.COLUMN_END_TIME_UTC_MILLIS, endTime);
if (checkRecordedProgramTable(COLUMN_STATE)) {
values.put(COLUMN_STATE, RecordedProgramState.FINISHED.name());
diff --git a/tuner/src/com/android/tv/tuner/tvinput/TunerSessionWorker.java b/tuner/src/com/android/tv/tuner/tvinput/TunerSessionWorker.java
index f9bc734a..6faa11af 100644
--- a/tuner/src/com/android/tv/tuner/tvinput/TunerSessionWorker.java
+++ b/tuner/src/com/android/tv/tuner/tvinput/TunerSessionWorker.java
@@ -194,6 +194,7 @@ public class TunerSessionWorker
private final File mTrickplayBufferDir;
private final @TRICKPLAY_MODE int mTrickplayModeCustomization;
private final LegacyFlags mLegacyFlags;
+ private final MpegTsRendererBuilder.Factory mMpegTsRendererBuilderFactory;
private volatile Surface mSurface;
private volatile float mVolume = 1.0f;
private volatile boolean mCaptionEnabled;
@@ -258,7 +259,7 @@ public class TunerSessionWorker
TunerSessionOverlay tunerSessionOverlay);
}
- @AutoFactory(implementing = TunerSessionWorker.Factory.class)
+ @AutoFactory(implementing = Factory.class)
public TunerSessionWorker(
Context context,
ChannelDataManager channelDataManager,
@@ -266,6 +267,7 @@ public class TunerSessionWorker
TunerSessionOverlay tunerSessionOverlay,
@Provided ConcurrentDvrPlaybackFlags concurrentDvrPlaybackFlags,
@Provided LegacyFlags legacyFlags,
+ @Provided MpegTsRendererBuilder.Factory mpegTsRendererBuilderFactory,
@Provided TsDataSourceManager.Factory tsDataSourceManagerFactory) {
this(
context,
@@ -275,6 +277,7 @@ public class TunerSessionWorker
null,
concurrentDvrPlaybackFlags,
legacyFlags,
+ mpegTsRendererBuilderFactory,
tsDataSourceManagerFactory);
}
@@ -287,6 +290,7 @@ public class TunerSessionWorker
@Nullable Handler handler,
ConcurrentDvrPlaybackFlags concurrentDvrPlaybackFlags,
LegacyFlags legacyFlags,
+ MpegTsRendererBuilder.Factory mpegTsRendererBuilderFactory,
TsDataSourceManager.Factory tsDataSourceManagerFactory) {
this.mConcurrentDvrPlaybackFlags = concurrentDvrPlaybackFlags;
mLegacyFlags = legacyFlags;
@@ -304,6 +308,7 @@ public class TunerSessionWorker
mSession = tunerSession;
mTunerSessionOverlay = tunerSessionOverlay;
mChannelDataManager = channelDataManager;
+ mMpegTsRendererBuilderFactory = mpegTsRendererBuilderFactory;
mRecordingUri = null;
mChannelDataManager.setListener(this);
mChannelDataManager.checkDataVersion(mContext);
@@ -1491,7 +1496,7 @@ public class TunerSessionWorker
}
MpegTsPlayer player =
new MpegTsPlayer(
- new MpegTsRendererBuilder(mContext, bufferManager, this),
+ mMpegTsRendererBuilderFactory.create(mContext, bufferManager, this),
mHandler,
mSourceManager,
capabilities,
diff --git a/tuner/src/com/android/tv/tuner/tvinput/TunerSessionWorkerExoV2.java b/tuner/src/com/android/tv/tuner/tvinput/TunerSessionWorkerExoV2.java
index f8a87d89..055fa9ae 100644
--- a/tuner/src/com/android/tv/tuner/tvinput/TunerSessionWorkerExoV2.java
+++ b/tuner/src/com/android/tv/tuner/tvinput/TunerSessionWorkerExoV2.java
@@ -192,6 +192,7 @@ public class TunerSessionWorkerExoV2
private final int mMaxTrickplayBufferSizeMb;
private final File mTrickplayBufferDir;
private final @TRICKPLAY_MODE int mTrickplayModeCustomization;
+ private final MpegTsRendererBuilder.Factory mMpegTsRendererBuilderFactory;
private volatile Surface mSurface;
private volatile float mVolume = 1.0f;
private volatile boolean mCaptionEnabled;
@@ -257,7 +258,7 @@ public class TunerSessionWorkerExoV2
TunerSessionOverlay tunerSessionOverlay);
}
- @AutoFactory(implementing = TunerSessionWorkerExoV2.Factory.class)
+ @AutoFactory(implementing = Factory.class)
public TunerSessionWorkerExoV2(
Context context,
ChannelDataManager channelDataManager,
@@ -265,6 +266,7 @@ public class TunerSessionWorkerExoV2
TunerSessionOverlay tunerSessionOverlay,
@Provided ConcurrentDvrPlaybackFlags concurrentDvrPlaybackFlags,
@Provided LegacyFlags legacyFlags,
+ @Provided MpegTsRendererBuilder.Factory mpegTsRendererBuilderFactory,
@Provided TsDataSourceManager.Factory tsDataSourceManagerFactory) {
this(
context,
@@ -274,6 +276,7 @@ public class TunerSessionWorkerExoV2
null,
concurrentDvrPlaybackFlags,
legacyFlags,
+ mpegTsRendererBuilderFactory,
tsDataSourceManagerFactory);
}
@@ -286,6 +289,7 @@ public class TunerSessionWorkerExoV2
@Nullable Handler handler,
ConcurrentDvrPlaybackFlags concurrentDvrPlaybackFlags,
LegacyFlags legacyFlags,
+ MpegTsRendererBuilder.Factory mpegTsRendererBuilderFactory,
TsDataSourceManager.Factory tsDataSourceManagerFactory) {
mConcurrentDvrPlaybackFlags = concurrentDvrPlaybackFlags;
mLegacyFlags = legacyFlags;
@@ -305,6 +309,7 @@ public class TunerSessionWorkerExoV2
mSession = tunerSession;
mTunerSessionOverlay = tunerSessionOverlay;
mChannelDataManager = channelDataManager;
+ mMpegTsRendererBuilderFactory = mpegTsRendererBuilderFactory;
mRecordingUri = null;
mChannelDataManager.setListener(this);
mChannelDataManager.checkDataVersion(mContext);
@@ -1493,7 +1498,7 @@ public class TunerSessionWorkerExoV2
}
MpegTsPlayer player =
new MpegTsPlayer(
- new MpegTsRendererBuilder(mContext, bufferManager, this),
+ mMpegTsRendererBuilderFactory.create(mContext, bufferManager, this),
mHandler,
mSourceManager,
capabilities,
diff --git a/tuner/tests/robotests/javatests/com/android/tv/tuner/exoplayer/tests/SampleSourceExtractorTest.java b/tuner/tests/robotests/javatests/com/android/tv/tuner/exoplayer/tests/SampleSourceExtractorTest.java
index efafc9f8..5af30b93 100644
--- a/tuner/tests/robotests/javatests/com/android/tv/tuner/exoplayer/tests/SampleSourceExtractorTest.java
+++ b/tuner/tests/robotests/javatests/com/android/tv/tuner/exoplayer/tests/SampleSourceExtractorTest.java
@@ -84,7 +84,8 @@ public class SampleSourceExtractorTest {
listener,
false,
Looper.getMainLooper(),
- handlerThread);
+ handlerThread,
+ (bufferManager, bufferListener, enableTrickplay, bufferReason) -> null);
assertWithMessage("Trickplay should be disabled").that(listener.getLastState()).isFalse();
// Prepares the extractor.
extractor.prepare();
@@ -151,7 +152,8 @@ public class SampleSourceExtractorTest {
listener,
false,
Looper.getMainLooper(),
- handlerThread);
+ handlerThread,
+ (bufferManager2, bufferListener, enableTrickplay, bufferReason) -> null);
assertWithMessage("Trickplay should be enabled at the first")
.that(Boolean.TRUE)
diff --git a/tuner/tests/robotests/javatests/com/android/tv/tuner/tvinput/TunerSessionWorkerExoV2Test.java b/tuner/tests/robotests/javatests/com/android/tv/tuner/tvinput/TunerSessionWorkerExoV2Test.java
index ad67bb03..ee5a33d1 100644
--- a/tuner/tests/robotests/javatests/com/android/tv/tuner/tvinput/TunerSessionWorkerExoV2Test.java
+++ b/tuner/tests/robotests/javatests/com/android/tv/tuner/tvinput/TunerSessionWorkerExoV2Test.java
@@ -97,6 +97,7 @@ public class TunerSessionWorkerExoV2Test {
() -> new TunerTsStreamerManager(null);
TsDataSourceManager.Factory tsDataSourceManagerFactory =
new TsDataSourceManager.Factory(tsStreamerManagerProvider);
+
new TunerSessionExoV2(
context,
channelDataManager,
@@ -112,6 +113,7 @@ public class TunerSessionWorkerExoV2Test {
mHandler,
mConcurrentDvrPlaybackFlags,
mLegacyFlags,
+ (context2, bufferManager, bufferListener) -> null,
tsDataSourceManagerFactory) {
@Override
protected void notifySignal(int signal) {
diff --git a/tuner/tests/robotests/javatests/com/android/tv/tuner/tvinput/TunerSessionWorkerTest.java b/tuner/tests/robotests/javatests/com/android/tv/tuner/tvinput/TunerSessionWorkerTest.java
index e3fc129c..a26baf5b 100644
--- a/tuner/tests/robotests/javatests/com/android/tv/tuner/tvinput/TunerSessionWorkerTest.java
+++ b/tuner/tests/robotests/javatests/com/android/tv/tuner/tvinput/TunerSessionWorkerTest.java
@@ -112,6 +112,7 @@ public class TunerSessionWorkerTest {
mHandler,
mConcurrentDvrPlaybackFlags,
mLegacyFlags,
+ (context2, bufferManager, bufferListener) -> null,
tsdm) {
@Override
protected void notifySignal(int signal) {
diff --git a/tuner/tests/unittests/javatests/com/android/tv/tuner/ZappingTimeTest.java b/tuner/tests/unittests/javatests/com/android/tv/tuner/ZappingTimeTest.java
index fb9c6355..031cec51 100644
--- a/tuner/tests/unittests/javatests/com/android/tv/tuner/ZappingTimeTest.java
+++ b/tuner/tests/unittests/javatests/com/android/tv/tuner/ZappingTimeTest.java
@@ -21,13 +21,13 @@ import android.graphics.SurfaceTexture;
import android.os.Handler;
import android.os.HandlerThread;
import android.os.Message;
+import android.support.annotation.Nullable;
import android.test.InstrumentationTestCase;
import android.util.Log;
import android.view.Surface;
import androidx.test.filters.LargeTest;
-import com.android.tv.common.flags.impl.DefaultConcurrentDvrPlaybackFlags;
import com.android.tv.tuner.data.Cea708Data;
import com.android.tv.tuner.data.Channel.AudioStreamType;
import com.android.tv.tuner.data.Channel.VideoStreamType;
@@ -36,6 +36,7 @@ import com.android.tv.tuner.data.PsipData;
import com.android.tv.tuner.data.TunerChannel;
import com.android.tv.tuner.exoplayer.MpegTsPlayer;
import com.android.tv.tuner.exoplayer.MpegTsRendererBuilder;
+import com.android.tv.tuner.exoplayer.MpegTsSampleExtractor;
import com.android.tv.tuner.exoplayer.buffer.BufferManager;
import com.android.tv.tuner.exoplayer.buffer.PlaybackBufferListener;
import com.android.tv.tuner.exoplayer.buffer.TrickplayStorageManager;
@@ -44,6 +45,7 @@ import com.android.tv.tuner.source.TsDataSourceManager.Factory;
import com.android.tv.tuner.ts.EventDetector.EventListener;
import com.google.android.exoplayer.ExoPlayer;
+import com.google.android.exoplayer2.upstream.DataSource;
import org.junit.Ignore;
@@ -95,8 +97,6 @@ public class ZappingTimeTest extends InstrumentationTestCase {
private MockMpegTsPlayerListener mMpegTsPlayerListener = new MockMpegTsPlayerListener();
private MockPlaybackBufferListener mPlaybackBufferListener = new MockPlaybackBufferListener();
private MockChannelScanListener mEventListener = new MockChannelScanListener();
- private DefaultConcurrentDvrPlaybackFlags mConcurrentDvrPlaybackFlags =
- new DefaultConcurrentDvrPlaybackFlags();
@Override
protected void setUp() throws Exception {
@@ -127,6 +127,22 @@ public class ZappingTimeTest extends InstrumentationTestCase {
TsDataSourceManager.Factory tsFactory = new Factory(null);
mSourceManager = tsFactory.create(false);
mSourceManager.addTunerHalForTest(mTunerHal);
+ MpegTsSampleExtractor.Factory mpegTsSampleExtractorFactory =
+ new MpegTsSampleExtractor.Factory() {
+ @Override
+ public MpegTsSampleExtractor create(
+ BufferManager bufferManager, PlaybackBufferListener bufferListener) {
+ return null;
+ }
+
+ @Override
+ public MpegTsSampleExtractor create(
+ DataSource source,
+ @Nullable BufferManager bufferManager,
+ PlaybackBufferListener bufferListener) {
+ return null;
+ }
+ };
mHandler =
new Handler(
handlerThread.getLooper(),
@@ -158,12 +174,14 @@ public class ZappingTimeTest extends InstrumentationTestCase {
}
mChannel.setFrequency(frequency);
mSourceManager.setKeepTuneStatus(true);
+
mPlayer =
new MpegTsPlayer(
new MpegTsRendererBuilder(
mTargetContext,
bufferManager,
- mPlaybackBufferListener),
+ mPlaybackBufferListener,
+ mpegTsSampleExtractorFactory),
mHandler,
mSourceManager,
null,