diff --git a/core/api/system-current.txt b/core/api/system-current.txt index 6e1ab915b92c1..5091ef8a11cb8 100644 --- a/core/api/system-current.txt +++ b/core/api/system-current.txt @@ -7605,6 +7605,7 @@ package android.media.tv.tuner.frontend { method public int getBer(); method @NonNull public int[] getBers(); method @NonNull public int[] getCodeRates(); + method @NonNull public int[] getDvbtCellIds(); method @NonNull public int[] getExtendedModulations(); method @Deprecated public int getFreqOffset(); method public long getFreqOffsetLong(); @@ -7647,6 +7648,7 @@ package android.media.tv.tuner.frontend { field public static final int FRONTEND_STATUS_TYPE_BERS = 23; // 0x17 field public static final int FRONTEND_STATUS_TYPE_CODERATES = 24; // 0x18 field public static final int FRONTEND_STATUS_TYPE_DEMOD_LOCK = 0; // 0x0 + field public static final int FRONTEND_STATUS_TYPE_DVBT_CELL_IDS = 40; // 0x28 field public static final int FRONTEND_STATUS_TYPE_EWBS = 13; // 0xd field public static final int FRONTEND_STATUS_TYPE_FEC = 8; // 0x8 field public static final int FRONTEND_STATUS_TYPE_FREQ_OFFSET = 18; // 0x12 @@ -7881,6 +7883,7 @@ package android.media.tv.tuner.frontend { method public void onAtsc3PlpInfosReported(@NonNull android.media.tv.tuner.frontend.Atsc3PlpInfo[]); method public default void onDvbcAnnexReported(int); method public void onDvbsStandardReported(int); + method public default void onDvbtCellIdsReported(@NonNull int[]); method public void onDvbtStandardReported(int); method public default void onFrequenciesLongReported(@NonNull long[]); method @Deprecated public void onFrequenciesReported(@NonNull int[]); diff --git a/media/java/android/media/tv/tuner/Tuner.java b/media/java/android/media/tv/tuner/Tuner.java index 255b391b22592..41f926520a13d 100644 --- a/media/java/android/media/tv/tuner/Tuner.java +++ b/media/java/android/media/tv/tuner/Tuner.java @@ -1577,6 +1577,20 @@ public class Tuner implements AutoCloseable { } } + private void onDvbtCellIdsReported(int[] dvbtCellIds) { + synchronized (mScanCallbackLock) { + if (mScanCallbackExecutor != null && mScanCallback != null) { + mScanCallbackExecutor.execute(() -> { + synchronized (mScanCallbackLock) { + if (mScanCallback != null) { + mScanCallback.onDvbtCellIdsReported(dvbtCellIds); + } + } + }); + } + } + } + /** * Opens a filter object based on the given types and buffer size. * diff --git a/media/java/android/media/tv/tuner/frontend/FrontendStatus.java b/media/java/android/media/tv/tuner/frontend/FrontendStatus.java index 92eafec6a13ad..8cedd04a8b893 100644 --- a/media/java/android/media/tv/tuner/frontend/FrontendStatus.java +++ b/media/java/android/media/tv/tuner/frontend/FrontendStatus.java @@ -53,7 +53,8 @@ public class FrontendStatus { FRONTEND_STATUS_TYPE_MODULATIONS_EXT, FRONTEND_STATUS_TYPE_ROLL_OFF, FRONTEND_STATUS_TYPE_IS_MISO_ENABLED, FRONTEND_STATUS_TYPE_IS_LINEAR, FRONTEND_STATUS_TYPE_IS_SHORT_FRAMES_ENABLED, FRONTEND_STATUS_TYPE_ISDBT_MODE, - FRONTEND_STATUS_TYPE_ISDBT_PARTIAL_RECEPTION_FLAG, FRONTEND_STATUS_TYPE_STREAM_IDS}) + FRONTEND_STATUS_TYPE_ISDBT_PARTIAL_RECEPTION_FLAG, FRONTEND_STATUS_TYPE_STREAM_IDS, + FRONTEND_STATUS_TYPE_DVBT_CELL_IDS}) @Retention(RetentionPolicy.SOURCE) public @interface FrontendStatusType {} @@ -260,6 +261,12 @@ public class FrontendStatus { public static final int FRONTEND_STATUS_TYPE_STREAM_IDS = android.hardware.tv.tuner.FrontendStatusType.STREAM_ID_LIST; + /** + * DVB-T Cell IDs. + */ + public static final int FRONTEND_STATUS_TYPE_DVBT_CELL_IDS = + android.hardware.tv.tuner.FrontendStatusType.DVBT_CELL_IDS; + /** @hide */ @IntDef(value = { AtscFrontendSettings.MODULATION_UNDEFINED, @@ -500,6 +507,7 @@ public class FrontendStatus { private Integer mIsdbtMode; private Integer mIsdbtPartialReceptionFlag; private int[] mStreamIds; + private int[] mDvbtCellIds; // Constructed and fields set by JNI code. private FrontendStatus() { @@ -1051,6 +1059,24 @@ public class FrontendStatus { return mStreamIds; } + /** + * Gets DVB-T cell ids. + * + *
This query is only supported by Tuner HAL 2.0 or higher. Unsupported version or if HAL
+ * doesn't return cell ids will throw IllegalStateException. Use
+ * {@link TunerVersionChecker#getTunerVersion()} to check the version.
+ */
+ @SuppressLint("ArrayReturn")
+ @NonNull
+ public int[] getDvbtCellIds() {
+ TunerVersionChecker.checkHigherOrEqualVersionTo(
+ TunerVersionChecker.TUNER_VERSION_2_0, "dvbt cell ids status");
+ if (mDvbtCellIds == null) {
+ throw new IllegalStateException("dvbt cell ids are empty");
+ }
+ return mDvbtCellIds;
+ }
+
/**
* Information of each tuning Physical Layer Pipes.
*/
diff --git a/media/java/android/media/tv/tuner/frontend/ScanCallback.java b/media/java/android/media/tv/tuner/frontend/ScanCallback.java
index cb35edb15c624..8917050fcd241 100644
--- a/media/java/android/media/tv/tuner/frontend/ScanCallback.java
+++ b/media/java/android/media/tv/tuner/frontend/ScanCallback.java
@@ -94,4 +94,7 @@ public interface ScanCallback {
/** DVBC Frontend Annex reported. */
default void onDvbcAnnexReported(@DvbcFrontendSettings.Annex int dvbcAnnex) {}
+
+ /** DVBT Frontend Cell Ids reported. */
+ default void onDvbtCellIdsReported(@NonNull int[] dvbtCellIds) {}
}
diff --git a/media/jni/android_media_tv_Tuner.cpp b/media/jni/android_media_tv_Tuner.cpp
index e91e2381bd42c..712add4ffc3c6 100644
--- a/media/jni/android_media_tv_Tuner.cpp
+++ b/media/jni/android_media_tv_Tuner.cpp
@@ -1191,6 +1191,14 @@ void FrontendClientCallbackImpl::executeOnScanMessage(
dvbcAnnex);
break;
}
+ case FrontendScanMessageType::DVBT_CELL_IDS: {
+ std::vector