aboutsummaryrefslogtreecommitdiff
path: root/tuner/src/com/android/tv/tuner/exoplayer/MpegTsRendererBuilder.java
diff options
context:
space:
mode:
Diffstat (limited to 'tuner/src/com/android/tv/tuner/exoplayer/MpegTsRendererBuilder.java')
-rw-r--r--tuner/src/com/android/tv/tuner/exoplayer/MpegTsRendererBuilder.java77
1 files changed, 77 insertions, 0 deletions
diff --git a/tuner/src/com/android/tv/tuner/exoplayer/MpegTsRendererBuilder.java b/tuner/src/com/android/tv/tuner/exoplayer/MpegTsRendererBuilder.java
new file mode 100644
index 00000000..774285e9
--- /dev/null
+++ b/tuner/src/com/android/tv/tuner/exoplayer/MpegTsRendererBuilder.java
@@ -0,0 +1,77 @@
+/*
+ * Copyright (C) 2015 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.tv.tuner.exoplayer;
+
+import android.content.Context;
+import com.android.tv.tuner.TunerFeatures;
+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.tvinput.PlaybackBufferListener;
+import com.google.android.exoplayer.MediaCodecSelector;
+import com.google.android.exoplayer.SampleSource;
+import com.google.android.exoplayer.TrackRenderer;
+import com.google.android.exoplayer.upstream.DataSource;
+
+/** Builder for renderer objects for {@link MpegTsPlayer}. */
+public class MpegTsRendererBuilder implements RendererBuilder {
+ private final Context mContext;
+ private final BufferManager mBufferManager;
+ private final PlaybackBufferListener mBufferListener;
+
+ public MpegTsRendererBuilder(
+ Context context, BufferManager bufferManager, PlaybackBufferListener bufferListener) {
+ mContext = context;
+ mBufferManager = bufferManager;
+ mBufferListener = bufferListener;
+ }
+
+ @Override
+ public void buildRenderers(
+ MpegTsPlayer mpegTsPlayer,
+ DataSource dataSource,
+ boolean mHasSoftwareAudioDecoder,
+ RendererBuilderCallback callback) {
+ // Build the video and audio renderers.
+ SampleExtractor extractor =
+ dataSource == null
+ ? new MpegTsSampleExtractor(mBufferManager, mBufferListener)
+ : new MpegTsSampleExtractor(dataSource, mBufferManager, mBufferListener);
+ SampleSource sampleSource = new MpegTsSampleSource(extractor);
+ MpegTsVideoTrackRenderer videoRenderer =
+ new MpegTsVideoTrackRenderer(
+ mContext, sampleSource, mpegTsPlayer.getMainHandler(), mpegTsPlayer);
+ // TODO: Only using MpegTsDefaultAudioTrackRenderer for A/V sync issue. We will use
+ // {@link MpegTsMediaCodecAudioTrackRenderer} when we use ExoPlayer's extractor.
+ TrackRenderer audioRenderer =
+ new MpegTsDefaultAudioTrackRenderer(
+ sampleSource,
+ MediaCodecSelector.DEFAULT,
+ mpegTsPlayer.getMainHandler(),
+ mpegTsPlayer,
+ mHasSoftwareAudioDecoder,
+ !TunerFeatures.AC3_SOFTWARE_DECODE.isEnabled(mContext));
+ Cea708TextTrackRenderer textRenderer = new Cea708TextTrackRenderer(sampleSource);
+
+ TrackRenderer[] renderers = new TrackRenderer[MpegTsPlayer.RENDERER_COUNT];
+ renderers[MpegTsPlayer.TRACK_TYPE_VIDEO] = videoRenderer;
+ renderers[MpegTsPlayer.TRACK_TYPE_AUDIO] = audioRenderer;
+ renderers[MpegTsPlayer.TRACK_TYPE_TEXT] = textRenderer;
+ callback.onRenderers(null, renderers);
+ }
+}