Loading audio/core/all-versions/vts/functional/7.0/AudioPrimaryHidlHalTest.cpp +1 −1 Original line number Diff line number Diff line Loading @@ -715,7 +715,7 @@ class PcmOnlyConfigInputStreamTest : public InputStreamTest { sink.base.channelMask.value(getConfig().base.channelMask); sink.ext.mix({}); sink.ext.mix().ioHandle = helper.getIoHandle(); sink.ext.mix().useCase.source(toString(xsd::AudioSource::AUDIO_SOURCE_MIC)); sink.ext.mix().useCase.source(initMetadata.tracks[0].source); EXPECT_OK(getDevice()->createAudioPatch(hidl_vec<AudioPortConfig>{source}, hidl_vec<AudioPortConfig>{sink}, returnIn(res, mPatchHandle))); Loading audio/core/all-versions/vts/functional/AudioPrimaryHidlHalTest.h +10 −3 Original line number Diff line number Diff line Loading @@ -1239,23 +1239,30 @@ class InputStreamTest : public OpenStreamTest<::android::hardware::audio::CORE_TYPES_CPP_VERSION::IStreamIn> { void SetUp() override { ASSERT_NO_FATAL_FAILURE(OpenStreamTest::SetUp()); // setup base auto flags = getInputFlags(); #if MAJOR_VERSION <= 6 address.device = AudioDevice::IN_DEFAULT; #elif MAJOR_VERSION >= 7 auto maybeSourceAddress = getCachedPolicyConfig().getSourceDeviceForMixPort( getDeviceName(), getMixPortName()); auto& metadata = initMetadata.tracks[0]; if (maybeSourceAddress.has_value() && !xsd::isTelephonyDevice(maybeSourceAddress.value().deviceType)) { address = maybeSourceAddress.value(); auto& metadata = initMetadata.tracks[0]; metadata.source = toString(xsd::AudioSource::AUDIO_SOURCE_UNPROCESSED); metadata.channelMask = getConfig().base.channelMask; } else { address.deviceType = toString(xsd::AudioDevice::AUDIO_DEVICE_IN_DEFAULT); } #endif #if MAJOR_VERSION == 7 && MINOR_VERSION >= 1 auto flagsIt = std::find(flags.begin(), flags.end(), toString(xsd::AudioInOutFlag::AUDIO_INPUT_FLAG_ULTRASOUND)); if (flagsIt != flags.end()) { metadata.source = toString(xsd::AudioSource::AUDIO_SOURCE_ULTRASOUND); } #endif // 7.1 #endif // MAJOR_VERSION >= 7 const AudioConfig& config = getConfig(); auto flags = getInputFlags(); testOpen( [&](AudioIoHandle handle, AudioConfig config, auto cb) { return getDevice()->openInputStream(handle, address, config, flags, Loading audio/effect/all-versions/default/Android.bp +2 −0 Original line number Diff line number Diff line Loading @@ -30,6 +30,7 @@ cc_defaults { ], shared_libs: [ "libaudioutils", "libbase", "libcutils", "libeffects", Loading @@ -48,6 +49,7 @@ cc_defaults { "libeffects_headers", "libhardware_headers", "libmedia_headers", "libmediautils_headers", ], } Loading audio/effect/all-versions/default/Effect.cpp +26 −16 Original line number Diff line number Diff line Loading @@ -22,13 +22,11 @@ #include "Effect.h" #include "common/all-versions/default/EffectMap.h" #include <memory.h> #define ATRACE_TAG ATRACE_TAG_AUDIO #include <HidlUtils.h> #include <android/log.h> #include <media/EffectsFactoryApi.h> #include <mediautils/ScopedStatistics.h> #include <util/EffectUtils.h> #include <utils/Trace.h> Loading @@ -49,12 +47,17 @@ using ::android::hardware::audio::common::COMMON_TYPES_CPP_VERSION::implementati namespace { #define SCOPED_STATS() \ ::android::mediautils::ScopedStatistics scopedStatistics { \ std::string("EffectHal::").append(__func__), mEffectHal->mStatistics \ } class ProcessThread : public Thread { public: // ProcessThread's lifespan never exceeds Effect's lifespan. ProcessThread(std::atomic<bool>* stop, effect_handle_t effect, std::atomic<audio_buffer_t*>* inBuffer, std::atomic<audio_buffer_t*>* outBuffer, Effect::StatusMQ* statusMQ, EventFlag* efGroup) Effect::StatusMQ* statusMQ, EventFlag* efGroup, Effect* effectHal) : Thread(false /*canCallJava*/), mStop(stop), mEffect(effect), Loading @@ -62,7 +65,8 @@ class ProcessThread : public Thread { mInBuffer(inBuffer), mOutBuffer(outBuffer), mStatusMQ(statusMQ), mEfGroup(efGroup) {} mEfGroup(efGroup), mEffectHal(effectHal) {} virtual ~ProcessThread() {} private: Loading @@ -73,6 +77,7 @@ class ProcessThread : public Thread { std::atomic<audio_buffer_t*>* mOutBuffer; Effect::StatusMQ* mStatusMQ; EventFlag* mEfGroup; Effect* const mEffectHal; bool threadLoop() override; }; Loading Loading @@ -102,6 +107,9 @@ bool ProcessThread::threadLoop() { audio_buffer_t* outBuffer = std::atomic_load_explicit(mOutBuffer, std::memory_order_relaxed); if (inBuffer != nullptr && outBuffer != nullptr) { // Time this effect process SCOPED_STATS(); if (efState & static_cast<uint32_t>(MessageQueueFlagBits::REQUEST_PROCESS)) { processResult = (*mEffect)->process(mEffect, inBuffer, outBuffer); } else { Loading Loading @@ -359,7 +367,7 @@ Return<void> Effect::prepareForProcessing(prepareForProcessing_cb _hidl_cb) { // Create and launch the thread. mProcessThread = new ProcessThread(&mStopProcessThread, mHandle, &mHalInBufferPtr, &mHalOutBufferPtr, tempStatusMQ.get(), mEfGroup); &mHalOutBufferPtr, tempStatusMQ.get(), mEfGroup, this); status = mProcessThread->run("effect", PRIORITY_URGENT_AUDIO); if (status != OK) { ALOGW("failed to start effect processing thread: %s", strerror(-status)); Loading Loading @@ -749,6 +757,8 @@ Return<void> Effect::debug(const hidl_handle& fd, const hidl_vec<hidl_string>& / if (fd.getNativeHandle() != nullptr && fd->numFds == 1) { uint32_t cmdData = fd->data[0]; (void)sendCommand(EFFECT_CMD_DUMP, "DUMP", sizeof(cmdData), &cmdData); const std::string s = mStatistics->dump(); if (s.size() != 0) write(cmdData, s.c_str(), s.size()); } return Void(); } Loading audio/effect/all-versions/default/Effect.h +6 −1 Original line number Diff line number Diff line Loading @@ -29,6 +29,7 @@ #include <fmq/MessageQueue.h> #include <hidl/MQDescriptor.h> #include <hidl/Status.h> #include <mediautils/MethodStatistics.h> #include <utils/Thread.h> #include <hardware/audio_effect.h> Loading Loading @@ -169,6 +170,10 @@ struct Effect : public IEffect { Result setParameterImpl(uint32_t paramSize, const void* paramData, uint32_t valueSize, const void* valueData); // process execution statistics const std::shared_ptr<mediautils::MethodStatistics<std::string>> mStatistics = std::make_shared<mediautils::MethodStatistics<std::string>>(); private: friend struct VirtualizerEffect; // for getParameterImpl friend struct VisualizerEffect; // to allow executing commands Loading Loading
audio/core/all-versions/vts/functional/7.0/AudioPrimaryHidlHalTest.cpp +1 −1 Original line number Diff line number Diff line Loading @@ -715,7 +715,7 @@ class PcmOnlyConfigInputStreamTest : public InputStreamTest { sink.base.channelMask.value(getConfig().base.channelMask); sink.ext.mix({}); sink.ext.mix().ioHandle = helper.getIoHandle(); sink.ext.mix().useCase.source(toString(xsd::AudioSource::AUDIO_SOURCE_MIC)); sink.ext.mix().useCase.source(initMetadata.tracks[0].source); EXPECT_OK(getDevice()->createAudioPatch(hidl_vec<AudioPortConfig>{source}, hidl_vec<AudioPortConfig>{sink}, returnIn(res, mPatchHandle))); Loading
audio/core/all-versions/vts/functional/AudioPrimaryHidlHalTest.h +10 −3 Original line number Diff line number Diff line Loading @@ -1239,23 +1239,30 @@ class InputStreamTest : public OpenStreamTest<::android::hardware::audio::CORE_TYPES_CPP_VERSION::IStreamIn> { void SetUp() override { ASSERT_NO_FATAL_FAILURE(OpenStreamTest::SetUp()); // setup base auto flags = getInputFlags(); #if MAJOR_VERSION <= 6 address.device = AudioDevice::IN_DEFAULT; #elif MAJOR_VERSION >= 7 auto maybeSourceAddress = getCachedPolicyConfig().getSourceDeviceForMixPort( getDeviceName(), getMixPortName()); auto& metadata = initMetadata.tracks[0]; if (maybeSourceAddress.has_value() && !xsd::isTelephonyDevice(maybeSourceAddress.value().deviceType)) { address = maybeSourceAddress.value(); auto& metadata = initMetadata.tracks[0]; metadata.source = toString(xsd::AudioSource::AUDIO_SOURCE_UNPROCESSED); metadata.channelMask = getConfig().base.channelMask; } else { address.deviceType = toString(xsd::AudioDevice::AUDIO_DEVICE_IN_DEFAULT); } #endif #if MAJOR_VERSION == 7 && MINOR_VERSION >= 1 auto flagsIt = std::find(flags.begin(), flags.end(), toString(xsd::AudioInOutFlag::AUDIO_INPUT_FLAG_ULTRASOUND)); if (flagsIt != flags.end()) { metadata.source = toString(xsd::AudioSource::AUDIO_SOURCE_ULTRASOUND); } #endif // 7.1 #endif // MAJOR_VERSION >= 7 const AudioConfig& config = getConfig(); auto flags = getInputFlags(); testOpen( [&](AudioIoHandle handle, AudioConfig config, auto cb) { return getDevice()->openInputStream(handle, address, config, flags, Loading
audio/effect/all-versions/default/Android.bp +2 −0 Original line number Diff line number Diff line Loading @@ -30,6 +30,7 @@ cc_defaults { ], shared_libs: [ "libaudioutils", "libbase", "libcutils", "libeffects", Loading @@ -48,6 +49,7 @@ cc_defaults { "libeffects_headers", "libhardware_headers", "libmedia_headers", "libmediautils_headers", ], } Loading
audio/effect/all-versions/default/Effect.cpp +26 −16 Original line number Diff line number Diff line Loading @@ -22,13 +22,11 @@ #include "Effect.h" #include "common/all-versions/default/EffectMap.h" #include <memory.h> #define ATRACE_TAG ATRACE_TAG_AUDIO #include <HidlUtils.h> #include <android/log.h> #include <media/EffectsFactoryApi.h> #include <mediautils/ScopedStatistics.h> #include <util/EffectUtils.h> #include <utils/Trace.h> Loading @@ -49,12 +47,17 @@ using ::android::hardware::audio::common::COMMON_TYPES_CPP_VERSION::implementati namespace { #define SCOPED_STATS() \ ::android::mediautils::ScopedStatistics scopedStatistics { \ std::string("EffectHal::").append(__func__), mEffectHal->mStatistics \ } class ProcessThread : public Thread { public: // ProcessThread's lifespan never exceeds Effect's lifespan. ProcessThread(std::atomic<bool>* stop, effect_handle_t effect, std::atomic<audio_buffer_t*>* inBuffer, std::atomic<audio_buffer_t*>* outBuffer, Effect::StatusMQ* statusMQ, EventFlag* efGroup) Effect::StatusMQ* statusMQ, EventFlag* efGroup, Effect* effectHal) : Thread(false /*canCallJava*/), mStop(stop), mEffect(effect), Loading @@ -62,7 +65,8 @@ class ProcessThread : public Thread { mInBuffer(inBuffer), mOutBuffer(outBuffer), mStatusMQ(statusMQ), mEfGroup(efGroup) {} mEfGroup(efGroup), mEffectHal(effectHal) {} virtual ~ProcessThread() {} private: Loading @@ -73,6 +77,7 @@ class ProcessThread : public Thread { std::atomic<audio_buffer_t*>* mOutBuffer; Effect::StatusMQ* mStatusMQ; EventFlag* mEfGroup; Effect* const mEffectHal; bool threadLoop() override; }; Loading Loading @@ -102,6 +107,9 @@ bool ProcessThread::threadLoop() { audio_buffer_t* outBuffer = std::atomic_load_explicit(mOutBuffer, std::memory_order_relaxed); if (inBuffer != nullptr && outBuffer != nullptr) { // Time this effect process SCOPED_STATS(); if (efState & static_cast<uint32_t>(MessageQueueFlagBits::REQUEST_PROCESS)) { processResult = (*mEffect)->process(mEffect, inBuffer, outBuffer); } else { Loading Loading @@ -359,7 +367,7 @@ Return<void> Effect::prepareForProcessing(prepareForProcessing_cb _hidl_cb) { // Create and launch the thread. mProcessThread = new ProcessThread(&mStopProcessThread, mHandle, &mHalInBufferPtr, &mHalOutBufferPtr, tempStatusMQ.get(), mEfGroup); &mHalOutBufferPtr, tempStatusMQ.get(), mEfGroup, this); status = mProcessThread->run("effect", PRIORITY_URGENT_AUDIO); if (status != OK) { ALOGW("failed to start effect processing thread: %s", strerror(-status)); Loading Loading @@ -749,6 +757,8 @@ Return<void> Effect::debug(const hidl_handle& fd, const hidl_vec<hidl_string>& / if (fd.getNativeHandle() != nullptr && fd->numFds == 1) { uint32_t cmdData = fd->data[0]; (void)sendCommand(EFFECT_CMD_DUMP, "DUMP", sizeof(cmdData), &cmdData); const std::string s = mStatistics->dump(); if (s.size() != 0) write(cmdData, s.c_str(), s.size()); } return Void(); } Loading
audio/effect/all-versions/default/Effect.h +6 −1 Original line number Diff line number Diff line Loading @@ -29,6 +29,7 @@ #include <fmq/MessageQueue.h> #include <hidl/MQDescriptor.h> #include <hidl/Status.h> #include <mediautils/MethodStatistics.h> #include <utils/Thread.h> #include <hardware/audio_effect.h> Loading Loading @@ -169,6 +170,10 @@ struct Effect : public IEffect { Result setParameterImpl(uint32_t paramSize, const void* paramData, uint32_t valueSize, const void* valueData); // process execution statistics const std::shared_ptr<mediautils::MethodStatistics<std::string>> mStatistics = std::make_shared<mediautils::MethodStatistics<std::string>>(); private: friend struct VirtualizerEffect; // for getParameterImpl friend struct VisualizerEffect; // to allow executing commands Loading