• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (C) 2015 The Android Open Source Project
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *      http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 
17 package com.android.usbtuner.tvinput;
18 
19 import android.media.tv.TvInputService;
20 import android.util.Log;
21 import com.google.android.exoplayer.audio.AudioCapabilities;
22 import com.google.android.exoplayer.audio.AudioCapabilitiesReceiver;
23 import com.android.usbtuner.exoplayer.cache.CacheManager;
24 
25 import java.util.Collections;
26 import java.util.Set;
27 import java.util.WeakHashMap;
28 
29 /**
30  * {@link BaseTunerTvInputService} serves TV channels coming from a tuner device.
31  */
32 public abstract class BaseTunerTvInputService extends TvInputService
33         implements AudioCapabilitiesReceiver.Listener {
34     private static final String TAG = "BaseTunerTvInputService";
35     private static final boolean DEBUG = false;
36 
37     // WeakContainer for {@link TvInputSessionImpl}
38     private final Set<TunerSession> mTunerSessions = Collections.newSetFromMap(
39             new WeakHashMap<TunerSession, Boolean>());
40     private ChannelDataManager mChannelDataManager;
41     private AudioCapabilitiesReceiver mAudioCapabilitiesReceiver;
42     private AudioCapabilities mAudioCapabilities;
43     private CacheManager mCacheManager;
44 
45     @Override
onCreate()46     public void onCreate() {
47         super.onCreate();
48         if (DEBUG) Log.d(TAG, "onCreate");
49         mChannelDataManager = new ChannelDataManager(getApplicationContext());
50         mAudioCapabilitiesReceiver = new AudioCapabilitiesReceiver(getApplicationContext(), this);
51         mAudioCapabilitiesReceiver.register();
52         mCacheManager = createCacheManager();
53         if (mCacheManager == null) {
54             Log.i(TAG, "Trickplay is disabled");
55         } else {
56             Log.i(TAG, "Trickplay is enabled");
57         }
58     }
59 
60     /**
61      * Creates {@CacheManager}. It returns null, if storage in not enough.
62      */
createCacheManager()63     protected abstract CacheManager createCacheManager();
64 
65     @Override
onDestroy()66     public void onDestroy() {
67         if (DEBUG) Log.d(TAG, "onDestroy");
68         super.onDestroy();
69         mChannelDataManager.release();
70         mAudioCapabilitiesReceiver.unregister();
71         if (mCacheManager != null) {
72             mCacheManager.close();
73         }
74     }
75 
76     @Override
onCreateRecordingSession(String inputId)77     public RecordingSession onCreateRecordingSession(String inputId) {
78         return new TunerRecordingSession(this, inputId, mChannelDataManager);
79     }
80 
81     @Override
onCreateSession(String inputId)82     public Session onCreateSession(String inputId) {
83         if (DEBUG) Log.d(TAG, "onCreateSession");
84         final TunerSession session = new TunerSession(
85                 this, mChannelDataManager, mCacheManager);
86         mTunerSessions.add(session);
87         session.setAudioCapabilities(mAudioCapabilities);
88         session.setOverlayViewEnabled(true);
89         return session;
90     }
91 
92     @Override
onAudioCapabilitiesChanged(AudioCapabilities audioCapabilities)93     public void onAudioCapabilitiesChanged(AudioCapabilities audioCapabilities) {
94         mAudioCapabilities = audioCapabilities;
95         for (TunerSession session : mTunerSessions) {
96             if (!session.isReleased()) {
97                 session.setAudioCapabilities(audioCapabilities);
98             }
99         }
100     }
101 }
102