diff options
10 files changed, 638 insertions, 66 deletions
diff --git a/media/java/android/media/tv/tuner/TunerConstants.java b/media/java/android/media/tv/tuner/TunerConstants.java index bbaa5180aece..3cca301b5a08 100644 --- a/media/java/android/media/tv/tuner/TunerConstants.java +++ b/media/java/android/media/tv/tuner/TunerConstants.java @@ -201,6 +201,187 @@ public final class TunerConstants { */ public static final int FILTER_STATUS_OVERFLOW = Constants.DemuxFilterStatus.OVERFLOW; + /** + * Indexes can be tagged through TS (Transport Stream) header. + * + * @hide + */ + @IntDef(flag = true, value = {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}) + @Retention(RetentionPolicy.SOURCE) + public @interface TsIndex {} + + /** + * TS index FIRST_PACKET. + * @hide + */ + public static final int TS_INDEX_FIRST_PACKET = Constants.DemuxTsIndex.FIRST_PACKET; + /** + * TS index PAYLOAD_UNIT_START_INDICATOR. + * @hide + */ + public static final int TS_INDEX_PAYLOAD_UNIT_START_INDICATOR = + Constants.DemuxTsIndex.PAYLOAD_UNIT_START_INDICATOR; + /** + * TS index CHANGE_TO_NOT_SCRAMBLED. + * @hide + */ + public static final int TS_INDEX_CHANGE_TO_NOT_SCRAMBLED = + Constants.DemuxTsIndex.CHANGE_TO_NOT_SCRAMBLED; + /** + * TS index CHANGE_TO_EVEN_SCRAMBLED. + * @hide + */ + public static final int TS_INDEX_CHANGE_TO_EVEN_SCRAMBLED = + Constants.DemuxTsIndex.CHANGE_TO_EVEN_SCRAMBLED; + /** + * TS index CHANGE_TO_ODD_SCRAMBLED. + * @hide + */ + public static final int TS_INDEX_CHANGE_TO_ODD_SCRAMBLED = + Constants.DemuxTsIndex.CHANGE_TO_ODD_SCRAMBLED; + /** + * TS index DISCONTINUITY_INDICATOR. + * @hide + */ + public static final int TS_INDEX_DISCONTINUITY_INDICATOR = + Constants.DemuxTsIndex.DISCONTINUITY_INDICATOR; + /** + * TS index RANDOM_ACCESS_INDICATOR. + * @hide + */ + public static final int TS_INDEX_RANDOM_ACCESS_INDICATOR = + Constants.DemuxTsIndex.RANDOM_ACCESS_INDICATOR; + /** + * TS index PRIORITY_INDICATOR. + * @hide + */ + public static final int TS_INDEX_PRIORITY_INDICATOR = Constants.DemuxTsIndex.PRIORITY_INDICATOR; + /** + * TS index PCR_FLAG. + * @hide + */ + public static final int TS_INDEX_PCR_FLAG = Constants.DemuxTsIndex.PCR_FLAG; + /** + * TS index OPCR_FLAG. + * @hide + */ + public static final int TS_INDEX_OPCR_FLAG = Constants.DemuxTsIndex.OPCR_FLAG; + /** + * TS index SPLICING_POINT_FLAG. + * @hide + */ + public static final int TS_INDEX_SPLICING_POINT_FLAG = + Constants.DemuxTsIndex.SPLICING_POINT_FLAG; + /** + * TS index PRIVATE_DATA. + * @hide + */ + public static final int TS_INDEX_PRIVATE_DATA = Constants.DemuxTsIndex.PRIVATE_DATA; + /** + * TS index ADAPTATION_EXTENSION_FLAG. + * @hide + */ + public static final int TS_INDEX_ADAPTATION_EXTENSION_FLAG = + Constants.DemuxTsIndex.ADAPTATION_EXTENSION_FLAG; + + /** + * Indexes can be tagged by Start Code in PES (Packetized Elementary Stream) + * according to ISO/IEC 13818-1. + * @hide + */ + @IntDef(flag = true, value = {SC_INDEX_I_FRAME, SC_INDEX_P_FRAME, SC_INDEX_B_FRAME, + SC_INDEX_SEQUENCE}) + @Retention(RetentionPolicy.SOURCE) + public @interface ScIndex {} + + /** + * SC index for a new I-frame. + * @hide + */ + public static final int SC_INDEX_I_FRAME = Constants.DemuxScIndex.I_FRAME; + /** + * SC index for a new P-frame. + * @hide + */ + public static final int SC_INDEX_P_FRAME = Constants.DemuxScIndex.P_FRAME; + /** + * SC index for a new B-frame. + * @hide + */ + public static final int SC_INDEX_B_FRAME = Constants.DemuxScIndex.B_FRAME; + /** + * SC index for a new sequence. + * @hide + */ + public static final int SC_INDEX_SEQUENCE = Constants.DemuxScIndex.SEQUENCE; + + + /** + * Indexes can be tagged by NAL unit group in HEVC according to ISO/IEC 23008-2. + * + * @hide + */ + @IntDef(flag = true, + value = {SC_HEVC_INDEX_SPS, SC_HEVC_INDEX_AUD, SC_HEVC_INDEX_SLICE_CE_BLA_W_LP, + SC_HEVC_INDEX_SLICE_BLA_W_RADL, SC_HEVC_INDEX_SLICE_BLA_N_LP, + SC_HEVC_INDEX_SLICE_IDR_W_RADL, SC_HEVC_INDEX_SLICE_IDR_N_LP, + SC_HEVC_INDEX_SLICE_TRAIL_CRA}) + @Retention(RetentionPolicy.SOURCE) + public @interface ScHevcIndex {} + + /** + * SC HEVC index SPS. + * @hide + */ + public static final int SC_HEVC_INDEX_SPS = Constants.DemuxScHevcIndex.SPS; + /** + * SC HEVC index AUD. + * @hide + */ + public static final int SC_HEVC_INDEX_AUD = Constants.DemuxScHevcIndex.AUD; + /** + * SC HEVC index SLICE_CE_BLA_W_LP. + * @hide + */ + public static final int SC_HEVC_INDEX_SLICE_CE_BLA_W_LP = + Constants.DemuxScHevcIndex.SLICE_CE_BLA_W_LP; + /** + * SC HEVC index SLICE_BLA_W_RADL. + * @hide + */ + public static final int SC_HEVC_INDEX_SLICE_BLA_W_RADL = + Constants.DemuxScHevcIndex.SLICE_BLA_W_RADL; + /** + * SC HEVC index SLICE_BLA_N_LP. + * @hide + */ + public static final int SC_HEVC_INDEX_SLICE_BLA_N_LP = + Constants.DemuxScHevcIndex.SLICE_BLA_N_LP; + /** + * SC HEVC index SLICE_IDR_W_RADL. + * @hide + */ + public static final int SC_HEVC_INDEX_SLICE_IDR_W_RADL = + Constants.DemuxScHevcIndex.SLICE_IDR_W_RADL; + /** + * SC HEVC index SLICE_IDR_N_LP. + * @hide + */ + public static final int SC_HEVC_INDEX_SLICE_IDR_N_LP = + Constants.DemuxScHevcIndex.SLICE_IDR_N_LP; + /** + * SC HEVC index SLICE_TRAIL_CRA. + * @hide + */ + public static final int SC_HEVC_INDEX_SLICE_TRAIL_CRA = + Constants.DemuxScHevcIndex.SLICE_TRAIL_CRA; + + /** @hide */ @IntDef({FRONTEND_SCAN_UNDEFINED, FRONTEND_SCAN_AUTO, FRONTEND_SCAN_BLIND}) @Retention(RetentionPolicy.SOURCE) diff --git a/media/java/android/media/tv/tuner/filter/AudioDescriptor.java b/media/java/android/media/tv/tuner/filter/AudioDescriptor.java new file mode 100644 index 000000000000..c88c07f8a150 --- /dev/null +++ b/media/java/android/media/tv/tuner/filter/AudioDescriptor.java @@ -0,0 +1,106 @@ +/* + * Copyright 2019 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package android.media.tv.tuner.filter; + +/** + * Meta data from AD (Audio Descriptor) according to ETSI TS 101 154 V2.1.1. + * + * @hide + */ +public class AudioDescriptor { + private final byte mAdFade; + private final byte mAdPan; + private final char mVersionTextTag; + private final byte mAdGainCenter; + private final byte mAdGainFront; + private final byte mAdGainSurround; + + // This constructor is used by JNI code only + private AudioDescriptor(byte adFade, byte adPan, char versionTextTag, byte adGainCenter, + byte adGainFront, byte adGainSurround) { + mAdFade = adFade; + mAdPan = adPan; + mVersionTextTag = versionTextTag; + mAdGainCenter = adGainCenter; + mAdGainFront = adGainFront; + mAdGainSurround = adGainSurround; + } + + /** + * Gets AD fade byte. + * + * <p>Takes values between 0x00 (representing no fade of the main programme sound) and 0xFF + * (representing a full fade). Over the range 0x00 to 0xFE one lsb represents a step in + * attenuation of the programme sound of 0.3 dB giving a range of 76.2 dB. The fade value of + * 0xFF represents no programme sound at all (i.e. mute). + */ + public byte getAdFade() { + return mAdFade; + } + + /** + * Gets AD pan byte. + * + * <p>Takes values between 0x00 representing a central forward presentation of the audio + * description and 0xFF, each increment representing a 360/256 degree step clockwise looking + * down on the listener (i.e. just over 1.4 degrees). + */ + public byte getAdPan() { + return mAdPan; + } + + /** + * Gets AD version tag. A single ASCII character version indicates the version. + * + * <p>A single ASCII character version designator (here "1" indicates revision 1). + */ + public char getVersionTextTag() { + return mVersionTextTag; + } + + /** + * Gets AD gain byte center in dB. + * + * <p>Represents a signed value in dB. Takes values between 0x7F (representing +76.2 dB boost of + * the main programme center) and 0x80 (representing a full fade). Over the range 0x00 to 0x7F + * one lsb represents a step in boost of the programme center of 0.6 dB giving a maximum boost + * of +76.2 dB. Over the range 0x81 to 0x00 one lsb represents a step in attenuation of the + * programme center of 0.6 dB giving a maximum attenuation of -76.2 dB. The gain value of 0x80 + * represents no main center level at all (i.e. mute). + */ + public byte getAdGainCenter() { + return mAdGainCenter; + } + + /** + * Gets AD gain byte front in dB. + * + * <p>Same as {@link #getAdGainCenter()}, but applied to left and right front channel. + */ + public byte getAdGainFront() { + return mAdGainFront; + } + + /** + * Gets AD gain byte surround in dB. + * + * <p>Same as {@link #getAdGainCenter()}, but applied to all surround channels + */ + public byte getAdGainSurround() { + return mAdGainSurround; + } +} diff --git a/media/java/android/media/tv/tuner/filter/AudioExtraMetaData.java b/media/java/android/media/tv/tuner/filter/AudioExtraMetaData.java deleted file mode 100644 index 306de84fe130..000000000000 --- a/media/java/android/media/tv/tuner/filter/AudioExtraMetaData.java +++ /dev/null @@ -1,31 +0,0 @@ -/* - * Copyright 2019 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package android.media.tv.tuner.filter; - -/** - * Extra Meta Data from AD (Audio Descriptor) according to - * ETSI TS 101 154 V2.1.1. - * @hide - */ -public class AudioExtraMetaData { - private byte mAdFade; - private byte mAdPan; - private byte mVersionTextTag; - private byte mAdGainCenter; - private byte mAdGainFront; - private byte mAdGainSurround; -} diff --git a/media/java/android/media/tv/tuner/filter/DownloadEvent.java b/media/java/android/media/tv/tuner/filter/DownloadEvent.java index 548fa777f765..591e4e54aaae 100644 --- a/media/java/android/media/tv/tuner/filter/DownloadEvent.java +++ b/media/java/android/media/tv/tuner/filter/DownloadEvent.java @@ -16,15 +16,65 @@ package android.media.tv.tuner.filter; +import android.media.tv.tuner.Tuner.Filter; + /** - * Download event. + * Filter event sent from {@link Filter} objects with download type. + * * @hide */ public class DownloadEvent extends FilterEvent { - private int mItemId; - private int mMpuSequenceNumber; - private int mItemFragmentIndex; - private int mLastItemFragmentIndex; - private int mDataLength; + private final int mItemId; + private final int mMpuSequenceNumber; + private final int mItemFragmentIndex; + private final int mLastItemFragmentIndex; + private final int mDataLength; + + // This constructor is used by JNI code only + private DownloadEvent(int itemId, int mpuSequenceNumber, int itemFragmentIndex, + int lastItemFragmentIndex, int dataLength) { + mItemId = itemId; + mMpuSequenceNumber = mpuSequenceNumber; + mItemFragmentIndex = itemFragmentIndex; + mLastItemFragmentIndex = lastItemFragmentIndex; + mDataLength = dataLength; + } + + /** + * Gets item ID. + */ + public int getItemId() { + return mItemId; + } + + /** + * Gets MPU sequence number of filtered data. + */ + public int getMpuSequenceNumber() { + return mMpuSequenceNumber; + } + + /** + * Gets current index of the current item. + * + * An item can be stored in different fragments. + */ + public int getItemFragmentIndex() { + return mItemFragmentIndex; + } + + /** + * Gets last index of the current item. + */ + public int getLastItemFragmentIndex() { + return mLastItemFragmentIndex; + } + + /** + * Gets data size in bytes of filtered data. + */ + public int getDataLength() { + return mDataLength; + } } diff --git a/media/java/android/media/tv/tuner/filter/IpPayloadEvent.java b/media/java/android/media/tv/tuner/filter/IpPayloadEvent.java index 4da1d21e3c44..09489ed86fef 100644 --- a/media/java/android/media/tv/tuner/filter/IpPayloadEvent.java +++ b/media/java/android/media/tv/tuner/filter/IpPayloadEvent.java @@ -16,10 +16,25 @@ package android.media.tv.tuner.filter; +import android.media.tv.tuner.Tuner.Filter; + /** - * IP payload event. + * Filter event sent from {@link Filter} objects with IP payload type. + * * @hide */ public class IpPayloadEvent extends FilterEvent { - private int mDataLength; + private final int mDataLength; + + // This constructor is used by JNI code only + private IpPayloadEvent(int dataLength) { + mDataLength = dataLength; + } + + /** + * Gets data size in bytes of filtered data. + */ + public int getDataLength() { + return mDataLength; + } } diff --git a/media/java/android/media/tv/tuner/filter/MediaEvent.java b/media/java/android/media/tv/tuner/filter/MediaEvent.java index 7703248535e5..37f94ae377ae 100644 --- a/media/java/android/media/tv/tuner/filter/MediaEvent.java +++ b/media/java/android/media/tv/tuner/filter/MediaEvent.java @@ -16,20 +16,111 @@ package android.media.tv.tuner.filter; -import android.os.NativeHandle; +import android.annotation.Nullable; +import android.media.tv.tuner.Tuner.Filter; /** - * Media event. + * Filter event sent from {@link Filter} objects with media type. + * * @hide */ -public class MediaEvent extends FilterEvent { - private int mStreamId; - private boolean mIsPtsPresent; - private long mPts; - private int mDataLength; - private NativeHandle mHandle; - private boolean mIsSecureMemory; - private int mMpuSequenceNumber; - private boolean mIsPrivateData; - private AudioExtraMetaData mExtraMetaData; +public class MediaEvent extends FilterEvent{ + private final int mStreamId; + private final boolean mIsPtsPresent; + private final long mPts; + private final int mDataLength; + private final Object mLinearBuffer; + private final boolean mIsSecureMemory; + private final int mMpuSequenceNumber; + private final boolean mIsPrivateData; + private final AudioDescriptor mExtraMetaData; + + // This constructor is used by JNI code only + private MediaEvent(int streamId, boolean isPtsPresent, long pts, int dataLength, Object buffer, + boolean isSecureMemory, int mpuSequenceNumber, boolean isPrivateData, + AudioDescriptor extraMetaData) { + mStreamId = streamId; + mIsPtsPresent = isPtsPresent; + mPts = pts; + mDataLength = dataLength; + mLinearBuffer = buffer; + mIsSecureMemory = isSecureMemory; + mMpuSequenceNumber = mpuSequenceNumber; + mIsPrivateData = isPrivateData; + mExtraMetaData = extraMetaData; + } + + /** + * Gets stream ID. + */ + public int getStreamId() { + return mStreamId; + } + + /** + * Returns whether PTS is present. + * + * @return {@code true} if PTS is present in PES header; {@code false} otherwise. + */ + public boolean getIsPtsPresent() { + return mIsPtsPresent; + } + + /** + * Gets PTS (Presentation Time Stamp) for audio or video frame. + */ + public long getPts() { + return mPts; + } + + /** + * Gets data size in bytes of audio or video frame. + */ + public int getDataLength() { + return mDataLength; + } + + /** + * Gets a linear buffer associated to the memory where audio or video data stays. + * TODO: use LinearBuffer when it's ready. + * + * @hide + */ + public Object getLinearBuffer() { + return mLinearBuffer; + } + + /** + * Returns whether the data is secure. + * + * @return {@code true} if the data is in secure area, and isn't mappable; + * {@code false} otherwise. + */ + public boolean getIsSecureMemory() { + return mIsSecureMemory; + } + + /** + * Gets MPU sequence number of filtered data. + */ + public int getMpuSequenceNumber() { + return mMpuSequenceNumber; + } + + /** + * Returns whether the data is private. + * + * @return {@code true} if the data is in private; {@code false} otherwise. + */ + public boolean getIsPrivateData() { + return mIsPrivateData; + } + + /** + * Gets audio extra metadata. + */ + @Nullable + public AudioDescriptor getExtraMetaData() { + return mExtraMetaData; + } } diff --git a/media/java/android/media/tv/tuner/filter/MmtpRecordEvent.java b/media/java/android/media/tv/tuner/filter/MmtpRecordEvent.java index dbd8c77d7ea3..7f379944b207 100644 --- a/media/java/android/media/tv/tuner/filter/MmtpRecordEvent.java +++ b/media/java/android/media/tv/tuner/filter/MmtpRecordEvent.java @@ -16,11 +16,34 @@ package android.media.tv.tuner.filter; +import android.media.tv.tuner.Tuner.Filter; + /** - * MMPT record event. + * Filter event sent from {@link Filter} objects with MMTP type. + * * @hide */ public class MmtpRecordEvent extends FilterEvent { - private int mScHevcIndexMask; - private long mByteNumber; + private final int mScHevcIndexMask; + private final long mByteNumber; + + // This constructor is used by JNI code only + private MmtpRecordEvent(int scHevcIndexMask, long byteNumber) { + mScHevcIndexMask = scHevcIndexMask; + mByteNumber = byteNumber; + } + + /** + * Gets indexes which can be tagged by NAL unit group in HEVC according to ISO/IEC 23008-2. + */ + public int getScHevcIndexMask() { + return mScHevcIndexMask; + } + + /** + * Gets the byte number from beginning of the filter's output. + */ + public long getByteNumber() { + return mByteNumber; + } } diff --git a/media/java/android/media/tv/tuner/filter/PesEvent.java b/media/java/android/media/tv/tuner/filter/PesEvent.java index 16536e225472..60251bf919ad 100644 --- a/media/java/android/media/tv/tuner/filter/PesEvent.java +++ b/media/java/android/media/tv/tuner/filter/PesEvent.java @@ -16,12 +16,43 @@ package android.media.tv.tuner.filter; +import android.media.tv.tuner.Tuner.Filter; + /** - * PES event. + * Filter event sent from {@link Filter} objects with PES type. + * * @hide */ public class PesEvent extends FilterEvent { - private int mStreamId; - private int mDataLength; - private int mMpuSequenceNumber; + private final int mStreamId; + private final int mDataLength; + private final int mMpuSequenceNumber; + + // This constructor is used by JNI code only + private PesEvent(int streamId, int dataLength, int mpuSequenceNumber) { + mStreamId = streamId; + mDataLength = dataLength; + mMpuSequenceNumber = mpuSequenceNumber; + } + + /** + * Gets stream ID. + */ + public int getStreamId() { + return mStreamId; + } + + /** + * Gets data size in bytes of filtered data. + */ + public int getDataLength() { + return mDataLength; + } + + /** + * Gets MPU sequence number of filtered data. + */ + public int getMpuSequenceNumber() { + return mMpuSequenceNumber; + } } diff --git a/media/java/android/media/tv/tuner/filter/TemiEvent.java b/media/java/android/media/tv/tuner/filter/TemiEvent.java index 384160443a00..031fa5c4cb0e 100644 --- a/media/java/android/media/tv/tuner/filter/TemiEvent.java +++ b/media/java/android/media/tv/tuner/filter/TemiEvent.java @@ -16,12 +16,46 @@ package android.media.tv.tuner.filter; +import android.annotation.NonNull; +import android.media.tv.tuner.Tuner.Filter; + /** - * TEMI event. + * Filter event sent from {@link Filter} objects for Timed External Media Information (TEMI) data. + * * @hide */ public class TemiEvent extends FilterEvent { - private long mPts; - private byte mDescrTag; - private byte[] mDescrData; + private final long mPts; + private final byte mDescrTag; + private final byte[] mDescrData; + + // This constructor is used by JNI code only + private TemiEvent(long pts, byte descrTag, byte[] descrData) { + mPts = pts; + mDescrTag = descrTag; + mDescrData = descrData; + } + + + /** + * Gets PTS (Presentation Time Stamp) for audio or video frame. + */ + public long getPts() { + return mPts; + } + + /** + * Gets TEMI descriptor tag. + */ + public byte getDescriptorTag() { + return mDescrTag; + } + + /** + * Gets TEMI descriptor. + */ + @NonNull + public byte[] getDescriptorData() { + return mDescrData; + } } diff --git a/media/java/android/media/tv/tuner/filter/TsRecordEvent.java b/media/java/android/media/tv/tuner/filter/TsRecordEvent.java index 875b5bd2980d..fa4dd72e3eda 100644 --- a/media/java/android/media/tv/tuner/filter/TsRecordEvent.java +++ b/media/java/android/media/tv/tuner/filter/TsRecordEvent.java @@ -16,12 +16,84 @@ package android.media.tv.tuner.filter; +import android.annotation.IntDef; +import android.media.tv.tuner.Tuner.Filter; +import android.media.tv.tuner.TunerConstants; + +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; + /** - * TS record event. + * Filter event sent from {@link Filter} objects for TS record data. + * * @hide */ public class TsRecordEvent extends FilterEvent { - private int mTpid; - private int mIndexMask; - private long mByteNumber; + /** + * @hide + */ + @IntDef(flag = true, value = { + TunerConstants.TS_INDEX_FIRST_PACKET, + TunerConstants.TS_INDEX_PAYLOAD_UNIT_START_INDICATOR, + TunerConstants.TS_INDEX_CHANGE_TO_NOT_SCRAMBLED, + TunerConstants.TS_INDEX_CHANGE_TO_EVEN_SCRAMBLED, + TunerConstants.TS_INDEX_CHANGE_TO_ODD_SCRAMBLED, + TunerConstants.TS_INDEX_DISCONTINUITY_INDICATOR, + TunerConstants.TS_INDEX_RANDOM_ACCESS_INDICATOR, + TunerConstants.TS_INDEX_PRIORITY_INDICATOR, + TunerConstants.TS_INDEX_PCR_FLAG, + TunerConstants.TS_INDEX_OPCR_FLAG, + TunerConstants.TS_INDEX_SPLICING_POINT_FLAG, + TunerConstants.TS_INDEX_PRIVATE_DATA, + TunerConstants.TS_INDEX_ADAPTATION_EXTENSION_FLAG, + TunerConstants.SC_INDEX_I_FRAME, + TunerConstants.SC_INDEX_P_FRAME, + TunerConstants.SC_INDEX_B_FRAME, + TunerConstants.SC_INDEX_SEQUENCE, + TunerConstants.SC_HEVC_INDEX_SPS, + TunerConstants.SC_HEVC_INDEX_AUD, + TunerConstants.SC_HEVC_INDEX_SLICE_CE_BLA_W_LP, + TunerConstants.SC_HEVC_INDEX_SLICE_BLA_W_RADL, + TunerConstants.SC_HEVC_INDEX_SLICE_BLA_N_LP, + TunerConstants.SC_HEVC_INDEX_SLICE_IDR_W_RADL, + TunerConstants.SC_HEVC_INDEX_SLICE_IDR_N_LP, + TunerConstants.SC_HEVC_INDEX_SLICE_TRAIL_CRA, + }) + @Retention(RetentionPolicy.SOURCE) + public @interface IndexMask {} + + private final int mPid; + private final int mIndexMask; + private final long mByteNumber; + + // This constructor is used by JNI code only + private TsRecordEvent(int pid, int indexMask, long byteNumber) { + mPid = pid; + mIndexMask = indexMask; + mByteNumber = byteNumber; + } + + /** + * Gets packet ID. + */ + public int getTpid() { + return mPid; + } + + /** + * Gets index mask. + * + * <p>The index type is one of TS, SC, and SC-HEVC, and is set when configuring the filter. + */ + @IndexMask + public int getIndexMask() { + return mIndexMask; + } + + /** + * Gets the byte number from beginning of the filter's output. + */ + public long getByteNumber() { + return mByteNumber; + } } |