Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 79dbc1af authored by Sadiq Sada's avatar Sadiq Sada Committed by Android (Google) Code Review
Browse files

Merge "Add FrontendStatus for IPTV"

parents a3cbb6ae e8f9d4a8
Loading
Loading
Loading
Loading
+10 −0
Original line number Original line Diff line number Diff line
@@ -8790,6 +8790,11 @@ package android.media.tv.tuner.frontend {
    method public int getHierarchy();
    method public int getHierarchy();
    method public long getInnerFec();
    method public long getInnerFec();
    method @NonNull public int[] getInterleaving();
    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 getIsdbtMode();
    method public int getIsdbtPartialReceptionFlag();
    method public int getIsdbtPartialReceptionFlag();
    method @IntRange(from=0, to=255) @NonNull public int[] getIsdbtSegment();
    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_GUARD_INTERVAL = 26; // 0x1a
    field public static final int FRONTEND_STATUS_TYPE_HIERARCHY = 19; // 0x13
    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_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_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_PARTIAL_RECEPTION_FLAG = 38; // 0x26
    field public static final int FRONTEND_STATUS_TYPE_ISDBT_SEGMENTS = 31; // 0x1f
    field public static final int FRONTEND_STATUS_TYPE_ISDBT_SEGMENTS = 31; // 0x1f
+130 −1
Original line number Original line Diff line number Diff line
@@ -23,6 +23,7 @@ import android.annotation.SuppressLint;
import android.annotation.SystemApi;
import android.annotation.SystemApi;
import android.media.tv.tuner.Lnb;
import android.media.tv.tuner.Lnb;
import android.media.tv.tuner.TunerVersionChecker;
import android.media.tv.tuner.TunerVersionChecker;

import java.lang.annotation.Retention;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.RetentionPolicy;
import java.util.Arrays;
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_MISO_ENABLED, FRONTEND_STATUS_TYPE_IS_LINEAR,
            FRONTEND_STATUS_TYPE_IS_SHORT_FRAMES_ENABLED, FRONTEND_STATUS_TYPE_ISDBT_MODE,
            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, 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)
    @Retention(RetentionPolicy.SOURCE)
    public @interface FrontendStatusType {}
    public @interface FrontendStatusType {}


@@ -270,6 +274,36 @@ public class FrontendStatus {
    public static final int FRONTEND_STATUS_TYPE_DVBT_CELL_IDS =
    public static final int FRONTEND_STATUS_TYPE_DVBT_CELL_IDS =
            android.hardware.tv.tuner.FrontendStatusType.DVBT_CELL_IDS;
            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
     * All PLP information in a frequency band for ATSC-3.0 frontend, which includes both tuned and
     * not tuned PLPs for currently watching service.
     * not tuned PLPs for currently watching service.
@@ -519,6 +553,11 @@ public class FrontendStatus {
    private int[] mStreamIds;
    private int[] mStreamIds;
    private int[] mDvbtCellIds;
    private int[] mDvbtCellIds;
    private Atsc3PlpInfo[] mAllPlpInfo;
    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.
    // Constructed and fields set by JNI code.
    private FrontendStatus() {
    private FrontendStatus() {
@@ -1144,4 +1183,94 @@ public class FrontendStatus {
            return mUec;
            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;
    }
}
}
+46 −0
Original line number Original line Diff line number Diff line
@@ -2827,6 +2827,52 @@ jobject JTuner::getFrontendStatus(jintArray types) {
                env->DeleteLocalRef(plpClazz);
                env->DeleteLocalRef(plpClazz);
                break;
                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;
    return statusObj;