blob: 6f7e9d94a003f0264f978337102457e385320b88 [file] [log] [blame]
/*
* Copyright (C) 2018 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.api;
import android.support.annotation.IntDef;
import android.support.annotation.StringDef;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
/** A interface a hardware tuner device. */
public interface Tuner extends AutoCloseable {
int FILTER_TYPE_OTHER = 0;
int FILTER_TYPE_AUDIO = 1;
int FILTER_TYPE_VIDEO = 2;
int FILTER_TYPE_PCR = 3;
String MODULATION_8VSB = "8VSB";
String MODULATION_QAM256 = "QAM256";
int DELIVERY_SYSTEM_UNDEFINED = 0;
int DELIVERY_SYSTEM_ATSC = 1;
int DELIVERY_SYSTEM_DVBC = 2;
int DELIVERY_SYSTEM_DVBS = 3;
int DELIVERY_SYSTEM_DVBS2 = 4;
int DELIVERY_SYSTEM_DVBT = 5;
int DELIVERY_SYSTEM_DVBT2 = 6;
int TUNER_TYPE_BUILT_IN = 1;
int TUNER_TYPE_USB = 2;
int TUNER_TYPE_NETWORK = 3;
int BUILT_IN_TUNER_TYPE_LINUX_DVB = 1;
/** Check a delivery system is for DVB or not. */
static boolean isDvbDeliverySystem(@DeliverySystemType int deliverySystemType) {
return deliverySystemType == DELIVERY_SYSTEM_DVBC
|| deliverySystemType == DELIVERY_SYSTEM_DVBS
|| deliverySystemType == DELIVERY_SYSTEM_DVBS2
|| deliverySystemType == DELIVERY_SYSTEM_DVBT
|| deliverySystemType == DELIVERY_SYSTEM_DVBT2;
}
boolean isReusable();
/**
* Acquires the first available tuner device. If there is a tuner device that is available, the
* tuner device will be locked to the current instance.
*
* @return {@code true} if the operation was successful, {@code false} otherwise
*/
boolean openFirstAvailable();
boolean isDeviceOpen();
long getDeviceId();
boolean tune(int frequency, @ModulationType String modulation, String channelNumber);
boolean addPidFilter(int pid, @FilterType int filterType);
void stopTune();
void setHasPendingTune(boolean hasPendingTune);
int getDeliverySystemType();
int readTsStream(byte[] javaBuffer, int javaBufferSize);
int getSignalStrength();
/** Filter type */
@IntDef({FILTER_TYPE_OTHER, FILTER_TYPE_AUDIO, FILTER_TYPE_VIDEO, FILTER_TYPE_PCR})
@Retention(RetentionPolicy.SOURCE)
public @interface FilterType {}
/** Modulation Type */
@StringDef({MODULATION_8VSB, MODULATION_QAM256})
@Retention(RetentionPolicy.SOURCE)
public @interface ModulationType {}
/** Delivery System Type */
@IntDef({
DELIVERY_SYSTEM_UNDEFINED,
DELIVERY_SYSTEM_ATSC,
DELIVERY_SYSTEM_DVBC,
DELIVERY_SYSTEM_DVBS,
DELIVERY_SYSTEM_DVBS2,
DELIVERY_SYSTEM_DVBT,
DELIVERY_SYSTEM_DVBT2
})
@Retention(RetentionPolicy.SOURCE)
public @interface DeliverySystemType {}
/** Tuner Type */
@IntDef({TUNER_TYPE_BUILT_IN, TUNER_TYPE_USB, TUNER_TYPE_NETWORK})
@Retention(RetentionPolicy.SOURCE)
public @interface TunerType {}
/** Built in tuner type */
@IntDef({
BUILT_IN_TUNER_TYPE_LINUX_DVB
})
@Retention(RetentionPolicy.SOURCE)
public @interface BuiltInTunerType {}
}