diff --git a/api/system-current.txt b/api/system-current.txt index a05a04100060b..074541b84ace8 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 3252c90f01535..56499e26bafe2 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)}. * + *

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 { * *

Details for channels found are returned via {@link ScanCallback}. * + *

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 0000000000000..9fc3a234876b6 --- /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. + * + *

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 0000000000000..2c3fe6a2583c4 --- /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. + * + *

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. + * + *

Default value is 0. + */ + @NonNull + @IntRange(from = 1) + @SuppressLint("MissingGetterMatchingBuilder") + public Builder setFrequency(int frequency) { + mFrequency = frequency; + return this; + } + + /** + * Sets Modulation. + * + *

Default value is {@link #MODULATION_CONSTELLATION_UNDEFINED}. + */ + @NonNull + public Builder setModulation(@Modulation int modulation) { + mModulation = modulation; + return this; + } + + /** + * Sets Code Rate. + * + *

Default value is {@link #CODERATE_UNDEFINED}. + */ + @NonNull + public Builder setCodeRate(@CodeRate int codeRate) { + mCodeRate = codeRate; + return this; + } + + /** + * Sets Bandwidth. + * + *

Default value is {@link #BANDWIDTH_UNDEFINED}. + */ + @NonNull + public Builder setBandwidth(@Bandwidth int bandwidth) { + mBandwidth = bandwidth; + return this; + } + + /** + * Sets Time Interleave Mode. + * + *

Default value is {@link #TIME_INTERLEAVE_MODE_UNDEFINED}. + */ + @NonNull + public Builder setTimeInterleaveMode(@TimeInterleaveMode int timeInterleaveMode) { + mTimeInterleaveMode = timeInterleaveMode; + return this; + } + + /** + * Sets Guard Interval. + * + *

Default value is {@link #GUARD_INTERVAL_UNDEFINED}. + */ + @NonNull + public Builder setGuardInterval(@GuardInterval int guardInterval) { + mGuardInterval = guardInterval; + return this; + } + /** + * Sets Transmission Mode. + * + *

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 82f7afab23df9..2147622d349d4 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 d72d678aee6b1..931a98e1b6d80 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