diff options
| -rw-r--r-- | Android.bp | 1 | ||||
| -rw-r--r-- | api/system-current.txt | 6 | ||||
| -rw-r--r-- | media/java/android/media/tv/tuner/Tuner.java | 27 | ||||
| -rw-r--r-- | media/java/android/media/tv/tuner/filter/Filter.java | 15 | ||||
| -rw-r--r-- | media/java/android/media/tv/tuner/filter/MmtpRecordEvent.java | 22 | ||||
| -rw-r--r-- | media/java/android/media/tv/tuner/filter/TsRecordEvent.java | 13 | ||||
| -rw-r--r-- | media/jni/Android.bp | 1 | ||||
| -rw-r--r-- | media/jni/android_media_tv_Tuner.cpp | 115 | ||||
| -rw-r--r-- | media/jni/android_media_tv_Tuner.h | 18 | ||||
| -rw-r--r-- | non-updatable-api/system-current.txt | 6 |
10 files changed, 188 insertions, 36 deletions
diff --git a/Android.bp b/Android.bp index afdd832718bb..1f17932be895 100644 --- a/Android.bp +++ b/Android.bp @@ -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", diff --git a/api/system-current.txt b/api/system-current.txt index 1404f7e1c554..dff171eb52c1 100644 --- a/api/system-current.txt +++ b/api/system-current.txt @@ -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(); } diff --git a/media/java/android/media/tv/tuner/Tuner.java b/media/java/android/media/tv/tuner/Tuner.java index e148d0e29b5a..0f14134eea02 100644 --- a/media/java/android/media/tv/tuner/Tuner.java +++ b/media/java/android/media/tv/tuner/Tuner.java @@ -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}) diff --git a/media/java/android/media/tv/tuner/filter/Filter.java b/media/java/android/media/tv/tuner/filter/Filter.java index f0015b723edb..2f2d8f74c908 100644 --- a/media/java/android/media/tv/tuner/filter/Filter.java +++ b/media/java/android/media/tv/tuner/filter/Filter.java @@ -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; } @@ -269,6 +270,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. * * A filter uses demux as data source by default. If the data was packetized diff --git a/media/java/android/media/tv/tuner/filter/MmtpRecordEvent.java b/media/java/android/media/tv/tuner/filter/MmtpRecordEvent.java index 466fa3ecb6e7..7060bd722d57 100644 --- a/media/java/android/media/tv/tuner/filter/MmtpRecordEvent.java +++ b/media/java/android/media/tv/tuner/filter/MmtpRecordEvent.java @@ -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; + } } diff --git a/media/java/android/media/tv/tuner/filter/TsRecordEvent.java b/media/java/android/media/tv/tuner/filter/TsRecordEvent.java index 7a14bb863700..258e2f22427c 100644 --- a/media/java/android/media/tv/tuner/filter/TsRecordEvent.java +++ b/media/java/android/media/tv/tuner/filter/TsRecordEvent.java @@ -32,13 +32,15 @@ public class TsRecordEvent extends FilterEvent { private final int mTsIndexMask; private final int mScIndexMask; private final long mDataLength; + private final long mPts; // This constructor is used by JNI code only - private TsRecordEvent(int pid, int tsIndexMask, int scIndexMask, long dataLength) { + private TsRecordEvent(int pid, int tsIndexMask, int scIndexMask, long dataLength, long pts) { mPid = pid; mTsIndexMask = tsIndexMask; mScIndexMask = scIndexMask; mDataLength = dataLength; + mPts = pts; } /** @@ -72,4 +74,13 @@ public class TsRecordEvent extends FilterEvent { public long getDataLength() { return mDataLength; } + + /** + * 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. + */ + public long getPts() { + return mPts; + } } diff --git a/media/jni/Android.bp b/media/jni/Android.bp index 4e27c8e2723d..724965dac947 100644 --- a/media/jni/Android.bp +++ b/media/jni/Android.bp @@ -142,6 +142,7 @@ cc_library_shared { shared_libs: [ "android.hardware.graphics.bufferqueue@2.0", "android.hardware.tv.tuner@1.0", + "android.hardware.tv.tuner@1.1", "libandroid_runtime", "libcutils", "libfmq", diff --git a/media/jni/android_media_tv_Tuner.cpp b/media/jni/android_media_tv_Tuner.cpp index 5daf8b0f88f8..1c23eaf05b5f 100644 --- a/media/jni/android_media_tv_Tuner.cpp +++ b/media/jni/android_media_tv_Tuner.cpp @@ -22,7 +22,6 @@ #include "android_runtime/AndroidRuntime.h" #include <android-base/logging.h> -#include <android/hardware/tv/tuner/1.0/ITuner.h> #include <media/stagefright/foundation/ADebug.h> #include <nativehelper/JNIHelp.h> #include <nativehelper/ScopedLocalRef.h> @@ -34,7 +33,6 @@ using ::android::hardware::Void; using ::android::hardware::hidl_bitfield; using ::android::hardware::hidl_vec; using ::android::hardware::tv::tuner::V1_0::AudioExtraMetaData; -using ::android::hardware::tv::tuner::V1_0::Constant; using ::android::hardware::tv::tuner::V1_0::DataFormat; using ::android::hardware::tv::tuner::V1_0::DemuxAlpFilterSettings; using ::android::hardware::tv::tuner::V1_0::DemuxAlpFilterType; @@ -129,12 +127,13 @@ using ::android::hardware::tv::tuner::V1_0::FrontendStatus; using ::android::hardware::tv::tuner::V1_0::FrontendStatusAtsc3PlpInfo; using ::android::hardware::tv::tuner::V1_0::FrontendStatusType; using ::android::hardware::tv::tuner::V1_0::FrontendType; -using ::android::hardware::tv::tuner::V1_0::ITuner; using ::android::hardware::tv::tuner::V1_0::LnbPosition; using ::android::hardware::tv::tuner::V1_0::LnbTone; using ::android::hardware::tv::tuner::V1_0::LnbVoltage; using ::android::hardware::tv::tuner::V1_0::PlaybackSettings; using ::android::hardware::tv::tuner::V1_0::RecordSettings; +using ::android::hardware::tv::tuner::V1_1::Constant; +using ::android::hardware::tv::tuner::V1_1::Constant64Bit; struct fields_t { jfieldID tunerContext; @@ -505,10 +504,11 @@ jobjectArray FilterCallback::getPesEvent( } jobjectArray FilterCallback::getTsRecordEvent( - jobjectArray& arr, const std::vector<DemuxFilterEvent::Event>& events) { + jobjectArray& arr, const std::vector<DemuxFilterEvent::Event>& events, + const std::vector<DemuxFilterEventExt::Event>& eventsExt) { JNIEnv *env = AndroidRuntime::getJNIEnv(); jclass eventClazz = env->FindClass("android/media/tv/tuner/filter/TsRecordEvent"); - jmethodID eventInit = env->GetMethodID(eventClazz, "<init>", "(IIIJ)V"); + jmethodID eventInit = env->GetMethodID(eventClazz, "<init>", "(IIIJJ)V"); for (int i = 0; i < events.size(); i++) { auto event = events[i]; @@ -537,28 +537,39 @@ jobjectArray FilterCallback::getTsRecordEvent( jlong byteNumber = static_cast<jlong>(tsRecordEvent.byteNumber); + jlong pts = (eventsExt.size() > i) ? static_cast<jlong>(eventsExt[i].tsRecord().pts) + : static_cast<jlong>(Constant64Bit::INVALID_PRESENTATION_TIME_STAMP); + jobject obj = - env->NewObject(eventClazz, eventInit, jpid, ts, sc, byteNumber); + env->NewObject(eventClazz, eventInit, jpid, ts, sc, byteNumber, pts); env->SetObjectArrayElement(arr, i, obj); } return arr; } jobjectArray FilterCallback::getMmtpRecordEvent( - jobjectArray& arr, const std::vector<DemuxFilterEvent::Event>& events) { + jobjectArray& arr, const std::vector<DemuxFilterEvent::Event>& events, + const std::vector<DemuxFilterEventExt::Event>& eventsExt) { JNIEnv *env = AndroidRuntime::getJNIEnv(); jclass eventClazz = env->FindClass("android/media/tv/tuner/filter/MmtpRecordEvent"); - jmethodID eventInit = env->GetMethodID(eventClazz, "<init>", "(IJ)V"); + jmethodID eventInit = env->GetMethodID(eventClazz, "<init>", "(IJIJ)V"); for (int i = 0; i < events.size(); i++) { auto event = events[i]; + DemuxFilterMmtpRecordEvent mmtpRecordEvent = event.mmtpRecord(); jint scHevcIndexMask = static_cast<jint>(mmtpRecordEvent.scHevcIndexMask); jlong byteNumber = static_cast<jlong>(mmtpRecordEvent.byteNumber); + jint mpuSequenceNumber = (eventsExt.size() > i) + ? static_cast<jint>(eventsExt[i].mmtpRecord().mpuSequenceNumber) + : static_cast<jint>(Constant::INVALID_MMTP_RECORD_EVENT_MPT_SEQUENCE_NUM); + jlong pts = (eventsExt.size() > i) ? static_cast<jlong>(eventsExt[i].mmtpRecord().pts) + : static_cast<jlong>(Constant64Bit::INVALID_PRESENTATION_TIME_STAMP); jobject obj = - env->NewObject(eventClazz, eventInit, scHevcIndexMask, byteNumber); + env->NewObject(eventClazz, eventInit, scHevcIndexMask, byteNumber, + mpuSequenceNumber, pts); env->SetObjectArrayElement(arr, i, obj); } return arr; @@ -627,12 +638,14 @@ jobjectArray FilterCallback::getTemiEvent( return arr; } -Return<void> FilterCallback::onFilterEvent(const DemuxFilterEvent& filterEvent) { - ALOGD("FilterCallback::onFilterEvent"); +Return<void> FilterCallback::onFilterEvent_1_1(const DemuxFilterEvent& filterEvent, + const DemuxFilterEventExt& filterEventExt) { + ALOGD("FilterCallback::onFilterEvent_1_1"); JNIEnv *env = AndroidRuntime::getJNIEnv(); std::vector<DemuxFilterEvent::Event> events = filterEvent.events; + std::vector<DemuxFilterEventExt::Event> eventsExt = filterEventExt.events; jclass eventClazz = env->FindClass("android/media/tv/tuner/filter/FilterEvent"); jobjectArray array = env->NewObjectArray(events.size(), eventClazz, NULL); @@ -652,11 +665,11 @@ Return<void> FilterCallback::onFilterEvent(const DemuxFilterEvent& filterEvent) break; } case DemuxFilterEvent::Event::hidl_discriminator::tsRecord: { - array = getTsRecordEvent(array, events); + array = getTsRecordEvent(array, events, eventsExt); break; } case DemuxFilterEvent::Event::hidl_discriminator::mmtpRecord: { - array = getMmtpRecordEvent(array, events); + array = getMmtpRecordEvent(array, events, eventsExt); break; } case DemuxFilterEvent::Event::hidl_discriminator::download: { @@ -683,6 +696,14 @@ Return<void> FilterCallback::onFilterEvent(const DemuxFilterEvent& filterEvent) return Void(); } +Return<void> FilterCallback::onFilterEvent(const DemuxFilterEvent& filterEvent) { + ALOGD("FilterCallback::onFilterEvent"); + std::vector<DemuxFilterEventExt::Event> emptyEventsExt; + DemuxFilterEventExt emptyFilterEventExt { + .events = emptyEventsExt, + }; + return onFilterEvent_1_1(filterEvent, emptyFilterEventExt); +} Return<void> FilterCallback::onFilterStatus(const DemuxFilterStatus status) { ALOGD("FilterCallback::onFilterStatus"); @@ -919,6 +940,7 @@ Return<void> FrontendCallback::onScanMessage(FrontendScanMessageType type, const /////////////// Tuner /////////////////////// sp<ITuner> JTuner::mTuner; +sp<::android::hardware::tv::tuner::V1_1::ITuner> JTuner::mTuner_1_1; JTuner::JTuner(JNIEnv *env, jobject thiz) : mClass(NULL) { @@ -949,14 +971,20 @@ JTuner::~JTuner() { } sp<ITuner> JTuner::getTunerService() { - if (mTuner == nullptr) { - mTuner = ITuner::getService(); - - if (mTuner == nullptr) { - ALOGW("Failed to get tuner service."); - } - } - return mTuner; + if (mTuner == nullptr && mTuner_1_1 == nullptr) { + mTuner_1_1 = ::android::hardware::tv::tuner::V1_1::ITuner::getService(); + + if (mTuner_1_1 == nullptr) { + ALOGW("Failed to get tuner 1.1 service."); + mTuner = ITuner::getService(); + if (mTuner == nullptr) { + ALOGW("Failed to get tuner 1.0 service."); + } + } else { + mTuner = static_cast<sp<ITuner>>(mTuner_1_1); + } + } + return mTuner; } jobject JTuner::getFrontendIds() { @@ -1504,6 +1532,7 @@ jobject JTuner::openFilter(DemuxFilterType type, int bufferSize) { } sp<IFilter> iFilterSp; + sp<::android::hardware::tv::tuner::V1_1::IFilter> iFilterSp_1_1; sp<FilterCallback> callback = new FilterCallback(); Result res; mDemux->openFilter(type, bufferSize, callback, @@ -1515,17 +1544,23 @@ jobject JTuner::openFilter(DemuxFilterType type, int bufferSize) { ALOGD("Failed to open filter, type = %d", type.mainType); return NULL; } - int fId; + uint64_t fId; iFilterSp->getId([&](Result, uint32_t filterId) { fId = filterId; }); + iFilterSp_1_1 = ::android::hardware::tv::tuner::V1_1::IFilter::castFrom(iFilterSp); + if (iFilterSp_1_1 != NULL) { + iFilterSp_1_1->getId64Bit([&](Result, uint64_t filterId64Bit) { + fId = filterId64Bit; + }); + } JNIEnv *env = AndroidRuntime::getJNIEnv(); jobject filterObj = env->NewObject( env->FindClass("android/media/tv/tuner/filter/Filter"), gFields.filterInitID, - (jint) fId); + (jlong) fId); sp<Filter> filterSp = new Filter(iFilterSp, filterObj); filterSp->incStrong(filterObj); @@ -2460,7 +2495,7 @@ static void android_media_tv_Tuner_native_init(JNIEnv *env) { jclass filterClazz = env->FindClass("android/media/tv/tuner/filter/Filter"); gFields.filterContext = env->GetFieldID(filterClazz, "mNativeContext", "J"); gFields.filterInitID = - env->GetMethodID(filterClazz, "<init>", "(I)V"); + env->GetMethodID(filterClazz, "<init>", "(J)V"); gFields.onFilterStatusID = env->GetMethodID(filterClazz, "onFilterStatus", "(I)V"); gFields.onFilterEventID = @@ -3071,6 +3106,36 @@ static jint android_media_tv_Tuner_get_filter_id(JNIEnv* env, jobject filter) { return (jint) id; } +static jlong android_media_tv_Tuner_get_filter_64bit_id(JNIEnv* env, jobject filter) { + sp<IFilter> iFilterSp = getFilter(env, filter)->getIFilter(); + if (iFilterSp == NULL) { + ALOGD("Failed to get filter ID: filter not found"); + return static_cast<jlong>( + ::android::hardware::tv::tuner::V1_1::Constant64Bit::INVALID_FILTER_ID_64BIT); + } + + sp<::android::hardware::tv::tuner::V1_1::IFilter> iFilterSp_1_1; + iFilterSp_1_1 = ::android::hardware::tv::tuner::V1_1::IFilter::castFrom(iFilterSp); + Result res; + uint64_t id; + + if (iFilterSp_1_1 != NULL) { + iFilterSp_1_1->getId64Bit( + [&](Result r, uint64_t filterId64Bit) { + res = r; + id = filterId64Bit; + }); + } else { + ALOGW("getId64Bit is not supported with the current HAL implementation."); + return static_cast<jlong>( + ::android::hardware::tv::tuner::V1_1::Constant64Bit::INVALID_FILTER_ID_64BIT); + } + + return (res == Result::SUCCESS) ? + static_cast<jlong>(id) : static_cast<jlong>( + ::android::hardware::tv::tuner::V1_1::Constant64Bit::INVALID_FILTER_ID_64BIT); +} + static jint android_media_tv_Tuner_set_filter_data_source( JNIEnv* env, jobject filter, jobject srcFilter) { sp<IFilter> iFilterSp = getFilter(env, filter)->getIFilter(); @@ -3735,6 +3800,8 @@ static const JNINativeMethod gFilterMethods[] = { { "nativeConfigureFilter", "(IILandroid/media/tv/tuner/filter/FilterConfiguration;)I", (void *)android_media_tv_Tuner_configure_filter }, { "nativeGetId", "()I", (void *)android_media_tv_Tuner_get_filter_id }, + { "nativeGetId64Bit", "()J", + (void *)android_media_tv_Tuner_get_filter_64bit_id }, { "nativeSetDataSource", "(Landroid/media/tv/tuner/filter/Filter;)I", (void *)android_media_tv_Tuner_set_filter_data_source }, { "nativeStartFilter", "()I", (void *)android_media_tv_Tuner_start_filter }, diff --git a/media/jni/android_media_tv_Tuner.h b/media/jni/android_media_tv_Tuner.h index c4deeaf887bb..0b145b4b3843 100644 --- a/media/jni/android_media_tv_Tuner.h +++ b/media/jni/android_media_tv_Tuner.h @@ -17,7 +17,11 @@ #ifndef _ANDROID_MEDIA_TV_TUNER_H_ #define _ANDROID_MEDIA_TV_TUNER_H_ -#include <android/hardware/tv/tuner/1.0/ITuner.h> +#include <android/hardware/tv/tuner/1.1/IFilter.h> +#include <android/hardware/tv/tuner/1.1/IFilterCallback.h> +#include <android/hardware/tv/tuner/1.1/ITuner.h> +#include <android/hardware/tv/tuner/1.1/types.h> + #include <C2BlockInternal.h> #include <C2HandleIonInternal.h> #include <C2ParamDef.h> @@ -38,6 +42,7 @@ using ::android::hardware::hidl_handle; using ::android::hardware::hidl_vec; using ::android::hardware::kSynchronizedReadWrite; using ::android::hardware::tv::tuner::V1_0::DemuxFilterEvent; +using ::android::hardware::tv::tuner::V1_1::DemuxFilterEventExt; using ::android::hardware::tv::tuner::V1_0::DemuxFilterStatus; using ::android::hardware::tv::tuner::V1_0::DemuxFilterType; using ::android::hardware::tv::tuner::V1_0::DemuxPid; @@ -54,7 +59,7 @@ using ::android::hardware::tv::tuner::V1_0::IDescrambler; using ::android::hardware::tv::tuner::V1_0::IDvr; using ::android::hardware::tv::tuner::V1_0::IDvrCallback; using ::android::hardware::tv::tuner::V1_0::IFilter; -using ::android::hardware::tv::tuner::V1_0::IFilterCallback; +using ::android::hardware::tv::tuner::V1_1::IFilterCallback; using ::android::hardware::tv::tuner::V1_0::IFrontend; using ::android::hardware::tv::tuner::V1_0::IFrontendCallback; using ::android::hardware::tv::tuner::V1_0::ILnb; @@ -147,6 +152,8 @@ struct Filter : public RefBase { struct FilterCallback : public IFilterCallback { ~FilterCallback(); + virtual Return<void> onFilterEvent_1_1(const DemuxFilterEvent& filterEvent, + const DemuxFilterEventExt& filterEventExt); virtual Return<void> onFilterEvent(const DemuxFilterEvent& filterEvent); virtual Return<void> onFilterStatus(const DemuxFilterStatus status); @@ -161,9 +168,11 @@ private: jobjectArray getPesEvent( jobjectArray& arr, const std::vector<DemuxFilterEvent::Event>& events); jobjectArray getTsRecordEvent( - jobjectArray& arr, const std::vector<DemuxFilterEvent::Event>& events); + jobjectArray& arr, const std::vector<DemuxFilterEvent::Event>&events, + const std::vector<DemuxFilterEventExt::Event>& eventsExt); jobjectArray getMmtpRecordEvent( - jobjectArray& arr, const std::vector<DemuxFilterEvent::Event>& events); + jobjectArray& arr, const std::vector<DemuxFilterEvent::Event>&events, + const std::vector<DemuxFilterEventExt::Event>& eventsExt); jobjectArray getDownloadEvent( jobjectArray& arr, const std::vector<DemuxFilterEvent::Event>& events); jobjectArray getIpPayloadEvent( @@ -229,6 +238,7 @@ private: jclass mClass; jweak mObject; static sp<ITuner> mTuner; + static sp<::android::hardware::tv::tuner::V1_1::ITuner> mTuner_1_1; hidl_vec<FrontendId> mFeIds; sp<IFrontend> mFe; int mFeId; diff --git a/non-updatable-api/system-current.txt b/non-updatable-api/system-current.txt index 515c2737029c..80e90432ae2b 100644 --- a/non-updatable-api/system-current.txt +++ b/non-updatable-api/system-current.txt @@ -4992,6 +4992,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 @@ -5144,6 +5146,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(); @@ -5244,6 +5247,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(); } @@ -5406,6 +5411,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(); } |