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

Commit b13e3042 authored by Amy Zhang's avatar Amy Zhang
Browse files

Make Tuner java framework and Tuner JNI adopt Tuner HAL 1.1

Please see the Tuner HAL 1.1 design doc here:
go/android_tuner_hal_1.1

In this CL, the Tuner framework and JNI start to use the
@1.1::IFilter.getId64Bit() API and @1.1::IFilterCallback.

Currently the 1.1 IFilterCallback passes two new 1.1 record filter
events: DemuxFilterTsRecordEvent and DemuxFilterMmtpRecordEvent.

Tuner Framework exposes a new API: getId64Bit() which calls
the native getId64Bit. Also Filter java will be using long id
instead of the previous int id.

The FilterCallback interface remains unchanged but the TsRecordEvent
and the MmtpRecordEvent carry more variables to pass the extra info
in version 1.1.
When the HAL implementation is on version 1.0 and calls
onFilterEvent, it still uses the extended TsRecordEvent and
MmtpRecordEvent but the 1.1 field will be set to invalid.

Related HAL interface can be referred here:
hardware/interfaces/tv/tuner/1.1

Test: make -j44 dist, atest android.media.tv.tuner.cts
Bug: b/159058358
Bug: 158816517

Change-Id: I8d52c0b2031eed9c54909e5bf233137c56eeb78f
parent 782aa900
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -482,6 +482,7 @@ java_library {
        "android.hardware.thermal-V2.0-java",
        "android.hardware.tv.input-V1.0-java-constants",
        "android.hardware.tv.tuner-V1.0-java-constants",
        "android.hardware.tv.tuner-V1.1-java-constants",
        "android.hardware.usb-V1.0-java-constants",
        "android.hardware.usb-V1.1-java-constants",
        "android.hardware.usb-V1.2-java-constants",
+6 −0
Original line number Diff line number Diff line
@@ -5052,6 +5052,8 @@ package android.media.tv.tuner {
    method public void updateResourcePriority(int, int);
    field public static final int INVALID_AV_SYNC_ID = -1; // 0xffffffff
    field public static final int INVALID_FILTER_ID = -1; // 0xffffffff
    field public static final long INVALID_FILTER_ID_64BIT = -1L; // 0xffffffffffffffffL
    field public static final int INVALID_MMTP_RECORD_EVENT_MPT_SEQUENCE_NUM = -1; // 0xffffffff
    field public static final int INVALID_STREAM_ID = 65535; // 0xffff
    field public static final long INVALID_TIMESTAMP = -1L; // 0xffffffffffffffffL
    field public static final int INVALID_TS_PID = 65535; // 0xffff
@@ -5204,6 +5206,7 @@ package android.media.tv.tuner.filter {
    method public int configure(@NonNull android.media.tv.tuner.filter.FilterConfiguration);
    method public int flush();
    method public int getId();
    method public long getId64Bit();
    method public int read(@NonNull byte[], long, long);
    method public int setDataSource(@Nullable android.media.tv.tuner.filter.Filter);
    method public int start();
@@ -5304,6 +5307,8 @@ package android.media.tv.tuner.filter {
  public class MmtpRecordEvent extends android.media.tv.tuner.filter.FilterEvent {
    method public long getDataLength();
    method public int getMpuSequenceNumber();
    method public long getPts();
    method public int getScHevcIndexMask();
  }
@@ -5466,6 +5471,7 @@ package android.media.tv.tuner.filter {
  public class TsRecordEvent extends android.media.tv.tuner.filter.FilterEvent {
    method public long getDataLength();
    method public int getPacketId();
    method public long getPts();
    method public int getScIndexMask();
    method public int getTsIndexMask();
  }
+23 −4
Original line number Diff line number Diff line
@@ -98,15 +98,34 @@ public class Tuner implements AutoCloseable {
     * Invalid timestamp.
     *
     * <p>Returned by {@link android.media.tv.tuner.filter.TimeFilter#getSourceTime()},
     * {@link android.media.tv.tuner.filter.TimeFilter#getTimeStamp()}, or
     * {@link Tuner#getAvSyncTime(int)} when the requested timestamp is not available.
     * {@link android.media.tv.tuner.filter.TimeFilter#getTimeStamp()},
     * {@link Tuner#getAvSyncTime(int)} or {@link TsRecordEvent#getPts()} and
     * {@link MmtpRecordEvent#getPts()} when the requested timestamp is not available.
     *
     * @see android.media.tv.tuner.filter.TimeFilter#getSourceTime()
     * @see android.media.tv.tuner.filter.TimeFilter#getTimeStamp()
     * @see Tuner#getAvSyncTime(int)
     * @see android.media.tv.tuner.filter.TsRecordEvent#getPts()
     * @see android.media.tv.tuner.filter.MmtpRecordEvent#getPts()
     */
    public static final long INVALID_TIMESTAMP = -1L;

    public static final long INVALID_TIMESTAMP =
            android.hardware.tv.tuner.V1_1.Constants.Constant64Bit.INVALID_PRESENTATION_TIME_STAMP;
    /**
     * Invalid mpu sequence number in MmtpRecordEvent.
     *
     * <p>Returned by {@link MmtpRecordEvent#getMpuSequenceNumber()} when the requested sequence
     * number is not available.
     *
     * @see android.media.tv.tuner.filter.MmtpRecordEvent#getMpuSequenceNumber()
     */
    public static final int INVALID_MMTP_RECORD_EVENT_MPT_SEQUENCE_NUM =
            android.hardware.tv.tuner.V1_1.Constants.Constant
                    .INVALID_MMTP_RECORD_EVENT_MPT_SEQUENCE_NUM;
    /**
     * Invalid 64-bit filter ID.
     */
    public static final long INVALID_FILTER_ID_64BIT =
            android.hardware.tv.tuner.V1_1.Constants.Constant64Bit.INVALID_FILTER_ID_64BIT;

    /** @hide */
    @IntDef(prefix = "SCAN_TYPE_", value = {SCAN_TYPE_UNDEFINED, SCAN_TYPE_AUTO, SCAN_TYPE_BLIND})
+13 −2
Original line number Diff line number Diff line
@@ -185,7 +185,7 @@ public class Filter implements AutoCloseable {
    private long mNativeContext;
    private FilterCallback mCallback;
    private Executor mExecutor;
    private final int mId;
    private final long mId;
    private int mMainType;
    private int mSubtype;
    private Filter mSource;
@@ -196,6 +196,7 @@ public class Filter implements AutoCloseable {
    private native int nativeConfigureFilter(
            int type, int subType, FilterConfiguration settings);
    private native int nativeGetId();
    private native long nativeGetId64Bit();
    private native int nativeSetDataSource(Filter source);
    private native int nativeStartFilter();
    private native int nativeStopFilter();
@@ -204,7 +205,7 @@ public class Filter implements AutoCloseable {
    private native int nativeClose();

    // Called by JNI
    private Filter(int id) {
    private Filter(long id) {
        mId = id;
    }

@@ -268,6 +269,16 @@ public class Filter implements AutoCloseable {
        }
    }

    /**
     * Gets the 64-bit filter Id.
     */
    public long getId64Bit() {
        synchronized (mLock) {
            TunerUtils.checkResourceState(TAG, mIsClosed);
            return nativeGetId64Bit();
        }
    }

    /**
     * Sets the filter's data source.
     *
+21 −1
Original line number Diff line number Diff line
@@ -29,11 +29,15 @@ import android.media.tv.tuner.filter.RecordSettings.ScHevcIndex;
public class MmtpRecordEvent extends FilterEvent {
    private final int mScHevcIndexMask;
    private final long mDataLength;
    private final int mMpuSequenceNumber;
    private final long mPts;

    // This constructor is used by JNI code only
    private MmtpRecordEvent(int scHevcIndexMask, long dataLength) {
    private MmtpRecordEvent(int scHevcIndexMask, long dataLength, int mpuSequenceNumber, long pts) {
        mScHevcIndexMask = scHevcIndexMask;
        mDataLength = dataLength;
        mMpuSequenceNumber = mpuSequenceNumber;
        mPts = pts;
    }

    /**
@@ -51,4 +55,20 @@ public class MmtpRecordEvent extends FilterEvent {
    public long getDataLength() {
        return mDataLength;
    }

    /**
     * Get the MPU sequence number of the filtered data.
     */
    public int getMpuSequenceNumber() {
        return mMpuSequenceNumber;
    }

    /**
     * Get the Presentation Time Stamp(PTS) for the audio or video frame. It is based on 90KHz
     * and has the same format as the PTS in ISO/IEC 13818-1. It is used only for the SC and
     * the SC_HEVC.
     */
    public long getPts() {
        return mPts;
    }
}
Loading