summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Amy Zhang <amyjojo@google.com> 2020-08-27 15:11:50 -0700
committer Amy Zhang <amyjojo@google.com> 2020-10-14 17:11:04 -0700
commit3dc7efafbf33c62bf3ecce6bbfe6798faab2dd42 (patch)
treec8cc18e97d8558582864285743e98bf6235b983a
parentae00abf8ed1f483d7d444ca335fd86ca362e46bf (diff)
Add DTMB Frontend Type, Settings and Capabilities.
DTMB is only supported in Tuner HAL 1.1 or higher. Tuner framework does version check to make sure enought support from HAL implementation. Tuner.tune and Tuner.scan with DTMB settings running on Tuner HAL 1.0 implementation would be no-op. Test: atest android.media.tv.tuner.cts Bug: 159064654 Change-Id: Ic2f759cc92fee75ae94b72e233fd6c4448359a67
-rw-r--r--api/system-current.txt64
-rw-r--r--media/java/android/media/tv/tuner/Tuner.java20
-rw-r--r--media/java/android/media/tv/tuner/frontend/DtmbFrontendCapabilities.java114
-rw-r--r--media/java/android/media/tv/tuner/frontend/DtmbFrontendSettings.java441
-rw-r--r--media/java/android/media/tv/tuner/frontend/FrontendSettings.java7
-rw-r--r--non-updatable-api/system-current.txt64
6 files changed, 708 insertions, 2 deletions
diff --git a/api/system-current.txt b/api/system-current.txt
index a05a04100060..074541b84ace 100644
--- a/api/system-current.txt
+++ b/api/system-current.txt
@@ -5659,6 +5659,69 @@ package android.media.tv.tuner.frontend {
method @NonNull public android.media.tv.tuner.frontend.AtscFrontendSettings.Builder setModulation(int);
}
+ public class DtmbFrontendCapabilities extends android.media.tv.tuner.frontend.FrontendCapabilities {
+ method public int getBandwidthCapability();
+ method public int getCodeRateCapability();
+ method public int getGuardIntervalCapability();
+ method public int getModulationCapability();
+ method public int getTimeInterleaveModeCapability();
+ method public int getTransmissionModeCapability();
+ }
+
+ public class DtmbFrontendSettings extends android.media.tv.tuner.frontend.FrontendSettings {
+ method @NonNull public static android.media.tv.tuner.frontend.DtmbFrontendSettings.Builder builder();
+ method public int getBandwidth();
+ method public int getCodeRate();
+ method public int getGuardInterval();
+ method public int getModulation();
+ method public int getTimeInterleaveMode();
+ method public int getTransmissionMode();
+ method public int getType();
+ field public static final int BANDWIDTH_6MHZ = 4; // 0x4
+ field public static final int BANDWIDTH_8MHZ = 2; // 0x2
+ field public static final int BANDWIDTH_AUTO = 1; // 0x1
+ field public static final int BANDWIDTH_UNDEFINED = 0; // 0x0
+ field public static final int CODERATE_2_5 = 2; // 0x2
+ field public static final int CODERATE_3_5 = 4; // 0x4
+ field public static final int CODERATE_4_5 = 8; // 0x8
+ field public static final int CODERATE_AUTO = 1; // 0x1
+ field public static final int CODERATE_UNDEFINED = 0; // 0x0
+ field public static final int GUARD_INTERVAL_AUTO = 1; // 0x1
+ field public static final int GUARD_INTERVAL_PN_420_CONST = 16; // 0x10
+ field public static final int GUARD_INTERVAL_PN_420_VARIOUS = 2; // 0x2
+ field public static final int GUARD_INTERVAL_PN_595_CONST = 4; // 0x4
+ field public static final int GUARD_INTERVAL_PN_945_CONST = 32; // 0x20
+ field public static final int GUARD_INTERVAL_PN_945_VARIOUS = 8; // 0x8
+ field public static final int GUARD_INTERVAL_PN_RESERVED = 64; // 0x40
+ field public static final int GUARD_INTERVAL_UNDEFINED = 0; // 0x0
+ field public static final int MODULATION_CONSTELLATION_16QAM = 8; // 0x8
+ field public static final int MODULATION_CONSTELLATION_32QAM = 16; // 0x10
+ field public static final int MODULATION_CONSTELLATION_4QAM = 2; // 0x2
+ field public static final int MODULATION_CONSTELLATION_4QAM_NR = 4; // 0x4
+ field public static final int MODULATION_CONSTELLATION_64QAM = 32; // 0x20
+ field public static final int MODULATION_CONSTELLATION_AUTO = 1; // 0x1
+ field public static final int MODULATION_CONSTELLATION_UNDEFINED = 0; // 0x0
+ field public static final int TIME_INTERLEAVE_MODE_AUTO = 1; // 0x1
+ field public static final int TIME_INTERLEAVE_MODE_TIMER_INT_240 = 2; // 0x2
+ field public static final int TIME_INTERLEAVE_MODE_TIMER_INT_720 = 4; // 0x4
+ field public static final int TIME_INTERLEAVE_MODE_UNDEFINED = 0; // 0x0
+ field public static final int TRANSMISSION_MODE_AUTO = 1; // 0x1
+ field public static final int TRANSMISSION_MODE_C1 = 2; // 0x2
+ field public static final int TRANSMISSION_MODE_C3780 = 4; // 0x4
+ field public static final int TRANSMISSION_MODE_UNDEFINED = 0; // 0x0
+ }
+
+ public static final class DtmbFrontendSettings.Builder {
+ method @NonNull public android.media.tv.tuner.frontend.DtmbFrontendSettings build();
+ method @NonNull public android.media.tv.tuner.frontend.DtmbFrontendSettings.Builder setBandwidth(int);
+ method @NonNull public android.media.tv.tuner.frontend.DtmbFrontendSettings.Builder setCodeRate(int);
+ method @IntRange(from=1) @NonNull public android.media.tv.tuner.frontend.DtmbFrontendSettings.Builder setFrequency(int);
+ method @NonNull public android.media.tv.tuner.frontend.DtmbFrontendSettings.Builder setGuardInterval(int);
+ method @NonNull public android.media.tv.tuner.frontend.DtmbFrontendSettings.Builder setModulation(int);
+ method @NonNull public android.media.tv.tuner.frontend.DtmbFrontendSettings.Builder setTimeInterleaveMode(int);
+ method @NonNull public android.media.tv.tuner.frontend.DtmbFrontendSettings.Builder setTransmissionMode(int);
+ }
+
public class DvbcFrontendCapabilities extends android.media.tv.tuner.frontend.FrontendCapabilities {
method public int getAnnexCapability();
method public int getFecCapability();
@@ -5982,6 +6045,7 @@ package android.media.tv.tuner.frontend {
field public static final int TYPE_ANALOG = 1; // 0x1
field public static final int TYPE_ATSC = 2; // 0x2
field public static final int TYPE_ATSC3 = 3; // 0x3
+ field public static final int TYPE_DTMB = 10; // 0xa
field public static final int TYPE_DVBC = 4; // 0x4
field public static final int TYPE_DVBS = 5; // 0x5
field public static final int TYPE_DVBT = 6; // 0x6
diff --git a/media/java/android/media/tv/tuner/Tuner.java b/media/java/android/media/tv/tuner/Tuner.java
index 3252c90f0153..56499e26bafe 100644
--- a/media/java/android/media/tv/tuner/Tuner.java
+++ b/media/java/android/media/tv/tuner/Tuner.java
@@ -623,6 +623,10 @@ public class Tuner implements AutoCloseable {
* OnTuneEventListener#SIGNAL_NO_SIGNAL} events sent to the {@link OnTuneEventListener}
* specified in {@link #setOnTuneEventListener(Executor, OnTuneEventListener)}.
*
+ * <p>Tuning with {@link android.media.tv.tuner.frontend.DtmbFrontendSettings} is only
+ * supported in Tuner 1.1 or higher version. Unsupported version will cause no-op. Use {@link
+ * TunerVersionChecker.getTunerVersion()} to get the version information.
+ *
* @param settings Signal delivery information the frontend uses to
* search and lock the signal.
* @return result status of tune operation.
@@ -633,6 +637,12 @@ public class Tuner implements AutoCloseable {
public int tune(@NonNull FrontendSettings settings) {
Log.d(TAG, "Tune to " + settings.getFrequency());
mFrontendType = settings.getType();
+ if (mFrontendType == FrontendSettings.TYPE_DTMB) {
+ if (!TunerVersionChecker.checkHigherOrEqualVersionTo(
+ TunerVersionChecker.TUNER_VERSION_1_1, "Tuner with DTMB Frontend")) {
+ return RESULT_UNAVAILABLE;
+ }
+ }
if (checkResource(TunerResourceManager.TUNER_RESOURCE_TYPE_FRONTEND)) {
mFrontendInfo = null;
Log.d(TAG, "Write Stats Log for tuning.");
@@ -662,6 +672,10 @@ public class Tuner implements AutoCloseable {
*
* <p>Details for channels found are returned via {@link ScanCallback}.
*
+ * <p>Scanning with {@link android.media.tv.tuner.frontend.DtmbFrontendSettings} is only
+ * supported in Tuner 1.1 or higher version. Unsupported version will cause no-op. Use {@link
+ * TunerVersionChecker.getTunerVersion()} to get the version information.
+ *
* @param settings A {@link FrontendSettings} to configure the frontend.
* @param scanType The scan type.
* @throws SecurityException if the caller does not have appropriate permissions.
@@ -677,6 +691,12 @@ public class Tuner implements AutoCloseable {
+ "started.");
}
mFrontendType = settings.getType();
+ if (mFrontendType == FrontendSettings.TYPE_DTMB) {
+ if (!TunerVersionChecker.checkHigherOrEqualVersionTo(
+ TunerVersionChecker.TUNER_VERSION_1_1, "Scan with DTMB Frontend")) {
+ return RESULT_UNAVAILABLE;
+ }
+ }
if (checkResource(TunerResourceManager.TUNER_RESOURCE_TYPE_FRONTEND)) {
mScanCallback = scanCallback;
mScanCallbackExecutor = executor;
diff --git a/media/java/android/media/tv/tuner/frontend/DtmbFrontendCapabilities.java b/media/java/android/media/tv/tuner/frontend/DtmbFrontendCapabilities.java
new file mode 100644
index 000000000000..9fc3a234876b
--- /dev/null
+++ b/media/java/android/media/tv/tuner/frontend/DtmbFrontendCapabilities.java
@@ -0,0 +1,114 @@
+/*
+ * Copyright 2020 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 android.media.tv.tuner.frontend;
+
+import android.annotation.SystemApi;
+
+/**
+ * DTMB Capabilities.
+ *
+ * <p>DTMB Frontend is only supported in Tuner HAL 1.1 or higher.
+ * @hide
+ */
+@SystemApi
+public class DtmbFrontendCapabilities extends FrontendCapabilities {
+ private final int mModulationCap;
+ private final int mTransmissionModeCap;
+ private final int mGuardIntervalCap;
+ private final int mTimeInterleaveModeCap;
+ private final int mCodeRateCap;
+ private final int mBandwidthCap;
+
+ private DtmbFrontendCapabilities(int modulationCap, int transmissionModeCap,
+ int guardIntervalCap, int timeInterleaveModeCap, int codeRateCap, int bandwidthCap) {
+ mModulationCap = modulationCap;
+ mTransmissionModeCap = transmissionModeCap;
+ mGuardIntervalCap = guardIntervalCap;
+ mTimeInterleaveModeCap = timeInterleaveModeCap;
+ mCodeRateCap = codeRateCap;
+ mBandwidthCap = bandwidthCap;
+ }
+
+ /**
+ * Gets modulation capability.
+ *
+ * @return full modulation capabilies. If the caps bitwise AND with any value from
+ * bit masks {@link DtmbFrontendSettings.Modulation} is true, then that modulation is supported.
+ */
+ @DtmbFrontendSettings.Modulation
+ public int getModulationCapability() {
+ return mModulationCap;
+ }
+
+ /**
+ * Gets Transmission Mode capability.
+ *
+ * @return full Transmission Mode capabilies. If the caps bitwise AND with any value from
+ * bit masks {@link DtmbFrontendSettings.TransmissionMode} is true, then that transmission mode
+ * is supported.
+ */
+ @DtmbFrontendSettings.TransmissionMode
+ public int getTransmissionModeCapability() {
+ return mTransmissionModeCap;
+ }
+
+ /**
+ * Gets Guard Interval capability.
+ *
+ * @return full Guard Interval capabilies. If the caps bitwise AND with any value from
+ * bit masks {@link DtmbFrontendSettings.GuardInterval} is true, then that Guard Interval is
+ * supported.
+ */
+ @DtmbFrontendSettings.GuardInterval
+ public int getGuardIntervalCapability() {
+ return mGuardIntervalCap;
+ }
+
+ /**
+ * Gets Time Interleave Mode capability.
+ *
+ * @return full Time Interleave Mode capabilies. If the caps bitwise AND with any value from
+ * bit masks {@link DtmbFrontendSettings.TimeInterleaveMode} is true, then that Time Interleave
+ * Mode is supported.
+ */
+ @DtmbFrontendSettings.TimeInterleaveMode
+ public int getTimeInterleaveModeCapability() {
+ return mTimeInterleaveModeCap;
+ }
+
+ /**
+ * Gets Code Rate capability.
+ *
+ * @return full Code Rate capabilies. If the caps bitwise AND with any value from
+ * bit masks {@link DtmbFrontendSettings.CodeRate} is true, then that Code Rate is supported.
+ */
+ @DtmbFrontendSettings.CodeRate
+ public int getCodeRateCapability() {
+ return mCodeRateCap;
+ }
+
+ /**
+ * Gets Bandwidth capability.
+ *
+ * @return full Bandwidth capabilies. If the caps bitwise AND with any value from
+ * bit masks {@link DtmbFrontendSettings.Bandwidth} is true, then that Bandwidth is supported.
+ */
+ @DtmbFrontendSettings.Bandwidth
+ public int getBandwidthCapability() {
+ return mBandwidthCap;
+ }
+}
diff --git a/media/java/android/media/tv/tuner/frontend/DtmbFrontendSettings.java b/media/java/android/media/tv/tuner/frontend/DtmbFrontendSettings.java
new file mode 100644
index 000000000000..2c3fe6a2583c
--- /dev/null
+++ b/media/java/android/media/tv/tuner/frontend/DtmbFrontendSettings.java
@@ -0,0 +1,441 @@
+/*
+ * Copyright 2020 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 android.media.tv.tuner.frontend;
+
+import android.annotation.IntDef;
+import android.annotation.IntRange;
+import android.annotation.NonNull;
+import android.annotation.SuppressLint;
+import android.annotation.SystemApi;
+
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+
+/**
+ * Frontend settings for DTMB.
+ *
+ * <p>DTMB Frontend is only supported in Tuner HAL 1.1 or higher. Use {@link
+ * android.media.tv.tuner.TunerVersionChecker.getTunerVersion()} to get the version information.
+ *
+ * @hide
+ */
+@SystemApi
+public class DtmbFrontendSettings extends FrontendSettings {
+
+ /** @hide */
+ @IntDef(flag = true,
+ prefix = "BANDWIDTH_",
+ value = {BANDWIDTH_UNDEFINED, BANDWIDTH_AUTO, BANDWIDTH_6MHZ, BANDWIDTH_8MHZ})
+ @Retention(RetentionPolicy.SOURCE)
+ public @interface Bandwidth {}
+
+ /**
+ * Bandwidth not defined.
+ */
+ public static final int BANDWIDTH_UNDEFINED =
+ android.hardware.tv.tuner.V1_1.Constants.FrontendDtmbBandwidth.UNDEFINED;
+ /**
+ * Hardware is able to detect and set bandwidth automatically
+ */
+ public static final int BANDWIDTH_AUTO =
+ android.hardware.tv.tuner.V1_1.Constants.FrontendDtmbBandwidth.AUTO;
+ /**
+ * 6 MHz bandwidth.
+ */
+ public static final int BANDWIDTH_6MHZ =
+ android.hardware.tv.tuner.V1_1.Constants.FrontendDtmbBandwidth.BANDWIDTH_6MHZ;
+ /**
+ * 8 MHz bandwidth.
+ */
+ public static final int BANDWIDTH_8MHZ =
+ android.hardware.tv.tuner.V1_1.Constants.FrontendDtmbBandwidth.BANDWIDTH_8MHZ;
+
+
+ /** @hide */
+ @IntDef(flag = true,
+ prefix = "TIME_INTERLEAVE_MODE_",
+ value = {TIME_INTERLEAVE_MODE_UNDEFINED, TIME_INTERLEAVE_MODE_AUTO,
+ TIME_INTERLEAVE_MODE_TIMER_INT_240, TIME_INTERLEAVE_MODE_TIMER_INT_720})
+ @Retention(RetentionPolicy.SOURCE)
+ public @interface TimeInterleaveMode {}
+
+ /**
+ * Time Interleave Mode undefined.
+ */
+ public static final int TIME_INTERLEAVE_MODE_UNDEFINED =
+ android.hardware.tv.tuner.V1_1.Constants.FrontendDtmbTimeInterleaveMode.UNDEFINED;
+ /**
+ * Hardware is able to detect and set time interleave mode automatically
+ */
+ public static final int TIME_INTERLEAVE_MODE_AUTO =
+ android.hardware.tv.tuner.V1_1.Constants.FrontendDtmbTimeInterleaveMode.AUTO;
+ /**
+ * Time Interleave Mode timer int 240.
+ */
+ public static final int TIME_INTERLEAVE_MODE_TIMER_INT_240 =
+ android.hardware.tv.tuner.V1_1.Constants.FrontendDtmbTimeInterleaveMode.TIMER_INT_240;
+ /**
+ * Time Interleave Mode timer int 720.
+ */
+ public static final int TIME_INTERLEAVE_MODE_TIMER_INT_720 =
+ android.hardware.tv.tuner.V1_1.Constants.FrontendDtmbTimeInterleaveMode.TIMER_INT_720;
+
+
+ /** @hide */
+ @IntDef(flag = true,
+ prefix = "GUARD_INTERVAL_",
+ value = {GUARD_INTERVAL_UNDEFINED, GUARD_INTERVAL_AUTO,
+ GUARD_INTERVAL_PN_420_VARIOUS, GUARD_INTERVAL_PN_595_CONST,
+ GUARD_INTERVAL_PN_945_VARIOUS, GUARD_INTERVAL_PN_420_CONST,
+ GUARD_INTERVAL_PN_945_CONST, GUARD_INTERVAL_PN_RESERVED})
+ @Retention(RetentionPolicy.SOURCE)
+ public @interface GuardInterval {}
+
+ /**
+ * Guard Interval undefined.
+ */
+ public static final int GUARD_INTERVAL_UNDEFINED =
+ android.hardware.tv.tuner.V1_1.Constants.FrontendDtmbGuardInterval.UNDEFINED;
+ /**
+ * Hardware is able to detect and set Guard Interval automatically.
+ */
+ public static final int GUARD_INTERVAL_AUTO =
+ android.hardware.tv.tuner.V1_1.Constants.FrontendDtmbGuardInterval.AUTO;
+ /**
+ * PN_420_VARIOUS Guard Interval.
+ */
+ public static final int GUARD_INTERVAL_PN_420_VARIOUS =
+ android.hardware.tv.tuner.V1_1.Constants.FrontendDtmbGuardInterval.PN_420_VARIOUS;
+ /**
+ * PN_595_CONST Guard Interval.
+ */
+ public static final int GUARD_INTERVAL_PN_595_CONST =
+ android.hardware.tv.tuner.V1_1.Constants.FrontendDtmbGuardInterval.PN_595_CONST;
+ /**
+ * PN_945_VARIOUS Guard Interval.
+ */
+ public static final int GUARD_INTERVAL_PN_945_VARIOUS =
+ android.hardware.tv.tuner.V1_1.Constants.FrontendDtmbGuardInterval.PN_945_VARIOUS;
+ /**
+ * PN_420_CONST Guard Interval.
+ */
+ public static final int GUARD_INTERVAL_PN_420_CONST =
+ android.hardware.tv.tuner.V1_1.Constants.FrontendDtmbGuardInterval.PN_420_CONST;
+ /**
+ * PN_945_CONST Guard Interval.
+ */
+ public static final int GUARD_INTERVAL_PN_945_CONST =
+ android.hardware.tv.tuner.V1_1.Constants.FrontendDtmbGuardInterval.PN_945_CONST;
+ /**
+ * PN_RESERVED Guard Interval.
+ */
+ public static final int GUARD_INTERVAL_PN_RESERVED =
+ android.hardware.tv.tuner.V1_1.Constants.FrontendDtmbGuardInterval.PN_RESERVED;
+
+
+ /** @hide */
+ @IntDef(flag = true,
+ prefix = "MODULATION_",
+ value = {MODULATION_CONSTELLATION_UNDEFINED, MODULATION_CONSTELLATION_AUTO,
+ MODULATION_CONSTELLATION_4QAM, MODULATION_CONSTELLATION_4QAM_NR,
+ MODULATION_CONSTELLATION_16QAM, MODULATION_CONSTELLATION_32QAM,
+ MODULATION_CONSTELLATION_64QAM})
+ @Retention(RetentionPolicy.SOURCE)
+ public @interface Modulation {}
+
+ /**
+ * Constellation not defined.
+ */
+ public static final int MODULATION_CONSTELLATION_UNDEFINED =
+ android.hardware.tv.tuner.V1_1.Constants.FrontendDtmbModulation.UNDEFINED;
+ /**
+ * Hardware is able to detect and set Constellation automatically.
+ */
+ public static final int MODULATION_CONSTELLATION_AUTO =
+ android.hardware.tv.tuner.V1_1.Constants.FrontendDtmbModulation.AUTO;
+ /**
+ * 4QAM Constellation.
+ */
+ public static final int MODULATION_CONSTELLATION_4QAM =
+ android.hardware.tv.tuner.V1_1.Constants.FrontendDtmbModulation.CONSTELLATION_4QAM;
+ /**
+ * 4QAM_NR Constellation.
+ */
+ public static final int MODULATION_CONSTELLATION_4QAM_NR =
+ android.hardware.tv.tuner.V1_1.Constants.FrontendDtmbModulation.CONSTELLATION_4QAM_NR;
+ /**
+ * 16QAM Constellation.
+ */
+ public static final int MODULATION_CONSTELLATION_16QAM =
+ android.hardware.tv.tuner.V1_1.Constants.FrontendDtmbModulation.CONSTELLATION_16QAM;
+ /**
+ * 32QAM Constellation.
+ */
+ public static final int MODULATION_CONSTELLATION_32QAM =
+ android.hardware.tv.tuner.V1_1.Constants.FrontendDtmbModulation.CONSTELLATION_32QAM;
+ /**
+ * 64QAM Constellation.
+ */
+ public static final int MODULATION_CONSTELLATION_64QAM =
+ android.hardware.tv.tuner.V1_1.Constants.FrontendDtmbModulation.CONSTELLATION_64QAM;
+
+ /** @hide */
+ @IntDef(flag = true,
+ prefix = "CODERATE_",
+ value = {CODERATE_UNDEFINED, CODERATE_AUTO, CODERATE_2_5, CODERATE_3_5, CODERATE_4_5})
+ @Retention(RetentionPolicy.SOURCE)
+ public @interface CodeRate {}
+
+ /**
+ * Code rate undefined.
+ */
+ public static final int CODERATE_UNDEFINED =
+ android.hardware.tv.tuner.V1_1.Constants.FrontendDtmbCodeRate.UNDEFINED;
+ /**
+ * Hardware is able to detect and set code rate automatically.
+ */
+ public static final int CODERATE_AUTO =
+ android.hardware.tv.tuner.V1_1.Constants.FrontendDtmbCodeRate.AUTO;
+ /**
+ * 2/5 code rate.
+ */
+ public static final int CODERATE_2_5 =
+ android.hardware.tv.tuner.V1_1.Constants.FrontendDtmbCodeRate.CODERATE_2_5;
+ /**
+ * 3/5 code rate.
+ */
+ public static final int CODERATE_3_5 =
+ android.hardware.tv.tuner.V1_1.Constants.FrontendDtmbCodeRate.CODERATE_3_5;
+ /**
+ * 4/5 code rate.
+ */
+ public static final int CODERATE_4_5 =
+ android.hardware.tv.tuner.V1_1.Constants.FrontendDtmbCodeRate.CODERATE_4_5;
+
+ /** @hide */
+ @IntDef(flag = true,
+ prefix = "TRANSMISSION_MODE_",
+ value = {TRANSMISSION_MODE_UNDEFINED, TRANSMISSION_MODE_AUTO,
+ TRANSMISSION_MODE_C1, TRANSMISSION_MODE_C3780})
+ @Retention(RetentionPolicy.SOURCE)
+ public @interface TransmissionMode {}
+
+ /**
+ * Transmission Mode undefined.
+ */
+ public static final int TRANSMISSION_MODE_UNDEFINED =
+ android.hardware.tv.tuner.V1_1.Constants.FrontendDtmbTransmissionMode.UNDEFINED;
+ /**
+ * Hardware is able to detect and set Transmission Mode automatically
+ */
+ public static final int TRANSMISSION_MODE_AUTO =
+ android.hardware.tv.tuner.V1_1.Constants.FrontendDtmbTransmissionMode.AUTO;
+ /**
+ * C1 Transmission Mode.
+ */
+ public static final int TRANSMISSION_MODE_C1 =
+ android.hardware.tv.tuner.V1_1.Constants.FrontendDtmbTransmissionMode.C1;
+ /**
+ * C3780 Transmission Mode.
+ */
+ public static final int TRANSMISSION_MODE_C3780 =
+ android.hardware.tv.tuner.V1_1.Constants.FrontendDtmbTransmissionMode.C3780;
+
+
+ private final int mModulation;
+ private final int mCodeRate;
+ private final int mTransmissionMode;
+ private final int mBandwidth;
+ private final int mGuardInterval;
+ private final int mTimeInterleaveMode;
+
+ private DtmbFrontendSettings(int frequency, int modulation, int codeRate, int transmissionMode,
+ int guardInterval, int timeInterleaveMode, int bandwidth) {
+ super(frequency);
+ mModulation = modulation;
+ mCodeRate = codeRate;
+ mTransmissionMode = transmissionMode;
+ mGuardInterval = guardInterval;
+ mTimeInterleaveMode = timeInterleaveMode;
+ mBandwidth = bandwidth;
+ }
+
+ /**
+ * Gets Modulation.
+ */
+ @Modulation
+ public int getModulation() {
+ return mModulation;
+ }
+
+ /**
+ * Gets Code Rate.
+ */
+ @Modulation
+ public int getCodeRate() {
+ return mCodeRate;
+ }
+
+ /**
+ * Gets Transmission Mode.
+ */
+ @Modulation
+ public int getTransmissionMode() {
+ return mTransmissionMode;
+ }
+
+ /**
+ * Gets Bandwidth.
+ */
+ @Modulation
+ public int getBandwidth() {
+ return mBandwidth;
+ }
+
+ /**
+ * Gets Time Interleave Mode.
+ */
+ @Modulation
+ public int getTimeInterleaveMode() {
+ return mTimeInterleaveMode;
+ }
+
+
+ /**
+ * Gets Guard Interval.
+ */
+ @Modulation
+ public int getGuardInterval() {
+ return mGuardInterval;
+ }
+
+ /**
+ * Creates a builder for {@link AtscFrontendSettings}.
+ */
+ @NonNull
+ public static Builder builder() {
+ return new Builder();
+ }
+
+ /**
+ * Builder for {@link AtscFrontendSettings}.
+ */
+ public static final class Builder {
+ private int mFrequency = 0;
+ private int mModulation = MODULATION_CONSTELLATION_UNDEFINED;
+ private int mCodeRate = CODERATE_UNDEFINED;
+ private int mTransmissionMode = TRANSMISSION_MODE_UNDEFINED;
+ private int mBandwidth = BANDWIDTH_UNDEFINED;
+ private int mTimeInterleaveMode = TIME_INTERLEAVE_MODE_UNDEFINED;
+ private int mGuardInterval = GUARD_INTERVAL_UNDEFINED;
+
+ private Builder() {
+ }
+
+ /**
+ * Sets frequency in Hz.
+ *
+ * <p>Default value is 0.
+ */
+ @NonNull
+ @IntRange(from = 1)
+ @SuppressLint("MissingGetterMatchingBuilder")
+ public Builder setFrequency(int frequency) {
+ mFrequency = frequency;
+ return this;
+ }
+
+ /**
+ * Sets Modulation.
+ *
+ * <p>Default value is {@link #MODULATION_CONSTELLATION_UNDEFINED}.
+ */
+ @NonNull
+ public Builder setModulation(@Modulation int modulation) {
+ mModulation = modulation;
+ return this;
+ }
+
+ /**
+ * Sets Code Rate.
+ *
+ * <p>Default value is {@link #CODERATE_UNDEFINED}.
+ */
+ @NonNull
+ public Builder setCodeRate(@CodeRate int codeRate) {
+ mCodeRate = codeRate;
+ return this;
+ }
+
+ /**
+ * Sets Bandwidth.
+ *
+ * <p>Default value is {@link #BANDWIDTH_UNDEFINED}.
+ */
+ @NonNull
+ public Builder setBandwidth(@Bandwidth int bandwidth) {
+ mBandwidth = bandwidth;
+ return this;
+ }
+
+ /**
+ * Sets Time Interleave Mode.
+ *
+ * <p>Default value is {@link #TIME_INTERLEAVE_MODE_UNDEFINED}.
+ */
+ @NonNull
+ public Builder setTimeInterleaveMode(@TimeInterleaveMode int timeInterleaveMode) {
+ mTimeInterleaveMode = timeInterleaveMode;
+ return this;
+ }
+
+ /**
+ * Sets Guard Interval.
+ *
+ * <p>Default value is {@link #GUARD_INTERVAL_UNDEFINED}.
+ */
+ @NonNull
+ public Builder setGuardInterval(@GuardInterval int guardInterval) {
+ mGuardInterval = guardInterval;
+ return this;
+ }
+ /**
+ * Sets Transmission Mode.
+ *
+ * <p>Default value is {@link #TRANSMISSION_MODE_UNDEFINED}.
+ */
+ @NonNull
+ public Builder setTransmissionMode(@TransmissionMode int transmissionMode) {
+ mTransmissionMode = transmissionMode;
+ return this;
+ }
+
+ /**
+ * Builds a {@link DtmbFrontendSettings} object.
+ */
+ @NonNull
+ public DtmbFrontendSettings build() {
+ return new DtmbFrontendSettings(mFrequency, mModulation, mCodeRate,
+ mTransmissionMode, mGuardInterval, mTimeInterleaveMode, mBandwidth);
+ }
+ }
+
+ @Override
+ public int getType() {
+ return FrontendSettings.TYPE_DTMB;
+ }
+}
diff --git a/media/java/android/media/tv/tuner/frontend/FrontendSettings.java b/media/java/android/media/tv/tuner/frontend/FrontendSettings.java
index 82f7afab23df..2147622d349d 100644
--- a/media/java/android/media/tv/tuner/frontend/FrontendSettings.java
+++ b/media/java/android/media/tv/tuner/frontend/FrontendSettings.java
@@ -37,7 +37,7 @@ public abstract class FrontendSettings {
/** @hide */
@IntDef(prefix = "TYPE_",
value = {TYPE_UNDEFINED, TYPE_ANALOG, TYPE_ATSC, TYPE_ATSC3, TYPE_DVBC, TYPE_DVBS,
- TYPE_DVBT, TYPE_ISDBS, TYPE_ISDBS3, TYPE_ISDBT})
+ TYPE_DVBT, TYPE_ISDBS, TYPE_ISDBS3, TYPE_ISDBT, TYPE_DTMB})
@Retention(RetentionPolicy.SOURCE)
public @interface Type {}
@@ -81,7 +81,10 @@ public abstract class FrontendSettings {
* Integrated Services Digital Broadcasting-Terrestrial (ISDB-T) frontend type.
*/
public static final int TYPE_ISDBT = Constants.FrontendType.ISDBT;
-
+ /**
+ * Digital Terrestrial Multimedia Broadcast standard (DTMB) frontend type.
+ */
+ public static final int TYPE_DTMB = android.hardware.tv.tuner.V1_1.Constants.FrontendType.DTMB;
/** @hide */
diff --git a/non-updatable-api/system-current.txt b/non-updatable-api/system-current.txt
index d72d678aee6b..931a98e1b6d8 100644
--- a/non-updatable-api/system-current.txt
+++ b/non-updatable-api/system-current.txt
@@ -5599,6 +5599,69 @@ package android.media.tv.tuner.frontend {
method @NonNull public android.media.tv.tuner.frontend.AtscFrontendSettings.Builder setModulation(int);
}
+ public class DtmbFrontendCapabilities extends android.media.tv.tuner.frontend.FrontendCapabilities {
+ method public int getBandwidthCapability();
+ method public int getCodeRateCapability();
+ method public int getGuardIntervalCapability();
+ method public int getModulationCapability();
+ method public int getTimeInterleaveModeCapability();
+ method public int getTransmissionModeCapability();
+ }
+
+ public class DtmbFrontendSettings extends android.media.tv.tuner.frontend.FrontendSettings {
+ method @NonNull public static android.media.tv.tuner.frontend.DtmbFrontendSettings.Builder builder();
+ method public int getBandwidth();
+ method public int getCodeRate();
+ method public int getGuardInterval();
+ method public int getModulation();
+ method public int getTimeInterleaveMode();
+ method public int getTransmissionMode();
+ method public int getType();
+ field public static final int BANDWIDTH_6MHZ = 4; // 0x4
+ field public static final int BANDWIDTH_8MHZ = 2; // 0x2
+ field public static final int BANDWIDTH_AUTO = 1; // 0x1
+ field public static final int BANDWIDTH_UNDEFINED = 0; // 0x0
+ field public static final int CODERATE_2_5 = 2; // 0x2
+ field public static final int CODERATE_3_5 = 4; // 0x4
+ field public static final int CODERATE_4_5 = 8; // 0x8
+ field public static final int CODERATE_AUTO = 1; // 0x1
+ field public static final int CODERATE_UNDEFINED = 0; // 0x0
+ field public static final int GUARD_INTERVAL_AUTO = 1; // 0x1
+ field public static final int GUARD_INTERVAL_PN_420_CONST = 16; // 0x10
+ field public static final int GUARD_INTERVAL_PN_420_VARIOUS = 2; // 0x2
+ field public static final int GUARD_INTERVAL_PN_595_CONST = 4; // 0x4
+ field public static final int GUARD_INTERVAL_PN_945_CONST = 32; // 0x20
+ field public static final int GUARD_INTERVAL_PN_945_VARIOUS = 8; // 0x8
+ field public static final int GUARD_INTERVAL_PN_RESERVED = 64; // 0x40
+ field public static final int GUARD_INTERVAL_UNDEFINED = 0; // 0x0
+ field public static final int MODULATION_CONSTELLATION_16QAM = 8; // 0x8
+ field public static final int MODULATION_CONSTELLATION_32QAM = 16; // 0x10
+ field public static final int MODULATION_CONSTELLATION_4QAM = 2; // 0x2
+ field public static final int MODULATION_CONSTELLATION_4QAM_NR = 4; // 0x4
+ field public static final int MODULATION_CONSTELLATION_64QAM = 32; // 0x20
+ field public static final int MODULATION_CONSTELLATION_AUTO = 1; // 0x1
+ field public static final int MODULATION_CONSTELLATION_UNDEFINED = 0; // 0x0
+ field public static final int TIME_INTERLEAVE_MODE_AUTO = 1; // 0x1
+ field public static final int TIME_INTERLEAVE_MODE_TIMER_INT_240 = 2; // 0x2
+ field public static final int TIME_INTERLEAVE_MODE_TIMER_INT_720 = 4; // 0x4
+ field public static final int TIME_INTERLEAVE_MODE_UNDEFINED = 0; // 0x0
+ field public static final int TRANSMISSION_MODE_AUTO = 1; // 0x1
+ field public static final int TRANSMISSION_MODE_C1 = 2; // 0x2
+ field public static final int TRANSMISSION_MODE_C3780 = 4; // 0x4
+ field public static final int TRANSMISSION_MODE_UNDEFINED = 0; // 0x0
+ }
+
+ public static final class DtmbFrontendSettings.Builder {
+ method @NonNull public android.media.tv.tuner.frontend.DtmbFrontendSettings build();
+ method @NonNull public android.media.tv.tuner.frontend.DtmbFrontendSettings.Builder setBandwidth(int);
+ method @NonNull public android.media.tv.tuner.frontend.DtmbFrontendSettings.Builder setCodeRate(int);
+ method @IntRange(from=1) @NonNull public android.media.tv.tuner.frontend.DtmbFrontendSettings.Builder setFrequency(int);
+ method @NonNull public android.media.tv.tuner.frontend.DtmbFrontendSettings.Builder setGuardInterval(int);
+ method @NonNull public android.media.tv.tuner.frontend.DtmbFrontendSettings.Builder setModulation(int);
+ method @NonNull public android.media.tv.tuner.frontend.DtmbFrontendSettings.Builder setTimeInterleaveMode(int);
+ method @NonNull public android.media.tv.tuner.frontend.DtmbFrontendSettings.Builder setTransmissionMode(int);
+ }
+
public class DvbcFrontendCapabilities extends android.media.tv.tuner.frontend.FrontendCapabilities {
method public int getAnnexCapability();
method public int getFecCapability();
@@ -5922,6 +5985,7 @@ package android.media.tv.tuner.frontend {
field public static final int TYPE_ANALOG = 1; // 0x1
field public static final int TYPE_ATSC = 2; // 0x2
field public static final int TYPE_ATSC3 = 3; // 0x3
+ field public static final int TYPE_DTMB = 10; // 0xa
field public static final int TYPE_DVBC = 4; // 0x4
field public static final int TYPE_DVBS = 5; // 0x5
field public static final int TYPE_DVBT = 6; // 0x6