Loading services/tuner/TunerDemux.cpp +1 −1 Original line number Diff line number Diff line Loading @@ -98,7 +98,7 @@ Status TunerDemux::openFilter( return Status::fromServiceSpecificError(static_cast<int32_t>(status)); } *_aidl_return = ::ndk::SharedRefBase::make<TunerFilter>(filterSp, cbSp); *_aidl_return = ::ndk::SharedRefBase::make<TunerFilter>(filterSp, cbSp, type, subType); return Status::ok(); } Loading services/tuner/TunerFilter.cpp +115 −1 Original line number Diff line number Diff line Loading @@ -30,17 +30,21 @@ using ::android::hardware::tv::tuner::V1_0::DemuxRecordScIndexType; using ::android::hardware::tv::tuner::V1_0::DemuxStreamId; using ::android::hardware::tv::tuner::V1_0::DemuxTsFilterType; using ::android::hardware::tv::tuner::V1_0::Result; using ::android::hardware::tv::tuner::V1_1::AudioStreamType; using ::android::hardware::tv::tuner::V1_1::Constant; using ::android::hardware::tv::tuner::V1_1::VideoStreamType; namespace android { using namespace std; TunerFilter::TunerFilter( sp<IFilter> filter, sp<IFilterCallback> callback) { sp<IFilter> filter, sp<IFilterCallback> callback, int mainType, int subType) { mFilter = filter; mFilter_1_1 = ::android::hardware::tv::tuner::V1_1::IFilter::castFrom(filter); mFilterCallback = callback; mMainType = mainType; mSubType = subType; } TunerFilter::~TunerFilter() { Loading @@ -49,6 +53,29 @@ TunerFilter::~TunerFilter() { mFilterCallback = nullptr; } Status TunerFilter::getQueueDesc(AidlMQDesc* _aidl_return) { if (mFilter == NULL) { ALOGE("IFilter is not initialized"); return Status::fromServiceSpecificError(static_cast<int32_t>(Result::UNAVAILABLE)); } MQDesc dvrMQDesc; Result res; mFilter->getQueueDesc([&](Result r, const MQDesc& desc) { dvrMQDesc = desc; res = r; }); if (res != Result::SUCCESS) { return Status::fromServiceSpecificError(static_cast<int32_t>(res)); } AidlMQDesc aidlMQDesc; unsafeHidlToAidlMQDescriptor<uint8_t, int8_t, SynchronizedReadWrite>( dvrMQDesc, &aidlMQDesc); *_aidl_return = move(aidlMQDesc); return Status::ok(); } Status TunerFilter::getId(int32_t* _aidl_return) { if (mFilter == nullptr) { ALOGE("IFilter is not initialized"); Loading Loading @@ -122,6 +149,65 @@ Status TunerFilter::configure(const TunerFilterConfiguration& config) { return Status::ok(); } Status TunerFilter::configureMonitorEvent(int monitorEventType) { if (mFilter_1_1 == nullptr) { ALOGE("IFilter_1_1 is not initialized"); return Status::fromServiceSpecificError(static_cast<int32_t>(Result::UNAVAILABLE)); } Result res = mFilter_1_1->configureMonitorEvent(monitorEventType); if (res != Result::SUCCESS) { return Status::fromServiceSpecificError(static_cast<int32_t>(res)); } return Status::ok(); } Status TunerFilter::configureIpFilterContextId(int cid) { if (mFilter_1_1 == nullptr) { ALOGE("IFilter_1_1 is not initialized"); return Status::fromServiceSpecificError(static_cast<int32_t>(Result::UNAVAILABLE)); } Result res = mFilter_1_1->configureIpCid(cid); if (res != Result::SUCCESS) { return Status::fromServiceSpecificError(static_cast<int32_t>(res)); } return Status::ok(); } Status TunerFilter::configureAvStreamType(int avStreamType) { if (mFilter_1_1 == nullptr) { ALOGE("IFilter_1_1 is not initialized"); return Status::fromServiceSpecificError(static_cast<int32_t>(Result::UNAVAILABLE)); } AvStreamType type; if (!getHidlAvStreamType(avStreamType, type)) { return Status::fromServiceSpecificError(static_cast<int32_t>(Result::INVALID_STATE)); } Result res = mFilter_1_1->configureAvStreamType(type); if (res != Result::SUCCESS) { return Status::fromServiceSpecificError(static_cast<int32_t>(res)); } return Status::ok(); } Status TunerFilter::setDataSource(const shared_ptr<ITunerFilter>& filter) { if (mFilter == nullptr) { ALOGE("IFilter is not initialized"); return Status::fromServiceSpecificError(static_cast<int32_t>(Result::UNAVAILABLE)); } ITunerFilter* tunerFilter = filter.get(); sp<IFilter> hidlFilter = static_cast<TunerFilter*>(tunerFilter)->getHalFilter(); Result res = mFilter->setDataSource(hidlFilter); if (res != Result::SUCCESS) { return Status::fromServiceSpecificError(static_cast<int32_t>(res)); } return Status::ok(); } void TunerFilter::getHidlTsSettings( const TunerFilterConfiguration& config, DemuxFilterSettings& settings) { auto tsConf = config.get<TunerFilterConfiguration::ts>(); Loading Loading @@ -468,6 +554,34 @@ sp<IFilter> TunerFilter::getHalFilter() { return mFilter; } bool TunerFilter::isAudioFilter() { return (mMainType == (int)DemuxFilterMainType::TS && mSubType == (int)DemuxTsFilterType::AUDIO) || (mMainType == (int)DemuxFilterMainType::MMTP && mSubType == (int)DemuxMmtpFilterType::AUDIO); } bool TunerFilter::isVideoFilter() { return (mMainType == (int)DemuxFilterMainType::TS && mSubType == (int)DemuxTsFilterType::VIDEO) || (mMainType == (int)DemuxFilterMainType::MMTP && mSubType == (int)DemuxMmtpFilterType::VIDEO); } bool TunerFilter::getHidlAvStreamType(int avStreamType, AvStreamType& type) { if (isAudioFilter()) { type.audio(static_cast<AudioStreamType>(avStreamType)); return true; } if (isVideoFilter()) { type.video(static_cast<VideoStreamType>(avStreamType)); return true; } return false; } /////////////// FilterCallback /////////////////////// Return<void> TunerFilter::FilterCallback::onFilterStatus(DemuxFilterStatus status) { Loading services/tuner/TunerFilter.h +21 −1 Original line number Diff line number Diff line Loading @@ -25,8 +25,12 @@ #include <android/hardware/tv/tuner/1.1/IFilterCallback.h> #include <android/hardware/tv/tuner/1.1/types.h> #include <media/stagefright/foundation/ADebug.h> #include <fmq/ConvertMQDescriptors.h> #include <fmq/MessageQueue.h> using Status = ::ndk::ScopedAStatus; using ::aidl::android::hardware::common::fmq::MQDescriptor; using ::aidl::android::hardware::common::fmq::SynchronizedReadWrite; using ::aidl::android::media::tv::tuner::BnTunerFilter; using ::aidl::android::media::tv::tuner::ITunerFilterCallback; using ::aidl::android::media::tv::tuner::TunerDemuxIpAddress; Loading @@ -44,6 +48,7 @@ using ::aidl::android::media::tv::tuner::TunerFilterSharedHandleInfo; using ::aidl::android::media::tv::tuner::TunerFilterSettings; using ::aidl::android::media::tv::tuner::TunerFilterTemiEvent; using ::aidl::android::media::tv::tuner::TunerFilterTsRecordEvent; using ::android::hardware::MQDescriptorSync; using ::android::hardware::Return; using ::android::hardware::Void; using ::android::hardware::hidl_array; Loading @@ -70,6 +75,7 @@ using ::android::hardware::tv::tuner::V1_0::DemuxTlvFilterSettings; using ::android::hardware::tv::tuner::V1_0::DemuxTsFilterSettings; using ::android::hardware::tv::tuner::V1_0::DemuxPid; using ::android::hardware::tv::tuner::V1_0::IFilter; using ::android::hardware::tv::tuner::V1_1::AvStreamType; using ::android::hardware::tv::tuner::V1_1::DemuxFilterEventExt; using ::android::hardware::tv::tuner::V1_1::DemuxFilterMonitorEvent; using ::android::hardware::tv::tuner::V1_1::DemuxFilterTsRecordEventExt; Loading @@ -77,20 +83,28 @@ using ::android::hardware::tv::tuner::V1_1::IFilterCallback; namespace android { using MQDesc = MQDescriptorSync<uint8_t>; using AidlMQDesc = MQDescriptor<int8_t, SynchronizedReadWrite>; const static int IP_V4_LENGTH = 4; const static int IP_V6_LENGTH = 16; class TunerFilter : public BnTunerFilter { public: TunerFilter(sp<IFilter> filter, sp<IFilterCallback> callback); TunerFilter(sp<IFilter> filter, sp<IFilterCallback> callback, int mainType, int subTyp); virtual ~TunerFilter(); Status getId(int32_t* _aidl_return) override; Status getId64Bit(int64_t* _aidl_return) override; Status getQueueDesc(AidlMQDesc* _aidl_return) override; Status configure(const TunerFilterConfiguration& config) override; Status configureMonitorEvent(int monitorEventType) override; Status configureIpFilterContextId(int cid) override; Status configureAvStreamType(int avStreamType) override; Status getAvSharedHandleInfo(TunerFilterSharedHandleInfo* _aidl_return) override; Status releaseAvHandle(const ::aidl::android::hardware::common::NativeHandle& handle, int64_t avDataId) override; Status setDataSource(const std::shared_ptr<ITunerFilter>& filter) override; Status start() override; Status stop() override; Status flush() override; Loading Loading @@ -147,6 +161,10 @@ private: DemuxFilterRecordSettings getRecordSettings(const TunerFilterSettings& settings); DemuxFilterDownloadSettings getDownloadSettings(const TunerFilterSettings& settings); bool isAudioFilter(); bool isVideoFilter(); bool getHidlAvStreamType(int avStreamType, AvStreamType& type); void getHidlTsSettings( const TunerFilterConfiguration& config, DemuxFilterSettings& settings); void getHidlMmtpSettings( Loading @@ -166,6 +184,8 @@ private: sp<IFilterCallback> mFilterCallback; int32_t mId; int64_t mId64Bit; int mMainType; int mSubType; }; } // namespace android Loading services/tuner/aidl/android/media/tv/tuner/ITunerFilter.aidl +27 −0 Original line number Diff line number Diff line Loading @@ -16,6 +16,8 @@ package android.media.tv.tuner; import android.hardware.common.fmq.MQDescriptor; import android.hardware.common.fmq.SynchronizedReadWrite; import android.hardware.common.NativeHandle; import android.media.tv.tuner.TunerFilterConfiguration; import android.media.tv.tuner.TunerFilterSharedHandleInfo; Loading @@ -36,11 +38,31 @@ interface ITunerFilter { */ long getId64Bit(); /** * Get the descriptor of the Filter's FMQ. */ MQDescriptor<byte, SynchronizedReadWrite> getQueueDesc(); /** * Configure the filter. */ void configure(in TunerFilterConfiguration config); /** * Configure the monitor event of the Filter. */ void configureMonitorEvent(in int monitorEventType); /** * Configure the context id of the IP Filter. */ void configureIpFilterContextId(in int cid); /** * Configure the stream type of the media Filter. */ void configureAvStreamType(in int avStreamType); /** * Get the a/v shared memory handle */ Loading @@ -51,6 +73,11 @@ interface ITunerFilter { */ void releaseAvHandle(in NativeHandle handle, in long avDataId); /** * Set the filter's data source. */ void setDataSource(ITunerFilter filter); /** * Start the filter. */ Loading Loading
services/tuner/TunerDemux.cpp +1 −1 Original line number Diff line number Diff line Loading @@ -98,7 +98,7 @@ Status TunerDemux::openFilter( return Status::fromServiceSpecificError(static_cast<int32_t>(status)); } *_aidl_return = ::ndk::SharedRefBase::make<TunerFilter>(filterSp, cbSp); *_aidl_return = ::ndk::SharedRefBase::make<TunerFilter>(filterSp, cbSp, type, subType); return Status::ok(); } Loading
services/tuner/TunerFilter.cpp +115 −1 Original line number Diff line number Diff line Loading @@ -30,17 +30,21 @@ using ::android::hardware::tv::tuner::V1_0::DemuxRecordScIndexType; using ::android::hardware::tv::tuner::V1_0::DemuxStreamId; using ::android::hardware::tv::tuner::V1_0::DemuxTsFilterType; using ::android::hardware::tv::tuner::V1_0::Result; using ::android::hardware::tv::tuner::V1_1::AudioStreamType; using ::android::hardware::tv::tuner::V1_1::Constant; using ::android::hardware::tv::tuner::V1_1::VideoStreamType; namespace android { using namespace std; TunerFilter::TunerFilter( sp<IFilter> filter, sp<IFilterCallback> callback) { sp<IFilter> filter, sp<IFilterCallback> callback, int mainType, int subType) { mFilter = filter; mFilter_1_1 = ::android::hardware::tv::tuner::V1_1::IFilter::castFrom(filter); mFilterCallback = callback; mMainType = mainType; mSubType = subType; } TunerFilter::~TunerFilter() { Loading @@ -49,6 +53,29 @@ TunerFilter::~TunerFilter() { mFilterCallback = nullptr; } Status TunerFilter::getQueueDesc(AidlMQDesc* _aidl_return) { if (mFilter == NULL) { ALOGE("IFilter is not initialized"); return Status::fromServiceSpecificError(static_cast<int32_t>(Result::UNAVAILABLE)); } MQDesc dvrMQDesc; Result res; mFilter->getQueueDesc([&](Result r, const MQDesc& desc) { dvrMQDesc = desc; res = r; }); if (res != Result::SUCCESS) { return Status::fromServiceSpecificError(static_cast<int32_t>(res)); } AidlMQDesc aidlMQDesc; unsafeHidlToAidlMQDescriptor<uint8_t, int8_t, SynchronizedReadWrite>( dvrMQDesc, &aidlMQDesc); *_aidl_return = move(aidlMQDesc); return Status::ok(); } Status TunerFilter::getId(int32_t* _aidl_return) { if (mFilter == nullptr) { ALOGE("IFilter is not initialized"); Loading Loading @@ -122,6 +149,65 @@ Status TunerFilter::configure(const TunerFilterConfiguration& config) { return Status::ok(); } Status TunerFilter::configureMonitorEvent(int monitorEventType) { if (mFilter_1_1 == nullptr) { ALOGE("IFilter_1_1 is not initialized"); return Status::fromServiceSpecificError(static_cast<int32_t>(Result::UNAVAILABLE)); } Result res = mFilter_1_1->configureMonitorEvent(monitorEventType); if (res != Result::SUCCESS) { return Status::fromServiceSpecificError(static_cast<int32_t>(res)); } return Status::ok(); } Status TunerFilter::configureIpFilterContextId(int cid) { if (mFilter_1_1 == nullptr) { ALOGE("IFilter_1_1 is not initialized"); return Status::fromServiceSpecificError(static_cast<int32_t>(Result::UNAVAILABLE)); } Result res = mFilter_1_1->configureIpCid(cid); if (res != Result::SUCCESS) { return Status::fromServiceSpecificError(static_cast<int32_t>(res)); } return Status::ok(); } Status TunerFilter::configureAvStreamType(int avStreamType) { if (mFilter_1_1 == nullptr) { ALOGE("IFilter_1_1 is not initialized"); return Status::fromServiceSpecificError(static_cast<int32_t>(Result::UNAVAILABLE)); } AvStreamType type; if (!getHidlAvStreamType(avStreamType, type)) { return Status::fromServiceSpecificError(static_cast<int32_t>(Result::INVALID_STATE)); } Result res = mFilter_1_1->configureAvStreamType(type); if (res != Result::SUCCESS) { return Status::fromServiceSpecificError(static_cast<int32_t>(res)); } return Status::ok(); } Status TunerFilter::setDataSource(const shared_ptr<ITunerFilter>& filter) { if (mFilter == nullptr) { ALOGE("IFilter is not initialized"); return Status::fromServiceSpecificError(static_cast<int32_t>(Result::UNAVAILABLE)); } ITunerFilter* tunerFilter = filter.get(); sp<IFilter> hidlFilter = static_cast<TunerFilter*>(tunerFilter)->getHalFilter(); Result res = mFilter->setDataSource(hidlFilter); if (res != Result::SUCCESS) { return Status::fromServiceSpecificError(static_cast<int32_t>(res)); } return Status::ok(); } void TunerFilter::getHidlTsSettings( const TunerFilterConfiguration& config, DemuxFilterSettings& settings) { auto tsConf = config.get<TunerFilterConfiguration::ts>(); Loading Loading @@ -468,6 +554,34 @@ sp<IFilter> TunerFilter::getHalFilter() { return mFilter; } bool TunerFilter::isAudioFilter() { return (mMainType == (int)DemuxFilterMainType::TS && mSubType == (int)DemuxTsFilterType::AUDIO) || (mMainType == (int)DemuxFilterMainType::MMTP && mSubType == (int)DemuxMmtpFilterType::AUDIO); } bool TunerFilter::isVideoFilter() { return (mMainType == (int)DemuxFilterMainType::TS && mSubType == (int)DemuxTsFilterType::VIDEO) || (mMainType == (int)DemuxFilterMainType::MMTP && mSubType == (int)DemuxMmtpFilterType::VIDEO); } bool TunerFilter::getHidlAvStreamType(int avStreamType, AvStreamType& type) { if (isAudioFilter()) { type.audio(static_cast<AudioStreamType>(avStreamType)); return true; } if (isVideoFilter()) { type.video(static_cast<VideoStreamType>(avStreamType)); return true; } return false; } /////////////// FilterCallback /////////////////////// Return<void> TunerFilter::FilterCallback::onFilterStatus(DemuxFilterStatus status) { Loading
services/tuner/TunerFilter.h +21 −1 Original line number Diff line number Diff line Loading @@ -25,8 +25,12 @@ #include <android/hardware/tv/tuner/1.1/IFilterCallback.h> #include <android/hardware/tv/tuner/1.1/types.h> #include <media/stagefright/foundation/ADebug.h> #include <fmq/ConvertMQDescriptors.h> #include <fmq/MessageQueue.h> using Status = ::ndk::ScopedAStatus; using ::aidl::android::hardware::common::fmq::MQDescriptor; using ::aidl::android::hardware::common::fmq::SynchronizedReadWrite; using ::aidl::android::media::tv::tuner::BnTunerFilter; using ::aidl::android::media::tv::tuner::ITunerFilterCallback; using ::aidl::android::media::tv::tuner::TunerDemuxIpAddress; Loading @@ -44,6 +48,7 @@ using ::aidl::android::media::tv::tuner::TunerFilterSharedHandleInfo; using ::aidl::android::media::tv::tuner::TunerFilterSettings; using ::aidl::android::media::tv::tuner::TunerFilterTemiEvent; using ::aidl::android::media::tv::tuner::TunerFilterTsRecordEvent; using ::android::hardware::MQDescriptorSync; using ::android::hardware::Return; using ::android::hardware::Void; using ::android::hardware::hidl_array; Loading @@ -70,6 +75,7 @@ using ::android::hardware::tv::tuner::V1_0::DemuxTlvFilterSettings; using ::android::hardware::tv::tuner::V1_0::DemuxTsFilterSettings; using ::android::hardware::tv::tuner::V1_0::DemuxPid; using ::android::hardware::tv::tuner::V1_0::IFilter; using ::android::hardware::tv::tuner::V1_1::AvStreamType; using ::android::hardware::tv::tuner::V1_1::DemuxFilterEventExt; using ::android::hardware::tv::tuner::V1_1::DemuxFilterMonitorEvent; using ::android::hardware::tv::tuner::V1_1::DemuxFilterTsRecordEventExt; Loading @@ -77,20 +83,28 @@ using ::android::hardware::tv::tuner::V1_1::IFilterCallback; namespace android { using MQDesc = MQDescriptorSync<uint8_t>; using AidlMQDesc = MQDescriptor<int8_t, SynchronizedReadWrite>; const static int IP_V4_LENGTH = 4; const static int IP_V6_LENGTH = 16; class TunerFilter : public BnTunerFilter { public: TunerFilter(sp<IFilter> filter, sp<IFilterCallback> callback); TunerFilter(sp<IFilter> filter, sp<IFilterCallback> callback, int mainType, int subTyp); virtual ~TunerFilter(); Status getId(int32_t* _aidl_return) override; Status getId64Bit(int64_t* _aidl_return) override; Status getQueueDesc(AidlMQDesc* _aidl_return) override; Status configure(const TunerFilterConfiguration& config) override; Status configureMonitorEvent(int monitorEventType) override; Status configureIpFilterContextId(int cid) override; Status configureAvStreamType(int avStreamType) override; Status getAvSharedHandleInfo(TunerFilterSharedHandleInfo* _aidl_return) override; Status releaseAvHandle(const ::aidl::android::hardware::common::NativeHandle& handle, int64_t avDataId) override; Status setDataSource(const std::shared_ptr<ITunerFilter>& filter) override; Status start() override; Status stop() override; Status flush() override; Loading Loading @@ -147,6 +161,10 @@ private: DemuxFilterRecordSettings getRecordSettings(const TunerFilterSettings& settings); DemuxFilterDownloadSettings getDownloadSettings(const TunerFilterSettings& settings); bool isAudioFilter(); bool isVideoFilter(); bool getHidlAvStreamType(int avStreamType, AvStreamType& type); void getHidlTsSettings( const TunerFilterConfiguration& config, DemuxFilterSettings& settings); void getHidlMmtpSettings( Loading @@ -166,6 +184,8 @@ private: sp<IFilterCallback> mFilterCallback; int32_t mId; int64_t mId64Bit; int mMainType; int mSubType; }; } // namespace android Loading
services/tuner/aidl/android/media/tv/tuner/ITunerFilter.aidl +27 −0 Original line number Diff line number Diff line Loading @@ -16,6 +16,8 @@ package android.media.tv.tuner; import android.hardware.common.fmq.MQDescriptor; import android.hardware.common.fmq.SynchronizedReadWrite; import android.hardware.common.NativeHandle; import android.media.tv.tuner.TunerFilterConfiguration; import android.media.tv.tuner.TunerFilterSharedHandleInfo; Loading @@ -36,11 +38,31 @@ interface ITunerFilter { */ long getId64Bit(); /** * Get the descriptor of the Filter's FMQ. */ MQDescriptor<byte, SynchronizedReadWrite> getQueueDesc(); /** * Configure the filter. */ void configure(in TunerFilterConfiguration config); /** * Configure the monitor event of the Filter. */ void configureMonitorEvent(in int monitorEventType); /** * Configure the context id of the IP Filter. */ void configureIpFilterContextId(in int cid); /** * Configure the stream type of the media Filter. */ void configureAvStreamType(in int avStreamType); /** * Get the a/v shared memory handle */ Loading @@ -51,6 +73,11 @@ interface ITunerFilter { */ void releaseAvHandle(in NativeHandle handle, in long avDataId); /** * Set the filter's data source. */ void setDataSource(ITunerFilter filter); /** * Start the filter. */ Loading