Merge "Complete filter event classes"

This commit is contained in:
TreeHugger Robot
2020-01-11 01:46:41 +00:00
committed by Android (Google) Code Review
10 changed files with 638 additions and 66 deletions

View File

@@ -134,6 +134,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)

View File

@@ -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;
}
}

View File

@@ -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;
}

View File

@@ -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;
}
}

View File

@@ -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;
}
}

View File

@@ -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;
}
}

View File

@@ -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;
}
}

View File

@@ -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;
}
}

View File

@@ -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;
}
}

View File

@@ -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;
}
}