aboutsummaryrefslogtreecommitdiff
path: root/tuner/sampletunertvinput/src/com/android/tv/samples/sampletunertvinput/SampleTunerTvInputSetupActivity.java
diff options
context:
space:
mode:
Diffstat (limited to 'tuner/sampletunertvinput/src/com/android/tv/samples/sampletunertvinput/SampleTunerTvInputSetupActivity.java')
-rw-r--r--tuner/sampletunertvinput/src/com/android/tv/samples/sampletunertvinput/SampleTunerTvInputSetupActivity.java158
1 files changed, 134 insertions, 24 deletions
diff --git a/tuner/sampletunertvinput/src/com/android/tv/samples/sampletunertvinput/SampleTunerTvInputSetupActivity.java b/tuner/sampletunertvinput/src/com/android/tv/samples/sampletunertvinput/SampleTunerTvInputSetupActivity.java
index b932b605..4774243e 100644
--- a/tuner/sampletunertvinput/src/com/android/tv/samples/sampletunertvinput/SampleTunerTvInputSetupActivity.java
+++ b/tuner/sampletunertvinput/src/com/android/tv/samples/sampletunertvinput/SampleTunerTvInputSetupActivity.java
@@ -3,48 +3,158 @@ package com.android.tv.samples.sampletunertvinput;
import android.app.Activity;
import android.content.Intent;
import android.media.tv.TvInputInfo;
+import android.media.tv.TvInputService;
+import android.media.tv.tuner.Tuner;
+import android.media.tv.tuner.dvr.DvrPlayback;
+import android.media.tv.tuner.dvr.DvrSettings;
+import android.media.tv.tuner.filter.Filter;
+import android.media.tv.tuner.filter.FilterCallback;
+import android.media.tv.tuner.filter.FilterEvent;
+import android.media.tv.tuner.filter.SectionEvent;
import android.os.Bundle;
+import android.os.Handler;
+import android.os.Looper;
+import android.util.Log;
+
+import com.android.tv.common.util.Clock;
import com.android.tv.testing.data.ChannelInfo;
import com.android.tv.testing.data.ChannelUtils;
import com.android.tv.testing.data.ProgramInfo;
+import com.android.tv.testing.data.ProgramUtils;
+
import java.util.Collections;
+import java.util.Locale;
+import java.util.concurrent.TimeUnit;
/** Setup activity for SampleTunerTvInput */
public class SampleTunerTvInputSetupActivity extends Activity {
+ private static final String TAG = "SampleTunerTvInput";
+ private static final boolean DEBUG = true;
+
+ private static final boolean USE_DVR = true;
+ private static final String SETUP_INPUT_FILE_NAME = "setup.ts";
+
+ private Tuner mTuner;
+ private DvrPlayback mDvr;
+ private Filter mSectionFilter;
+
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
+ initTuner();
+ }
+
+ @Override
+ public void onDestroy() {
+ super.onDestroy();
+ if (mTuner != null) {
+ mTuner.close();
+ mTuner = null;
+ }
+ if (mDvr != null) {
+ mDvr.close();
+ mDvr = null;
+ }
+ if (mSectionFilter != null) {
+ mSectionFilter.close();
+ mSectionFilter = null;
+ }
+ }
+
+ private void setChannel(byte[] sectionData) {
+ SampleTunerTvInputSectionParser.TvctChannelInfo channelInfo =
+ SampleTunerTvInputSectionParser.parseTvctSection(sectionData);
+
+ String channelNumber = "";
+ String channelName = "";
+
+ if(channelInfo == null) {
+ Log.e(TAG, "Did not receive channel description from parser");
+ } else {
+ channelNumber = String.format(Locale.US, "%d-%d", channelInfo.getMajorChannelNumber(),
+ channelInfo.getMinorChannelNumber());
+ channelName = channelInfo.getChannelName();
+ }
+
ChannelInfo channel =
- new ChannelInfo.Builder()
- .setNumber("1-1")
- .setName("Sample Channel")
- .setLogoUrl(
- ChannelInfo.getUriStringForChannelLogo(this, 100))
- .setOriginalNetworkId(1)
- .setVideoWidth(640)
- .setVideoHeight(480)
- .setAudioChannel(2)
- .setAudioLanguageCount(1)
- .setHasClosedCaption(false)
- .setProgram(
- new ProgramInfo(
- "Sample Program",
- "",
- 0,
- 0,
- ProgramInfo.GEN_POSTER,
- "Sample description",
- ProgramInfo.GEN_DURATION,
- null,
- ProgramInfo.GEN_GENRE,
- null))
- .build();
+ new ChannelInfo.Builder()
+ .setNumber(channelNumber)
+ .setName(channelName)
+ .setLogoUrl(
+ ChannelInfo.getUriStringForChannelLogo(this, 100))
+ .setOriginalNetworkId(1)
+ .setVideoWidth(640)
+ .setVideoHeight(480)
+ .setAudioChannel(2)
+ .setAudioLanguageCount(1)
+ .setHasClosedCaption(false)
+ .build();
Intent intent = getIntent();
String inputId = intent.getStringExtra(TvInputInfo.EXTRA_INPUT_ID);
ChannelUtils.updateChannels(this, inputId, Collections.singletonList(channel));
+ ProgramUtils.updateProgramForAllChannelsOf(this, inputId, Clock.SYSTEM,
+ TimeUnit.DAYS.toMillis(1));
+
setResult(Activity.RESULT_OK);
finish();
}
+ private FilterCallback sectionFilterCallback() {
+ return new FilterCallback() {
+ @Override
+ public void onFilterEvent(Filter filter, FilterEvent[] events) {
+ if (DEBUG) {
+ Log.d(TAG, "onFilterEvent setup section, size=" + events.length);
+ }
+ for (int i = 0; i < events.length; i++) {
+ if (DEBUG) {
+ Log.d(TAG, "events[" + i + "] is "
+ + events[i].getClass().getSimpleName());
+ }
+ if (events[i] instanceof SectionEvent) {
+ SectionEvent sectionEvent = (SectionEvent) events[i];
+ int dataSize = (int)sectionEvent.getDataLengthLong();
+ if (DEBUG) {
+ Log.d(TAG, "section dataSize:" + dataSize);
+ }
+
+ byte[] data = new byte[dataSize];
+ filter.read(data, 0, dataSize);
+
+ setChannel(data);
+ }
+ }
+ }
+
+ @Override
+ public void onFilterStatusChanged(Filter filter, int status) {
+ if (DEBUG) {
+ Log.d(TAG, "onFilterStatusChanged setup section, status=" + status);
+ }
+ }
+ };
+ }
+
+ private void initTuner() {
+ mTuner = new Tuner(getApplicationContext(), null,
+ TvInputService.PRIORITY_HINT_USE_CASE_TYPE_LIVE);
+ Handler handler = new Handler(Looper.myLooper());
+
+ mSectionFilter = SampleTunerTvInputUtils.createSectionFilter(mTuner, handler,
+ sectionFilterCallback());
+ mSectionFilter.start();
+
+ // Dvr Playback can be used to read a file instead of relying on physical tuner
+ if (USE_DVR) {
+ mDvr = SampleTunerTvInputUtils.configureDvrPlayback(mTuner, handler,
+ DvrSettings.DATA_FORMAT_TS);
+ SampleTunerTvInputUtils.readFilePlaybackInput(getApplicationContext(), mDvr,
+ SETUP_INPUT_FILE_NAME);
+ mDvr.start();
+ } else {
+ SampleTunerTvInputUtils.tune(mTuner, handler);
+ }
+ }
+
}