Loading media/jni/android_media_tv_Tuner.cpp +1 −1 Original line number Diff line number Diff line Loading @@ -3786,7 +3786,7 @@ static jint android_media_tv_Tuner_read_filter_fmq( jniThrowRuntimeException(env, "Failed to GetByteArrayElements"); return -1; } int realReadSize = filterClient->read(reinterpret_cast<uint8_t*>(dst) + offset, size); int realReadSize = filterClient->read(reinterpret_cast<int8_t*>(dst) + offset, size); env->ReleaseByteArrayElements(buffer, dst, 0); return (jint) realReadSize; } Loading media/jni/tuner/FilterClient.cpp +61 −31 Original line number Diff line number Diff line Loading @@ -18,6 +18,7 @@ #include <aidlcommonsupport/NativeHandle.h> #include <android-base/logging.h> #include <fmq/ConvertMQDescriptors.h> #include <utils/Log.h> #include "FilterClient.h" Loading Loading @@ -68,10 +69,7 @@ void FilterClient::setHidlFilter(sp<IFilter> filter) { mFilter_1_1 = ::android::hardware::tv::tuner::V1_1::IFilter::castFrom(mFilter); } int FilterClient::read(uint8_t* buffer, int size) { // TODO: pending aidl interface if (mFilter != NULL) { int FilterClient::read(int8_t* buffer, int size) { Result res = getFilterMq(); if (res != Result::SUCCESS) { return -1; Loading @@ -79,9 +77,6 @@ int FilterClient::read(uint8_t* buffer, int size) { return copyData(buffer, size); } return -1; } SharedHandleInfo FilterClient::getAvSharedHandleInfo() { handleAvShareMemory(); SharedHandleInfo info{ Loading @@ -106,7 +101,10 @@ Result FilterClient::configure(DemuxFilterSettings configure) { } Result FilterClient::configureMonitorEvent(int monitorEventType) { // TODO: pending aidl interface if (mTunerFilter != NULL) { Status s = mTunerFilter->configureMonitorEvent(monitorEventType); return ClientHelper::getServiceSpecificErrorCode(s); } if (mFilter_1_1 != NULL) { return mFilter_1_1->configureMonitorEvent(monitorEventType); Loading @@ -116,7 +114,10 @@ Result FilterClient::configureMonitorEvent(int monitorEventType) { } Result FilterClient::configureIpFilterContextId(int cid) { // TODO: pending aidl interface if (mTunerFilter != NULL) { Status s = mTunerFilter->configureIpFilterContextId(cid); return ClientHelper::getServiceSpecificErrorCode(s); } if (mFilter_1_1 != NULL) { return mFilter_1_1->configureIpCid(cid); Loading @@ -126,7 +127,19 @@ Result FilterClient::configureIpFilterContextId(int cid) { } Result FilterClient::configureAvStreamType(AvStreamType avStreamType) { // TODO: pending aidl interface if (mTunerFilter != NULL) { int type; switch (avStreamType.getDiscriminator()) { case AvStreamType::hidl_discriminator::audio: type = (int)avStreamType.audio(); break; case AvStreamType::hidl_discriminator::video: type = (int)avStreamType.video(); break; } Status s = mTunerFilter->configureAvStreamType(type); return ClientHelper::getServiceSpecificErrorCode(s); } if (mFilter_1_1 != NULL) { return mFilter_1_1->configureAvStreamType(avStreamType); Loading Loading @@ -228,7 +241,10 @@ Result FilterClient::releaseAvHandle(native_handle_t* handle, uint64_t avDataId) } Result FilterClient::setDataSource(sp<FilterClient> filterClient){ // TODO: pending aidl interface if (mTunerFilter != NULL) { Status s = mTunerFilter->setDataSource(filterClient->getAidlFilter()); return ClientHelper::getServiceSpecificErrorCode(s); } if (mFilter != NULL) { sp<IFilter> sourceFilter = filterClient->getHalFilter(); Loading Loading @@ -891,29 +907,43 @@ void TunerFilterCallback::getHidlRestartEvent(const vector<TunerFilterEvent>& fi } Result FilterClient::getFilterMq() { if (mFilter == NULL) { return Result::INVALID_STATE; } if (mFilterMQ != NULL) { return Result::SUCCESS; } Result getQueueDescResult = Result::UNKNOWN_ERROR; AidlMQDesc aidlMqDesc; Result res = Result::UNAVAILABLE; if (mTunerFilter != NULL) { Status s = mTunerFilter->getQueueDesc(&aidlMqDesc); res = ClientHelper::getServiceSpecificErrorCode(s); if (res == Result::SUCCESS) { mFilterMQ = new (nothrow) AidlMQ(aidlMqDesc); EventFlag::createEventFlag(mFilterMQ->getEventFlagWord(), &mFilterMQEventFlag); } return res; } if (mFilter != NULL) { MQDescriptorSync<uint8_t> filterMQDesc; mFilter->getQueueDesc( [&](Result r, const MQDescriptorSync<uint8_t>& desc) { filterMQDesc = desc; getQueueDescResult = r; res = r; }); if (getQueueDescResult == Result::SUCCESS) { mFilterMQ = std::make_unique<MQ>(filterMQDesc, true); if (res == Result::SUCCESS) { AidlMQDesc aidlMQDesc; unsafeHidlToAidlMQDescriptor<uint8_t, int8_t, SynchronizedReadWrite>( filterMQDesc, &aidlMQDesc); mFilterMQ = new (nothrow) AidlMessageQueue(aidlMQDesc); EventFlag::createEventFlag(mFilterMQ->getEventFlagWord(), &mFilterMQEventFlag); } return getQueueDescResult; } int FilterClient::copyData(uint8_t* buffer, int size) { return res; } int FilterClient::copyData(int8_t* buffer, int size) { if (mFilter == NULL || mFilterMQ == NULL || mFilterMQEventFlag == NULL) { return -1; } Loading media/jni/tuner/FilterClient.h +10 −5 Original line number Diff line number Diff line Loading @@ -25,12 +25,14 @@ #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/types.h> #include <fmq/AidlMessageQueue.h> #include <fmq/MessageQueue.h> #include "ClientHelper.h" #include "FilterClientCallback.h" using Status = ::ndk::ScopedAStatus; using ::aidl::android::hardware::common::fmq::SynchronizedReadWrite; using ::aidl::android::media::tv::tuner::BnTunerFilterCallback; using ::aidl::android::media::tv::tuner::ITunerFilter; using ::aidl::android::media::tv::tuner::TunerDemuxIpAddress; Loading Loading @@ -69,10 +71,13 @@ using ::android::hardware::tv::tuner::V1_1::IFilterCallback; using namespace std; using MQ = MessageQueue<uint8_t, kSynchronizedReadWrite>; namespace android { using MQ = MessageQueue<uint8_t, kSynchronizedReadWrite>; using MQDesc = MQDescriptorSync<uint8_t>; using AidlMQ = AidlMessageQueue<int8_t, SynchronizedReadWrite>; using AidlMQDesc = MQDescriptor<int8_t, SynchronizedReadWrite>; struct SharedHandleInfo { native_handle_t* sharedHandle; uint64_t size; Loading Loading @@ -139,7 +144,7 @@ public: * * @return the actual reading size. -1 if failed to read. */ int read(uint8_t* buffer, int size); int read(int8_t* buffer, int size); /** * Get the a/v shared memory handle information Loading Loading @@ -234,7 +239,7 @@ private: void getAidlIpAddress(DemuxIpAddress ipAddr, TunerDemuxIpAddress& srcIpAddress, TunerDemuxIpAddress& dstIpAddress); Result getFilterMq(); int copyData(uint8_t* buffer, int size); int copyData(int8_t* buffer, int size); void checkIsMediaFilter(DemuxFilterType type); void handleAvShareMemory(); void closeAvSharedMemory(); Loading @@ -259,7 +264,7 @@ private: */ sp<::android::hardware::tv::tuner::V1_1::IFilter> mFilter_1_1; unique_ptr<MQ> mFilterMQ; AidlMQ* mFilterMQ; EventFlag* mFilterMQEventFlag; sp<FilterClientCallback> mCallback; Loading Loading
media/jni/android_media_tv_Tuner.cpp +1 −1 Original line number Diff line number Diff line Loading @@ -3786,7 +3786,7 @@ static jint android_media_tv_Tuner_read_filter_fmq( jniThrowRuntimeException(env, "Failed to GetByteArrayElements"); return -1; } int realReadSize = filterClient->read(reinterpret_cast<uint8_t*>(dst) + offset, size); int realReadSize = filterClient->read(reinterpret_cast<int8_t*>(dst) + offset, size); env->ReleaseByteArrayElements(buffer, dst, 0); return (jint) realReadSize; } Loading
media/jni/tuner/FilterClient.cpp +61 −31 Original line number Diff line number Diff line Loading @@ -18,6 +18,7 @@ #include <aidlcommonsupport/NativeHandle.h> #include <android-base/logging.h> #include <fmq/ConvertMQDescriptors.h> #include <utils/Log.h> #include "FilterClient.h" Loading Loading @@ -68,10 +69,7 @@ void FilterClient::setHidlFilter(sp<IFilter> filter) { mFilter_1_1 = ::android::hardware::tv::tuner::V1_1::IFilter::castFrom(mFilter); } int FilterClient::read(uint8_t* buffer, int size) { // TODO: pending aidl interface if (mFilter != NULL) { int FilterClient::read(int8_t* buffer, int size) { Result res = getFilterMq(); if (res != Result::SUCCESS) { return -1; Loading @@ -79,9 +77,6 @@ int FilterClient::read(uint8_t* buffer, int size) { return copyData(buffer, size); } return -1; } SharedHandleInfo FilterClient::getAvSharedHandleInfo() { handleAvShareMemory(); SharedHandleInfo info{ Loading @@ -106,7 +101,10 @@ Result FilterClient::configure(DemuxFilterSettings configure) { } Result FilterClient::configureMonitorEvent(int monitorEventType) { // TODO: pending aidl interface if (mTunerFilter != NULL) { Status s = mTunerFilter->configureMonitorEvent(monitorEventType); return ClientHelper::getServiceSpecificErrorCode(s); } if (mFilter_1_1 != NULL) { return mFilter_1_1->configureMonitorEvent(monitorEventType); Loading @@ -116,7 +114,10 @@ Result FilterClient::configureMonitorEvent(int monitorEventType) { } Result FilterClient::configureIpFilterContextId(int cid) { // TODO: pending aidl interface if (mTunerFilter != NULL) { Status s = mTunerFilter->configureIpFilterContextId(cid); return ClientHelper::getServiceSpecificErrorCode(s); } if (mFilter_1_1 != NULL) { return mFilter_1_1->configureIpCid(cid); Loading @@ -126,7 +127,19 @@ Result FilterClient::configureIpFilterContextId(int cid) { } Result FilterClient::configureAvStreamType(AvStreamType avStreamType) { // TODO: pending aidl interface if (mTunerFilter != NULL) { int type; switch (avStreamType.getDiscriminator()) { case AvStreamType::hidl_discriminator::audio: type = (int)avStreamType.audio(); break; case AvStreamType::hidl_discriminator::video: type = (int)avStreamType.video(); break; } Status s = mTunerFilter->configureAvStreamType(type); return ClientHelper::getServiceSpecificErrorCode(s); } if (mFilter_1_1 != NULL) { return mFilter_1_1->configureAvStreamType(avStreamType); Loading Loading @@ -228,7 +241,10 @@ Result FilterClient::releaseAvHandle(native_handle_t* handle, uint64_t avDataId) } Result FilterClient::setDataSource(sp<FilterClient> filterClient){ // TODO: pending aidl interface if (mTunerFilter != NULL) { Status s = mTunerFilter->setDataSource(filterClient->getAidlFilter()); return ClientHelper::getServiceSpecificErrorCode(s); } if (mFilter != NULL) { sp<IFilter> sourceFilter = filterClient->getHalFilter(); Loading Loading @@ -891,29 +907,43 @@ void TunerFilterCallback::getHidlRestartEvent(const vector<TunerFilterEvent>& fi } Result FilterClient::getFilterMq() { if (mFilter == NULL) { return Result::INVALID_STATE; } if (mFilterMQ != NULL) { return Result::SUCCESS; } Result getQueueDescResult = Result::UNKNOWN_ERROR; AidlMQDesc aidlMqDesc; Result res = Result::UNAVAILABLE; if (mTunerFilter != NULL) { Status s = mTunerFilter->getQueueDesc(&aidlMqDesc); res = ClientHelper::getServiceSpecificErrorCode(s); if (res == Result::SUCCESS) { mFilterMQ = new (nothrow) AidlMQ(aidlMqDesc); EventFlag::createEventFlag(mFilterMQ->getEventFlagWord(), &mFilterMQEventFlag); } return res; } if (mFilter != NULL) { MQDescriptorSync<uint8_t> filterMQDesc; mFilter->getQueueDesc( [&](Result r, const MQDescriptorSync<uint8_t>& desc) { filterMQDesc = desc; getQueueDescResult = r; res = r; }); if (getQueueDescResult == Result::SUCCESS) { mFilterMQ = std::make_unique<MQ>(filterMQDesc, true); if (res == Result::SUCCESS) { AidlMQDesc aidlMQDesc; unsafeHidlToAidlMQDescriptor<uint8_t, int8_t, SynchronizedReadWrite>( filterMQDesc, &aidlMQDesc); mFilterMQ = new (nothrow) AidlMessageQueue(aidlMQDesc); EventFlag::createEventFlag(mFilterMQ->getEventFlagWord(), &mFilterMQEventFlag); } return getQueueDescResult; } int FilterClient::copyData(uint8_t* buffer, int size) { return res; } int FilterClient::copyData(int8_t* buffer, int size) { if (mFilter == NULL || mFilterMQ == NULL || mFilterMQEventFlag == NULL) { return -1; } Loading
media/jni/tuner/FilterClient.h +10 −5 Original line number Diff line number Diff line Loading @@ -25,12 +25,14 @@ #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/types.h> #include <fmq/AidlMessageQueue.h> #include <fmq/MessageQueue.h> #include "ClientHelper.h" #include "FilterClientCallback.h" using Status = ::ndk::ScopedAStatus; using ::aidl::android::hardware::common::fmq::SynchronizedReadWrite; using ::aidl::android::media::tv::tuner::BnTunerFilterCallback; using ::aidl::android::media::tv::tuner::ITunerFilter; using ::aidl::android::media::tv::tuner::TunerDemuxIpAddress; Loading Loading @@ -69,10 +71,13 @@ using ::android::hardware::tv::tuner::V1_1::IFilterCallback; using namespace std; using MQ = MessageQueue<uint8_t, kSynchronizedReadWrite>; namespace android { using MQ = MessageQueue<uint8_t, kSynchronizedReadWrite>; using MQDesc = MQDescriptorSync<uint8_t>; using AidlMQ = AidlMessageQueue<int8_t, SynchronizedReadWrite>; using AidlMQDesc = MQDescriptor<int8_t, SynchronizedReadWrite>; struct SharedHandleInfo { native_handle_t* sharedHandle; uint64_t size; Loading Loading @@ -139,7 +144,7 @@ public: * * @return the actual reading size. -1 if failed to read. */ int read(uint8_t* buffer, int size); int read(int8_t* buffer, int size); /** * Get the a/v shared memory handle information Loading Loading @@ -234,7 +239,7 @@ private: void getAidlIpAddress(DemuxIpAddress ipAddr, TunerDemuxIpAddress& srcIpAddress, TunerDemuxIpAddress& dstIpAddress); Result getFilterMq(); int copyData(uint8_t* buffer, int size); int copyData(int8_t* buffer, int size); void checkIsMediaFilter(DemuxFilterType type); void handleAvShareMemory(); void closeAvSharedMemory(); Loading @@ -259,7 +264,7 @@ private: */ sp<::android::hardware::tv::tuner::V1_1::IFilter> mFilter_1_1; unique_ptr<MQ> mFilterMQ; AidlMQ* mFilterMQ; EventFlag* mFilterMQEventFlag; sp<FilterClientCallback> mCallback; Loading