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

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

Get the offset of recorded keyframe from MMTP Packet Table in

MmtpRecordEvent

Test: atest android.media.tv.tuner.cts
Bug: 158816517
Change-Id: Ic8bafaad2cfe868bfb6a6ede1fd77de49c3d04cb
parent 2894862a
Loading
Loading
Loading
Loading
+7 −0
Original line number Diff line number Diff line
@@ -5395,6 +5395,7 @@ package android.media.tv.tuner.filter {
    method public int getMpuSequenceNumber();
    method public long getPts();
    method public int getScHevcIndexMask();
    method public int getTsIndexMask();
  }
  public class PesEvent extends android.media.tv.tuner.filter.FilterEvent {
@@ -5423,6 +5424,11 @@ package android.media.tv.tuner.filter {
    field public static final int INDEX_TYPE_NONE = 0; // 0x0
    field public static final int INDEX_TYPE_SC = 1; // 0x1
    field public static final int INDEX_TYPE_SC_HEVC = 2; // 0x2
    field public static final int MPT_INDEX_AUDIO = 262144; // 0x40000
    field public static final int MPT_INDEX_MPT = 65536; // 0x10000
    field public static final int MPT_INDEX_TIMESTAMP_TARGET_AUDIO = 1048576; // 0x100000
    field public static final int MPT_INDEX_TIMESTAMP_TARGET_VIDEO = 524288; // 0x80000
    field public static final int MPT_INDEX_VIDEO = 131072; // 0x20000
    field public static final int SC_HEVC_INDEX_AUD = 2; // 0x2
    field public static final int SC_HEVC_INDEX_SLICE_BLA_N_LP = 16; // 0x10
    field public static final int SC_HEVC_INDEX_SLICE_BLA_W_RADL = 8; // 0x8
@@ -5446,6 +5452,7 @@ package android.media.tv.tuner.filter {
    field public static final int TS_INDEX_CHANGE_TO_ODD_SCRAMBLED = 16; // 0x10
    field public static final int TS_INDEX_DISCONTINUITY_INDICATOR = 32; // 0x20
    field public static final int TS_INDEX_FIRST_PACKET = 1; // 0x1
    field public static final int TS_INDEX_INVALID = 0; // 0x0
    field public static final int TS_INDEX_OPCR_FLAG = 512; // 0x200
    field public static final int TS_INDEX_PAYLOAD_UNIT_START_INDICATOR = 2; // 0x2
    field public static final int TS_INDEX_PCR_FLAG = 256; // 0x100
+7 −0
Original line number Diff line number Diff line
@@ -5335,6 +5335,7 @@ package android.media.tv.tuner.filter {
    method public int getMpuSequenceNumber();
    method public long getPts();
    method public int getScHevcIndexMask();
    method public int getTsIndexMask();
  }
  public class PesEvent extends android.media.tv.tuner.filter.FilterEvent {
@@ -5363,6 +5364,11 @@ package android.media.tv.tuner.filter {
    field public static final int INDEX_TYPE_NONE = 0; // 0x0
    field public static final int INDEX_TYPE_SC = 1; // 0x1
    field public static final int INDEX_TYPE_SC_HEVC = 2; // 0x2
    field public static final int MPT_INDEX_AUDIO = 262144; // 0x40000
    field public static final int MPT_INDEX_MPT = 65536; // 0x10000
    field public static final int MPT_INDEX_TIMESTAMP_TARGET_AUDIO = 1048576; // 0x100000
    field public static final int MPT_INDEX_TIMESTAMP_TARGET_VIDEO = 524288; // 0x80000
    field public static final int MPT_INDEX_VIDEO = 131072; // 0x20000
    field public static final int SC_HEVC_INDEX_AUD = 2; // 0x2
    field public static final int SC_HEVC_INDEX_SLICE_BLA_N_LP = 16; // 0x10
    field public static final int SC_HEVC_INDEX_SLICE_BLA_W_RADL = 8; // 0x8
@@ -5386,6 +5392,7 @@ package android.media.tv.tuner.filter {
    field public static final int TS_INDEX_CHANGE_TO_ODD_SCRAMBLED = 16; // 0x10
    field public static final int TS_INDEX_DISCONTINUITY_INDICATOR = 32; // 0x20
    field public static final int TS_INDEX_FIRST_PACKET = 1; // 0x1
    field public static final int TS_INDEX_INVALID = 0; // 0x0
    field public static final int TS_INDEX_OPCR_FLAG = 512; // 0x200
    field public static final int TS_INDEX_PAYLOAD_UNIT_START_INDICATOR = 2; // 0x2
    field public static final int TS_INDEX_PCR_FLAG = 256; // 0x100
+17 −2
Original line number Diff line number Diff line
@@ -21,7 +21,7 @@ import android.annotation.SystemApi;
import android.media.tv.tuner.filter.RecordSettings.ScHevcIndex;

/**
 * Filter event sent from {@link Filter} objects with MMTP type.
 * Filter event sent from {@link Filter} objects with MPEG media Transport Protocol(MMTP) type.
 *
 * @hide
 */
@@ -32,15 +32,17 @@ public class MmtpRecordEvent extends FilterEvent {
    private final int mMpuSequenceNumber;
    private final long mPts;
    private final int mFirstMbInSlice;
    private final int mTsIndexMask;

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

    /**
@@ -95,4 +97,17 @@ public class MmtpRecordEvent extends FilterEvent {
    public int getFirstMbInSlice() {
        return mFirstMbInSlice;
    }

    /**
     * Get the offset of the recorded keyframe from MMT Packet Table.
     *
     * <p>This field is only supported in Tuner 1.1 or higher version. Unsupported version will
     * return {@link RecordSettings.TS_INDEX_INVALID}. Use
     * {@link android.media.tv.tuner.TunerVersionChecker.getTunerVersion()} to get the
     * version information.
     */
    @RecordSettings.TsIndexMask
    public int getTsIndexMask() {
        return mTsIndexMask;
    }
}
+35 −3
Original line number Diff line number Diff line
@@ -38,16 +38,22 @@ public class RecordSettings extends Settings {
     * @hide
     */
    @IntDef(flag = true,
            prefix = "TS_INDEX_",
            value = {TS_INDEX_FIRST_PACKET, TS_INDEX_PAYLOAD_UNIT_START_INDICATOR,
            value = {TS_INDEX_INVALID, TS_INDEX_FIRST_PACKET, TS_INDEX_PAYLOAD_UNIT_START_INDICATOR,
                    TS_INDEX_CHANGE_TO_NOT_SCRAMBLED, TS_INDEX_CHANGE_TO_EVEN_SCRAMBLED,
                    TS_INDEX_CHANGE_TO_ODD_SCRAMBLED, TS_INDEX_DISCONTINUITY_INDICATOR,
                    TS_INDEX_RANDOM_ACCESS_INDICATOR, TS_INDEX_PRIORITY_INDICATOR,
                    TS_INDEX_PCR_FLAG, TS_INDEX_OPCR_FLAG, TS_INDEX_SPLICING_POINT_FLAG,
                    TS_INDEX_PRIVATE_DATA, TS_INDEX_ADAPTATION_EXTENSION_FLAG})
                    TS_INDEX_PRIVATE_DATA, TS_INDEX_ADAPTATION_EXTENSION_FLAG,
                    MPT_INDEX_MPT, MPT_INDEX_VIDEO, MPT_INDEX_AUDIO,
                    MPT_INDEX_TIMESTAMP_TARGET_VIDEO,
                    MPT_INDEX_TIMESTAMP_TARGET_AUDIO})
    @Retention(RetentionPolicy.SOURCE)
    public @interface TsIndexMask {}

    /**
     * Invalid TS index.
     */
    public static final int TS_INDEX_INVALID = 0;
    /**
     * TS index FIRST_PACKET.
     */
@@ -108,6 +114,32 @@ public class RecordSettings extends Settings {
     */
    public static final int TS_INDEX_ADAPTATION_EXTENSION_FLAG =
            Constants.DemuxTsIndex.ADAPTATION_EXTENSION_FLAG;
    /**
     * Index the address of MPEG Media Transport Packet Table(MPT).
     */
    public static final int MPT_INDEX_MPT =
            android.hardware.tv.tuner.V1_1.Constants.DemuxTsIndex.MPT_INDEX_MPT;
    /**
     * Index the address of Video.
     */
    public static final int MPT_INDEX_VIDEO =
            android.hardware.tv.tuner.V1_1.Constants.DemuxTsIndex.MPT_INDEX_VIDEO;
    /**
     * Index the address of Audio.
     */
    public static final int MPT_INDEX_AUDIO =
            android.hardware.tv.tuner.V1_1.Constants.DemuxTsIndex.MPT_INDEX_AUDIO;
    /**
     * Index to indicate this is a target of timestamp extraction for video.
     */
    public static final int MPT_INDEX_TIMESTAMP_TARGET_VIDEO =
            android.hardware.tv.tuner.V1_1.Constants.DemuxTsIndex.MPT_INDEX_TIMESTAMP_TARGET_VIDEO;
    /**
     * Index to indicate this is a target of timestamp extraction for audio.
     */
    public static final int MPT_INDEX_TIMESTAMP_TARGET_AUDIO =
            android.hardware.tv.tuner.V1_1.Constants.DemuxTsIndex.MPT_INDEX_TIMESTAMP_TARGET_AUDIO;


    /** @hide */
    @Retention(RetentionPolicy.SOURCE)
+3 −1
Original line number Diff line number Diff line
@@ -639,10 +639,12 @@ jobjectArray FilterCallback::getMmtpRecordEvent(
        jlong firstMbInSlice = (eventsExt.size() > i)
                ? static_cast<jint>(eventsExt[i].mmtpRecord().firstMbInSlice)
                : static_cast<jint>(Constant::INVALID_FIRST_MACROBLOCK_IN_SLICE);
        jlong tsIndexMask = (eventsExt.size() > i)
                ? static_cast<jint>(eventsExt[i].mmtpRecord().tsIndexMask) : 0;

        jobject obj =
                env->NewObject(eventClazz, eventInit, scHevcIndexMask, byteNumber,
                        mpuSequenceNumber, pts, firstMbInSlice);
                        mpuSequenceNumber, pts, firstMbInSlice, tsIndexMask);
        env->SetObjectArrayElement(arr, i, obj);
    }
    return arr;