Loading tv/tuner/1.1/IFilter.hal +11 −0 Original line number Diff line number Diff line Loading @@ -70,4 +70,15 @@ interface IFilter extends @1.0::IFilter { * memory is not initialized. */ getAvSharedHandle() generates (Result result, handle avMemory, uint64_t avMemSize); /** * Configure A/V filter’s stream type. This API only applies to A/V filters. * * @param avStreamType the stream type for A/V. * @return return result Result status of the operation. * SUCCESS if successful, * INVALID_STATE if configure can't be applied, * UNKNOWN_ERROR if failed for other reasons. */ configureAvStreamType(AvStreamType avStreamType) generates (Result result); }; tv/tuner/1.1/default/Filter.cpp +21 −0 Original line number Diff line number Diff line Loading @@ -228,6 +228,27 @@ Return<void> Filter::getAvSharedHandle(getAvSharedHandle_cb _hidl_cb) { return Void(); } Return<Result> Filter::configureAvStreamType(const V1_1::AvStreamType& avStreamType) { ALOGV("%s", __FUNCTION__); if (!mIsMediaFilter) { return Result::UNAVAILABLE; } switch (avStreamType.getDiscriminator()) { case V1_1::AvStreamType::hidl_discriminator::audio: mAudioStreamType = static_cast<uint32_t>(avStreamType.audio()); break; case V1_1::AvStreamType::hidl_discriminator::video: mVideoStreamType = static_cast<uint32_t>(avStreamType.video()); break; default: break; } return Result::SUCCESS; } bool Filter::createFilterMQ() { ALOGV("%s", __FUNCTION__); Loading tv/tuner/1.1/default/Filter.h +5 −0 Original line number Diff line number Diff line Loading @@ -82,6 +82,8 @@ class Filter : public V1_1::IFilter { virtual Return<void> getAvSharedHandle(getAvSharedHandle_cb _hidl_cb) override; virtual Return<Result> configureAvStreamType(const V1_1::AvStreamType& avStreamType) override; /** * To create a FilterMQ and its Event Flag. * Loading Loading @@ -225,6 +227,9 @@ class Filter : public V1_1::IFilter { hidl_handle mSharedAvMemHandle; bool mUsingSharedAvMem = true; uint32_t mSharedAvMemOffset = 0; uint32_t mAudioStreamType; uint32_t mVideoStreamType; }; } // namespace implementation Loading tv/tuner/1.1/types.hal +127 −0 Original line number Diff line number Diff line Loading @@ -568,3 +568,130 @@ safe_union FrontendScanMessageExt1_1 { bool isHighPriority; }; @export enum VideoStreamType : uint32_t { UNDEFINED, /* * ITU-T | ISO/IEC Reserved */ RESERVED, /* * ISO/IEC 11172 */ MPEG1, /* * ITU-T Rec.H.262 and ISO/IEC 13818-2 */ MPEG2, /* * ISO/IEC 14496-2 (MPEG-4 H.263 based video) */ MPEG4P2, /* * ITU-T Rec.H.264 and ISO/IEC 14496-10 */ AVC, /* * ITU-T Rec. H.265 and ISO/IEC 23008-2 */ HEVC, /* * Microsoft VC.1 */ VC1, /* * Google VP8 */ VP8, /* * Google VP9 */ VP9, /* * AOMedia Video 1 */ AV1, /* * Chinese Standard */ AVS, /* * New Chinese Standard */ AVS2, }; @export enum AudioStreamType : uint32_t { UNDEFINED, /* * Uncompressed Audio */ PCM, /* * MPEG Audio Layer III versions */ MP3, /* * ISO/IEC 11172 Audio */ MPEG1, /* * ISO/IEC 13818-3 */ MPEG2, /* * ISO/IEC 23008-3 (MPEG-H Part 3) */ MPEGH, /* * ISO/IEC 14496-3 */ AAC, /* * Dolby Digital */ AC3, /* * Dolby Digital Plus */ EAC3, /* * Dolby AC-4 */ AC4, /* * Basic DTS */ DTS, /* * High Resolution DTS */ DTS_HD, /* * Windows Media Audio */ WMA, /* * Opus Interactive Audio Codec */ OPUS, /* * VORBIS Interactive Audio Codec */ VORBIS, /* * SJ/T 11368-2006 */ DRA, }; /** * Stream type for A/V filter. */ safe_union AvStreamType { VideoStreamType video; AudioStreamType audio; }; tv/tuner/1.1/vts/functional/FilterTests.cpp +14 −0 Original line number Diff line number Diff line Loading @@ -164,6 +164,20 @@ AssertionResult FilterTests::configFilter(DemuxFilterSettings setting, uint64_t return AssertionResult(status == Result::SUCCESS); } AssertionResult FilterTests::configAvFilterStreamType(AvStreamType type, uint64_t filterId) { Result status; EXPECT_TRUE(mFilters[filterId]) << "Test with getNewlyOpenedFilterId first."; sp<android::hardware::tv::tuner::V1_1::IFilter> filter_v1_1 = android::hardware::tv::tuner::V1_1::IFilter::castFrom(mFilters[filterId]); if (filter_v1_1 != NULL) { status = filter_v1_1->configureAvStreamType(type); } else { ALOGW("[vts] Can't cast IFilter into v1_1."); return failure(); } return AssertionResult(status == Result::SUCCESS); } AssertionResult FilterTests::configIpFilterCid(uint32_t ipCid, uint64_t filterId) { Result status; EXPECT_TRUE(mFilters[filterId]) << "Open Ip filter first."; Loading Loading
tv/tuner/1.1/IFilter.hal +11 −0 Original line number Diff line number Diff line Loading @@ -70,4 +70,15 @@ interface IFilter extends @1.0::IFilter { * memory is not initialized. */ getAvSharedHandle() generates (Result result, handle avMemory, uint64_t avMemSize); /** * Configure A/V filter’s stream type. This API only applies to A/V filters. * * @param avStreamType the stream type for A/V. * @return return result Result status of the operation. * SUCCESS if successful, * INVALID_STATE if configure can't be applied, * UNKNOWN_ERROR if failed for other reasons. */ configureAvStreamType(AvStreamType avStreamType) generates (Result result); };
tv/tuner/1.1/default/Filter.cpp +21 −0 Original line number Diff line number Diff line Loading @@ -228,6 +228,27 @@ Return<void> Filter::getAvSharedHandle(getAvSharedHandle_cb _hidl_cb) { return Void(); } Return<Result> Filter::configureAvStreamType(const V1_1::AvStreamType& avStreamType) { ALOGV("%s", __FUNCTION__); if (!mIsMediaFilter) { return Result::UNAVAILABLE; } switch (avStreamType.getDiscriminator()) { case V1_1::AvStreamType::hidl_discriminator::audio: mAudioStreamType = static_cast<uint32_t>(avStreamType.audio()); break; case V1_1::AvStreamType::hidl_discriminator::video: mVideoStreamType = static_cast<uint32_t>(avStreamType.video()); break; default: break; } return Result::SUCCESS; } bool Filter::createFilterMQ() { ALOGV("%s", __FUNCTION__); Loading
tv/tuner/1.1/default/Filter.h +5 −0 Original line number Diff line number Diff line Loading @@ -82,6 +82,8 @@ class Filter : public V1_1::IFilter { virtual Return<void> getAvSharedHandle(getAvSharedHandle_cb _hidl_cb) override; virtual Return<Result> configureAvStreamType(const V1_1::AvStreamType& avStreamType) override; /** * To create a FilterMQ and its Event Flag. * Loading Loading @@ -225,6 +227,9 @@ class Filter : public V1_1::IFilter { hidl_handle mSharedAvMemHandle; bool mUsingSharedAvMem = true; uint32_t mSharedAvMemOffset = 0; uint32_t mAudioStreamType; uint32_t mVideoStreamType; }; } // namespace implementation Loading
tv/tuner/1.1/types.hal +127 −0 Original line number Diff line number Diff line Loading @@ -568,3 +568,130 @@ safe_union FrontendScanMessageExt1_1 { bool isHighPriority; }; @export enum VideoStreamType : uint32_t { UNDEFINED, /* * ITU-T | ISO/IEC Reserved */ RESERVED, /* * ISO/IEC 11172 */ MPEG1, /* * ITU-T Rec.H.262 and ISO/IEC 13818-2 */ MPEG2, /* * ISO/IEC 14496-2 (MPEG-4 H.263 based video) */ MPEG4P2, /* * ITU-T Rec.H.264 and ISO/IEC 14496-10 */ AVC, /* * ITU-T Rec. H.265 and ISO/IEC 23008-2 */ HEVC, /* * Microsoft VC.1 */ VC1, /* * Google VP8 */ VP8, /* * Google VP9 */ VP9, /* * AOMedia Video 1 */ AV1, /* * Chinese Standard */ AVS, /* * New Chinese Standard */ AVS2, }; @export enum AudioStreamType : uint32_t { UNDEFINED, /* * Uncompressed Audio */ PCM, /* * MPEG Audio Layer III versions */ MP3, /* * ISO/IEC 11172 Audio */ MPEG1, /* * ISO/IEC 13818-3 */ MPEG2, /* * ISO/IEC 23008-3 (MPEG-H Part 3) */ MPEGH, /* * ISO/IEC 14496-3 */ AAC, /* * Dolby Digital */ AC3, /* * Dolby Digital Plus */ EAC3, /* * Dolby AC-4 */ AC4, /* * Basic DTS */ DTS, /* * High Resolution DTS */ DTS_HD, /* * Windows Media Audio */ WMA, /* * Opus Interactive Audio Codec */ OPUS, /* * VORBIS Interactive Audio Codec */ VORBIS, /* * SJ/T 11368-2006 */ DRA, }; /** * Stream type for A/V filter. */ safe_union AvStreamType { VideoStreamType video; AudioStreamType audio; };
tv/tuner/1.1/vts/functional/FilterTests.cpp +14 −0 Original line number Diff line number Diff line Loading @@ -164,6 +164,20 @@ AssertionResult FilterTests::configFilter(DemuxFilterSettings setting, uint64_t return AssertionResult(status == Result::SUCCESS); } AssertionResult FilterTests::configAvFilterStreamType(AvStreamType type, uint64_t filterId) { Result status; EXPECT_TRUE(mFilters[filterId]) << "Test with getNewlyOpenedFilterId first."; sp<android::hardware::tv::tuner::V1_1::IFilter> filter_v1_1 = android::hardware::tv::tuner::V1_1::IFilter::castFrom(mFilters[filterId]); if (filter_v1_1 != NULL) { status = filter_v1_1->configureAvStreamType(type); } else { ALOGW("[vts] Can't cast IFilter into v1_1."); return failure(); } return AssertionResult(status == Result::SUCCESS); } AssertionResult FilterTests::configIpFilterCid(uint32_t ipCid, uint64_t filterId) { Result status; EXPECT_TRUE(mFilters[filterId]) << "Open Ip filter first."; Loading