diff --git a/api/system-current.txt b/api/system-current.txt index 87f3f4c655202..5f23ed3d7f8e2 100644 --- a/api/system-current.txt +++ b/api/system-current.txt @@ -5090,6 +5090,7 @@ package android.media.tv.tuner { 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_FIRST_MACROBLOCK_IN_SLICE = -1; // 0xffffffff field public static final int INVALID_FRONTEND_SETTING_FREQUENCY = -1; // 0xffffffff field public static final int INVALID_LTS_ID = -1; // 0xffffffff field public static final int INVALID_MMTP_RECORD_EVENT_MPT_SEQUENCE_NUM = -1; // 0xffffffff @@ -5390,6 +5391,7 @@ package android.media.tv.tuner.filter { public class MmtpRecordEvent extends android.media.tv.tuner.filter.FilterEvent { method public long getDataLength(); + method public int getFirstMbInSlice(); method public int getMpuSequenceNumber(); method public long getPts(); method public int getScHevcIndexMask(); @@ -5553,6 +5555,7 @@ package android.media.tv.tuner.filter { public class TsRecordEvent extends android.media.tv.tuner.filter.FilterEvent { method public long getDataLength(); + method public int getFirstMbInSlice(); method public int getPacketId(); method public long getPts(); method public int getScIndexMask(); diff --git a/core/api/system-current.txt b/core/api/system-current.txt index eea50be6da1d7..08d636ea206ee 100644 --- a/core/api/system-current.txt +++ b/core/api/system-current.txt @@ -5030,6 +5030,7 @@ package android.media.tv.tuner { 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_FIRST_MACROBLOCK_IN_SLICE = -1; // 0xffffffff field public static final int INVALID_FRONTEND_SETTING_FREQUENCY = -1; // 0xffffffff field public static final int INVALID_LTS_ID = -1; // 0xffffffff field public static final int INVALID_MMTP_RECORD_EVENT_MPT_SEQUENCE_NUM = -1; // 0xffffffff @@ -5330,6 +5331,7 @@ package android.media.tv.tuner.filter { public class MmtpRecordEvent extends android.media.tv.tuner.filter.FilterEvent { method public long getDataLength(); + method public int getFirstMbInSlice(); method public int getMpuSequenceNumber(); method public long getPts(); method public int getScHevcIndexMask(); @@ -5493,6 +5495,7 @@ package android.media.tv.tuner.filter { public class TsRecordEvent extends android.media.tv.tuner.filter.FilterEvent { method public long getDataLength(); + method public int getFirstMbInSlice(); method public int getPacketId(); method public long getPts(); method public int getScIndexMask(); diff --git a/media/java/android/media/tv/tuner/Tuner.java b/media/java/android/media/tv/tuner/Tuner.java index 1881e38a50100..4c87688fbc59c 100644 --- a/media/java/android/media/tv/tuner/Tuner.java +++ b/media/java/android/media/tv/tuner/Tuner.java @@ -121,6 +121,17 @@ public class Tuner implements AutoCloseable { 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 first macroblock address in MmtpRecordEvent and TsRecordEvent. + * + *
Returned by {@link MmtpRecordEvent#getMbInSlice()} and + * {@link TsRecordEvent#getMbInSlice()} when the requested sequence number is not available. + * + * @see android.media.tv.tuner.filter.MmtpRecordEvent#getMbInSlice() + * @see android.media.tv.tuner.filter.TsRecordEvent#getMbInSlice() + */ + public static final int INVALID_FIRST_MACROBLOCK_IN_SLICE = + android.hardware.tv.tuner.V1_1.Constants.Constant.INVALID_FIRST_MACROBLOCK_IN_SLICE; /** * Invalid local transport stream id. * diff --git a/media/java/android/media/tv/tuner/filter/MmtpRecordEvent.java b/media/java/android/media/tv/tuner/filter/MmtpRecordEvent.java index 7060bd722d572..f0abce9a1edb2 100644 --- a/media/java/android/media/tv/tuner/filter/MmtpRecordEvent.java +++ b/media/java/android/media/tv/tuner/filter/MmtpRecordEvent.java @@ -31,13 +31,16 @@ public class MmtpRecordEvent extends FilterEvent { private final long mDataLength; private final int mMpuSequenceNumber; private final long mPts; + private final int mFirstMbInSlice; // This constructor is used by JNI code only - private MmtpRecordEvent(int scHevcIndexMask, long dataLength, int mpuSequenceNumber, long pts) { + private MmtpRecordEvent(int scHevcIndexMask, long dataLength, int mpuSequenceNumber, long pts, + int firstMbInSlice) { mScHevcIndexMask = scHevcIndexMask; mDataLength = dataLength; mMpuSequenceNumber = mpuSequenceNumber; mPts = pts; + mFirstMbInSlice = firstMbInSlice; } /** @@ -58,6 +61,11 @@ public class MmtpRecordEvent extends FilterEvent { /** * Get the MPU sequence number of the filtered data. + * + *
This field is only supported in Tuner 1.1 or higher version. Unsupported version will + * return {@link android.media.tv.tuner.Tuner.INVALID_MMTP_RECORD_EVENT_MPT_SEQUENCE_NUM}. Use + * {@link android.media.tv.tuner.TunerVersionChecker.getTunerVersion()} to get the version + * information. */ public int getMpuSequenceNumber() { return mMpuSequenceNumber; @@ -65,10 +73,26 @@ public class MmtpRecordEvent extends FilterEvent { /** * 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. + * and has the same format as the PTS in ISO/IEC 13818-1. + * + *
This field is only supported in Tuner 1.1 or higher version. Unsupported version will + * return {@link android.media.tv.tuner.Tuner.INVALID_TIMESTAMP}. Use + * {@link android.media.tv.tuner.TunerVersionChecker.getTunerVersion()} to get the version + * information. */ public long getPts() { return mPts; } + + /** + * Get the address of the first macroblock in the slice defined in ITU-T Rec. H.264. + * + *
This field is only supported in Tuner 1.1 or higher version. Unsupported version will + * return {@link android.media.tv.tuner.Tuner.INVALID_FIRST_MACROBLOCK_IN_SLICE}. Use + * {@link android.media.tv.tuner.TunerVersionChecker.getTunerVersion()} to get the version + * information. + */ + public int getFirstMbInSlice() { + return mFirstMbInSlice; + } } diff --git a/media/java/android/media/tv/tuner/filter/TsRecordEvent.java b/media/java/android/media/tv/tuner/filter/TsRecordEvent.java index 258e2f22427c6..6ea3bf87ad323 100644 --- a/media/java/android/media/tv/tuner/filter/TsRecordEvent.java +++ b/media/java/android/media/tv/tuner/filter/TsRecordEvent.java @@ -33,14 +33,17 @@ public class TsRecordEvent extends FilterEvent { private final int mScIndexMask; private final long mDataLength; private final long mPts; + private final int mFirstMbInSlice; // This constructor is used by JNI code only - private TsRecordEvent(int pid, int tsIndexMask, int scIndexMask, long dataLength, long pts) { + private TsRecordEvent(int pid, int tsIndexMask, int scIndexMask, long dataLength, long pts, + int firstMbInSlice) { mPid = pid; mTsIndexMask = tsIndexMask; mScIndexMask = scIndexMask; mDataLength = dataLength; mPts = pts; + mFirstMbInSlice = firstMbInSlice; } /** @@ -77,10 +80,26 @@ public class TsRecordEvent extends FilterEvent { /** * Gets 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. + * and has the same format as the PTS in ISO/IEC 13818-1. + * + *
This field is only supported in Tuner 1.1 or higher version. Unsupported version will + * return {@link android.media.tv.tuner.Tuner.INVALID_TIMESTAMP}. Use + * {@link android.media.tv.tuner.TunerVersionChecker.getTunerVersion()} to get the version + * information. */ public long getPts() { return mPts; } + + /** + * Get the address of the first macroblock in the slice defined in ITU-T Rec. H.264. + * + *
This field is only supported in Tuner 1.1 or higher version. Unsupported version will
+ * return {@link android.media.tv.tuner.Tuner.INVALID_FIRST_MACROBLOCK_IN_SLICE}. Use
+ * {@link android.media.tv.tuner.TunerVersionChecker.getTunerVersion()} to get the version
+ * information.
+ */
+ public int getFirstMbInSlice() {
+ return mFirstMbInSlice;
+ }
}
diff --git a/media/jni/android_media_tv_Tuner.cpp b/media/jni/android_media_tv_Tuner.cpp
index 1be0d4439e693..68b4bfaeb4707 100644
--- a/media/jni/android_media_tv_Tuner.cpp
+++ b/media/jni/android_media_tv_Tuner.cpp
@@ -604,9 +604,13 @@ jobjectArray FilterCallback::getTsRecordEvent(
jlong pts = (eventsExt.size() > i) ? static_cast