diff options
| author | 2023-01-22 16:12:00 +0000 | |
|---|---|---|
| committer | 2023-01-22 16:12:00 +0000 | |
| commit | 79dbc1af930e7ab4a656e25e2f2bc227e09aa459 (patch) | |
| tree | 12f327eb30e0feb2bc3a2ba70ff8a7109851a12c | |
| parent | a3cbb6ae0e914fd5cd9b06cef90679dfac2e6f1e (diff) | |
| parent | e8f9d4a8a23587adc8deb46b77ed84a803f6571b (diff) | |
Merge "Add FrontendStatus for IPTV"
| -rw-r--r-- | core/api/system-current.txt | 10 | ||||
| -rw-r--r-- | media/java/android/media/tv/tuner/frontend/FrontendStatus.java | 131 | ||||
| -rw-r--r-- | media/jni/android_media_tv_Tuner.cpp | 46 |
3 files changed, 186 insertions, 1 deletions
diff --git a/core/api/system-current.txt b/core/api/system-current.txt index 4c75a546cb6a..50cafe893b55 100644 --- a/core/api/system-current.txt +++ b/core/api/system-current.txt @@ -8790,6 +8790,11 @@ package android.media.tv.tuner.frontend { method public int getHierarchy(); method public long getInnerFec(); method @NonNull public int[] getInterleaving(); + method @IntRange(from=0) public int getIptvAverageJitterMillis(); + method @NonNull public String getIptvContentUrl(); + method @IntRange(from=0) public long getIptvPacketsLost(); + method @IntRange(from=0) public long getIptvPacketsReceived(); + method @IntRange(from=0) public int getIptvWorstJitterMillis(); method public int getIsdbtMode(); method public int getIsdbtPartialReceptionFlag(); method @IntRange(from=0, to=255) @NonNull public int[] getIsdbtSegment(); @@ -8833,6 +8838,11 @@ package android.media.tv.tuner.frontend { field public static final int FRONTEND_STATUS_TYPE_GUARD_INTERVAL = 26; // 0x1a field public static final int FRONTEND_STATUS_TYPE_HIERARCHY = 19; // 0x13 field public static final int FRONTEND_STATUS_TYPE_INTERLEAVINGS = 30; // 0x1e + field public static final int FRONTEND_STATUS_TYPE_IPTV_AVERAGE_JITTER_MS = 46; // 0x2e + field public static final int FRONTEND_STATUS_TYPE_IPTV_CONTENT_URL = 42; // 0x2a + field public static final int FRONTEND_STATUS_TYPE_IPTV_PACKETS_LOST = 43; // 0x2b + field public static final int FRONTEND_STATUS_TYPE_IPTV_PACKETS_RECEIVED = 44; // 0x2c + field public static final int FRONTEND_STATUS_TYPE_IPTV_WORST_JITTER_MS = 45; // 0x2d field public static final int FRONTEND_STATUS_TYPE_ISDBT_MODE = 37; // 0x25 field public static final int FRONTEND_STATUS_TYPE_ISDBT_PARTIAL_RECEPTION_FLAG = 38; // 0x26 field public static final int FRONTEND_STATUS_TYPE_ISDBT_SEGMENTS = 31; // 0x1f diff --git a/media/java/android/media/tv/tuner/frontend/FrontendStatus.java b/media/java/android/media/tv/tuner/frontend/FrontendStatus.java index 9fbea724f491..fd677acf4ee1 100644 --- a/media/java/android/media/tv/tuner/frontend/FrontendStatus.java +++ b/media/java/android/media/tv/tuner/frontend/FrontendStatus.java @@ -23,6 +23,7 @@ import android.annotation.SuppressLint; import android.annotation.SystemApi; import android.media.tv.tuner.Lnb; import android.media.tv.tuner.TunerVersionChecker; + import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.util.Arrays; @@ -57,7 +58,10 @@ public class FrontendStatus { 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_DVBT_CELL_IDS, FRONTEND_STATUS_TYPE_ATSC3_ALL_PLP_INFO}) + FRONTEND_STATUS_TYPE_DVBT_CELL_IDS, FRONTEND_STATUS_TYPE_ATSC3_ALL_PLP_INFO, + FRONTEND_STATUS_TYPE_IPTV_CONTENT_URL, FRONTEND_STATUS_TYPE_IPTV_PACKETS_LOST, + FRONTEND_STATUS_TYPE_IPTV_PACKETS_RECEIVED, FRONTEND_STATUS_TYPE_IPTV_WORST_JITTER_MS, + FRONTEND_STATUS_TYPE_IPTV_AVERAGE_JITTER_MS}) @Retention(RetentionPolicy.SOURCE) public @interface FrontendStatusType {} @@ -271,6 +275,36 @@ public class FrontendStatus { android.hardware.tv.tuner.FrontendStatusType.DVBT_CELL_IDS; /** + * IPTV content URL. + */ + public static final int FRONTEND_STATUS_TYPE_IPTV_CONTENT_URL = + android.hardware.tv.tuner.FrontendStatusType.IPTV_CONTENT_URL; + + /** + * IPTV packets lost. + */ + public static final int FRONTEND_STATUS_TYPE_IPTV_PACKETS_LOST = + android.hardware.tv.tuner.FrontendStatusType.IPTV_PACKETS_LOST; + + /** + * IPTV packets received. + */ + public static final int FRONTEND_STATUS_TYPE_IPTV_PACKETS_RECEIVED = + android.hardware.tv.tuner.FrontendStatusType.IPTV_PACKETS_RECEIVED; + + /** + * IPTV worst jitter. + */ + public static final int FRONTEND_STATUS_TYPE_IPTV_WORST_JITTER_MS = + android.hardware.tv.tuner.FrontendStatusType.IPTV_WORST_JITTER_MS; + + /** + * IPTV average jitter. + */ + public static final int FRONTEND_STATUS_TYPE_IPTV_AVERAGE_JITTER_MS = + android.hardware.tv.tuner.FrontendStatusType.IPTV_AVERAGE_JITTER_MS; + + /** * All PLP information in a frequency band for ATSC-3.0 frontend, which includes both tuned and * not tuned PLPs for currently watching service. */ @@ -519,6 +553,11 @@ public class FrontendStatus { private int[] mStreamIds; private int[] mDvbtCellIds; private Atsc3PlpInfo[] mAllPlpInfo; + private String mIptvContentUrl; + private Long mIptvPacketsLost; + private Long mIptvPacketsReceived; + private Integer mIptvWorstJitterMs; + private Integer mIptvAverageJitterMs; // Constructed and fields set by JNI code. private FrontendStatus() { @@ -1144,4 +1183,94 @@ public class FrontendStatus { return mUec; } } + + /** + * Gets the IPTV content URL. + * + * @return A String URL in the format protocol://ip:port (udp://127.0.0.1:3000). + * + * <p>This query is only supported by Tuner HAL 3.0 or higher. Use + * {@link TunerVersionChecker#getTunerVersion()} to check the version. + */ + @NonNull + public String getIptvContentUrl() { + TunerVersionChecker.checkHigherOrEqualVersionTo( + TunerVersionChecker.TUNER_VERSION_3_0, "IptvContentUrl status"); + if (mIptvContentUrl == null) { + throw new IllegalStateException("IptvContentUrl status is empty"); + } + return mIptvContentUrl; + } + + /** + * Gets the number of packets lost. + * + * @return A long value representing the number of packets lost in transmission. + * + * <p>This query is only supported by Tuner HAL 3.0 or higher. Use + * {@link TunerVersionChecker#getTunerVersion()} to check the version. + */ + @IntRange(from = 0) + public long getIptvPacketsLost() { + TunerVersionChecker.checkHigherOrEqualVersionTo( + TunerVersionChecker.TUNER_VERSION_3_0, "IptvPacketsLost status"); + if (mIptvPacketsLost == null) { + throw new IllegalStateException("IptvPacketsLost status is empty"); + } + return mIptvPacketsLost; + } + + /** + * Gets the number of packets received. + * + * @return A long value representing the number of packets received. + * + * <p>This query is only supported by Tuner HAL 3.0 or higher. Use + * {@link TunerVersionChecker#getTunerVersion()} to check the version. + */ + @IntRange(from = 0) + public long getIptvPacketsReceived() { + TunerVersionChecker.checkHigherOrEqualVersionTo( + TunerVersionChecker.TUNER_VERSION_3_0, "IptvPacketsReceived status"); + if (mIptvPacketsReceived == null) { + throw new IllegalStateException("IptvPacketsReceived status is empty"); + } + return mIptvPacketsReceived; + } + + /** + * Gets the worst jitter. + * + * @return An integer representing worst jitter recorded (in milliseconds). + * + * <p>This query is only supported by Tuner HAL 3.0 or higher. Use + * {@link TunerVersionChecker#getTunerVersion()} to check the version. + */ + @IntRange(from = 0) + public int getIptvWorstJitterMillis() { + TunerVersionChecker.checkHigherOrEqualVersionTo( + TunerVersionChecker.TUNER_VERSION_3_0, "IptvWorstJitterMs status"); + if (mIptvWorstJitterMs == null) { + throw new IllegalStateException("IptvWorstJitterMs status is empty"); + } + return mIptvWorstJitterMs; + } + + /** + * Gets the average jitter. + * + * @return An integer representing average jitter recorded (in milliseconds). + * + * <p>This query is only supported by Tuner HAL 3.0 or higher. Use + * {@link TunerVersionChecker#getTunerVersion()} to check the version. + */ + @IntRange(from = 0) + public int getIptvAverageJitterMillis() { + TunerVersionChecker.checkHigherOrEqualVersionTo( + TunerVersionChecker.TUNER_VERSION_3_0, "IptvAverageJitterMs status"); + if (mIptvAverageJitterMs == null) { + throw new IllegalStateException("IptvAverageJitterMs status is empty"); + } + return mIptvAverageJitterMs; + } } diff --git a/media/jni/android_media_tv_Tuner.cpp b/media/jni/android_media_tv_Tuner.cpp index 1a41bc29deed..35ee3ee969e6 100644 --- a/media/jni/android_media_tv_Tuner.cpp +++ b/media/jni/android_media_tv_Tuner.cpp @@ -2827,6 +2827,52 @@ jobject JTuner::getFrontendStatus(jintArray types) { env->DeleteLocalRef(plpClazz); break; } + case FrontendStatus::Tag::iptvContentUrl: { + jfieldID field = env->GetFieldID(clazz, "mIptvContentUrl", "Ljava/lang/String;"); + std::string iptvContentUrl = s.get<FrontendStatus::Tag::iptvContentUrl>(); + jstring iptvContentUrlUtf8 = env->NewStringUTF(iptvContentUrl.c_str()); + env->SetObjectField(statusObj, field, iptvContentUrlUtf8); + env->DeleteLocalRef(iptvContentUrlUtf8); + break; + } + case FrontendStatus::Tag::iptvPacketsLost: { + jfieldID field = env->GetFieldID(clazz, "mIptvPacketsLost", "Ljava/lang/Long;"); + jobject newLongObj = + env->NewObject(longClazz, initLong, + s.get<FrontendStatus::Tag::iptvPacketsLost>()); + env->SetObjectField(statusObj, field, newLongObj); + env->DeleteLocalRef(newLongObj); + break; + } + case FrontendStatus::Tag::iptvPacketsReceived: { + jfieldID field = env->GetFieldID(clazz, "mIptvPacketsReceived", "Ljava/lang/Long;"); + jobject newLongObj = + env->NewObject(longClazz, initLong, + s.get<FrontendStatus::Tag::iptvPacketsReceived>()); + env->SetObjectField(statusObj, field, newLongObj); + env->DeleteLocalRef(newLongObj); + break; + } + case FrontendStatus::Tag::iptvWorstJitterMs: { + jfieldID field = env->GetFieldID(clazz, "mIptvWorstJitterMs", + "Ljava/lang/Integer;"); + jobject newIntegerObj = + env->NewObject(intClazz, initInt, + s.get<FrontendStatus::Tag::iptvWorstJitterMs>()); + env->SetObjectField(statusObj, field, newIntegerObj); + env->DeleteLocalRef(newIntegerObj); + break; + } + case FrontendStatus::Tag::iptvAverageJitterMs: { + jfieldID field = env->GetFieldID(clazz, "mIptvAverageJitterMs", + "Ljava/lang/Integer;"); + jobject newIntegerObj = + env->NewObject(intClazz, initInt, + s.get<FrontendStatus::Tag::iptvAverageJitterMs>()); + env->SetObjectField(statusObj, field, newIntegerObj); + env->DeleteLocalRef(newIntegerObj); + break; + } } } return statusObj; |