Home | History | Annotate | Download | only in tvinput
      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
     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      */
     63     protected abstract CacheManager createCacheManager();
     64 
     65     @Override
     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
     77     public RecordingSession onCreateRecordingSession(String inputId) {
     78         return new TunerRecordingSession(this, inputId, mChannelDataManager);
     79     }
     80 
     81     @Override
     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
     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