Loading services/audioflinger/Effects.cpp +31 −9 Original line number Diff line number Diff line Loading @@ -29,7 +29,9 @@ #include <system/audio_effects/effect_visualizer.h> #include <audio_utils/channels.h> #include <audio_utils/primitives.h> #include <media/AudioContainers.h> #include <media/AudioEffect.h> #include <media/AudioDeviceTypeAddr.h> #include <media/audiohal/EffectHalInterface.h> #include <media/audiohal/EffectsFactoryHalInterface.h> #include <mediautils/ServiceUtilities.h> Loading Loading @@ -1229,9 +1231,11 @@ void AudioFlinger::EffectChain::setVolumeForOutput_l(uint32_t left, uint32_t rig } } status_t AudioFlinger::EffectModule::setDevice(audio_devices_t device) status_t AudioFlinger::EffectModule::sendSetAudioDevicesCommand( const AudioDeviceTypeAddrVector &devices, uint32_t cmdCode) { if (device == AUDIO_DEVICE_NONE) { audio_devices_t deviceType = deviceTypesToBitMask(getAudioDeviceTypes(devices)); if (deviceType == AUDIO_DEVICE_NONE) { return NO_ERROR; } Loading @@ -1243,17 +1247,26 @@ status_t AudioFlinger::EffectModule::setDevice(audio_devices_t device) if ((mDescriptor.flags & EFFECT_FLAG_DEVICE_MASK) == EFFECT_FLAG_DEVICE_IND) { status_t cmdStatus; uint32_t size = sizeof(status_t); uint32_t cmd = audio_is_output_devices(device) ? EFFECT_CMD_SET_DEVICE : EFFECT_CMD_SET_INPUT_DEVICE; status = mEffectInterface->command(cmd, // FIXME: use audio device types and addresses when the hal interface is ready. status = mEffectInterface->command(cmdCode, sizeof(uint32_t), &device, &deviceType, &size, &cmdStatus); } return status; } status_t AudioFlinger::EffectModule::setDevices(const AudioDeviceTypeAddrVector &devices) { return sendSetAudioDevicesCommand(devices, EFFECT_CMD_SET_DEVICE); } status_t AudioFlinger::EffectModule::setInputDevice(const AudioDeviceTypeAddr &device) { return sendSetAudioDevicesCommand({device}, EFFECT_CMD_SET_INPUT_DEVICE); } status_t AudioFlinger::EffectModule::setMode(audio_mode_t mode) { Mutex::Autolock _l(mLock); Loading Loading @@ -2288,12 +2301,21 @@ size_t AudioFlinger::EffectChain::removeEffect_l(const sp<EffectModule>& effect, return mEffects.size(); } // setDevice_l() must be called with ThreadBase::mLock held void AudioFlinger::EffectChain::setDevice_l(audio_devices_t device) // setDevices_l() must be called with ThreadBase::mLock held void AudioFlinger::EffectChain::setDevices_l(const AudioDeviceTypeAddrVector &devices) { size_t size = mEffects.size(); for (size_t i = 0; i < size; i++) { mEffects[i]->setDevices(devices); } } // setInputDevice_l() must be called with ThreadBase::mLock held void AudioFlinger::EffectChain::setInputDevice_l(const AudioDeviceTypeAddr &device) { size_t size = mEffects.size(); for (size_t i = 0; i < size; i++) { mEffects[i]->setDevice(device); mEffects[i]->setInputDevice(device); } } Loading services/audioflinger/Effects.h +5 −2 Original line number Diff line number Diff line Loading @@ -109,7 +109,8 @@ public: const effect_descriptor_t& desc() const { return mDescriptor; } wp<EffectChain>& chain() { return mChain; } status_t setDevice(audio_devices_t device); status_t setDevices(const AudioDeviceTypeAddrVector &devices); status_t setInputDevice(const AudioDeviceTypeAddr &device); status_t setVolume(uint32_t *left, uint32_t *right, bool controller); status_t setMode(audio_mode_t mode); status_t setAudioSource(audio_source_t source); Loading Loading @@ -158,6 +159,7 @@ private: status_t start_l(); status_t stop_l(); status_t remove_effect_from_hal_l(); status_t sendSetAudioDevicesCommand(const AudioDeviceTypeAddrVector &devices, uint32_t cmdCode); mutable Mutex mLock; // mutex for process, commands and handles list protection wp<ThreadBase> mThread; // parent thread Loading Loading @@ -350,7 +352,8 @@ public: // FIXME use float to improve the dynamic range bool setVolume_l(uint32_t *left, uint32_t *right, bool force = false); void resetVolume_l(); void setDevice_l(audio_devices_t device); void setDevices_l(const AudioDeviceTypeAddrVector &devices); void setInputDevice_l(const AudioDeviceTypeAddr &device); void setMode_l(audio_mode_t mode); void setAudioSource_l(audio_source_t source); Loading services/audioflinger/Threads.cpp +12 −8 Original line number Diff line number Diff line Loading @@ -1378,8 +1378,8 @@ sp<AudioFlinger::EffectHandle> AudioFlinger::ThreadBase::createEffect_l( effectCreated = true; // FIXME: use vector of device and address when effect interface is ready. effect->setDevice(deviceTypesToBitMask(outDeviceTypes())); effect->setDevice(inDeviceType()); effect->setDevices(outDeviceTypeAddrs()); effect->setInputDevice(inDeviceTypeAddr()); effect->setMode(mAudioFlinger->getMode()); effect->setAudioSource(mAudioSource); } Loading Loading @@ -1495,8 +1495,8 @@ status_t AudioFlinger::ThreadBase::addEffect_l(const sp<EffectModule>& effect) return status; } effect->setDevice(deviceTypesToBitMask(outDeviceTypes())); effect->setDevice(inDeviceType()); effect->setDevices(outDeviceTypeAddrs()); effect->setInputDevice(inDeviceTypeAddr()); effect->setMode(mAudioFlinger->getMode()); effect->setAudioSource(mAudioSource); Loading Loading @@ -4070,7 +4070,7 @@ status_t AudioFlinger::PlaybackThread::createAudioPatch_l(const struct audio_pat #endif for (size_t i = 0; i < mEffectChains.size(); i++) { mEffectChains[i]->setDevice_l(type); mEffectChains[i]->setDevices_l(deviceTypeAddrs); } // mPatch.num_sinks is not set when the thread is created so that Loading Loading @@ -8321,7 +8321,7 @@ status_t AudioFlinger::RecordThread::createAudioPatch_l(const struct audio_patch mInDeviceTypeAddr.mAddress = patch->sources[0].ext.device.address; audio_port_handle_t deviceId = patch->sources[0].id; for (size_t i = 0; i < mEffectChains.size(); i++) { mEffectChains[i]->setDevice_l(mInDeviceTypeAddr.mType); mEffectChains[i]->setInputDevice_l(inDeviceTypeAddr()); } checkBtNrec_l(); Loading Loading @@ -8391,7 +8391,7 @@ void AudioFlinger::RecordThread::updateOutDevices(const DeviceDescriptorBaseVect mOutDevices = outDevices; mOutDeviceTypeAddrs = deviceTypeAddrsFromDescriptors(mOutDevices); for (size_t i = 0; i < mEffectChains.size(); i++) { mEffectChains[i]->setDevice_l(deviceTypesToBitMask(outDeviceTypes())); mEffectChains[i]->setDevices_l(outDeviceTypeAddrs()); } } Loading Loading @@ -8922,7 +8922,11 @@ status_t AudioFlinger::MmapThread::createAudioPatch_l(const struct audio_patch * } for (size_t i = 0; i < mEffectChains.size(); i++) { mEffectChains[i]->setDevice_l(type); if (isOutput()) { mEffectChains[i]->setDevices_l(sinkDeviceTypeAddrs); } else { mEffectChains[i]->setInputDevice_l(sourceDeviceTypeAddr); } } if (!isOutput()) { Loading services/audioflinger/Threads.h +7 −0 Original line number Diff line number Diff line Loading @@ -321,6 +321,13 @@ public: return isOutput() ? outDeviceTypes() : DeviceTypeSet({inDeviceType()}); } const AudioDeviceTypeAddrVector& outDeviceTypeAddrs() const { return mOutDeviceTypeAddrs; } const AudioDeviceTypeAddr& inDeviceTypeAddr() const { return mInDeviceTypeAddr; } virtual bool isOutput() const = 0; virtual sp<StreamHalInterface> stream() const = 0; Loading Loading
services/audioflinger/Effects.cpp +31 −9 Original line number Diff line number Diff line Loading @@ -29,7 +29,9 @@ #include <system/audio_effects/effect_visualizer.h> #include <audio_utils/channels.h> #include <audio_utils/primitives.h> #include <media/AudioContainers.h> #include <media/AudioEffect.h> #include <media/AudioDeviceTypeAddr.h> #include <media/audiohal/EffectHalInterface.h> #include <media/audiohal/EffectsFactoryHalInterface.h> #include <mediautils/ServiceUtilities.h> Loading Loading @@ -1229,9 +1231,11 @@ void AudioFlinger::EffectChain::setVolumeForOutput_l(uint32_t left, uint32_t rig } } status_t AudioFlinger::EffectModule::setDevice(audio_devices_t device) status_t AudioFlinger::EffectModule::sendSetAudioDevicesCommand( const AudioDeviceTypeAddrVector &devices, uint32_t cmdCode) { if (device == AUDIO_DEVICE_NONE) { audio_devices_t deviceType = deviceTypesToBitMask(getAudioDeviceTypes(devices)); if (deviceType == AUDIO_DEVICE_NONE) { return NO_ERROR; } Loading @@ -1243,17 +1247,26 @@ status_t AudioFlinger::EffectModule::setDevice(audio_devices_t device) if ((mDescriptor.flags & EFFECT_FLAG_DEVICE_MASK) == EFFECT_FLAG_DEVICE_IND) { status_t cmdStatus; uint32_t size = sizeof(status_t); uint32_t cmd = audio_is_output_devices(device) ? EFFECT_CMD_SET_DEVICE : EFFECT_CMD_SET_INPUT_DEVICE; status = mEffectInterface->command(cmd, // FIXME: use audio device types and addresses when the hal interface is ready. status = mEffectInterface->command(cmdCode, sizeof(uint32_t), &device, &deviceType, &size, &cmdStatus); } return status; } status_t AudioFlinger::EffectModule::setDevices(const AudioDeviceTypeAddrVector &devices) { return sendSetAudioDevicesCommand(devices, EFFECT_CMD_SET_DEVICE); } status_t AudioFlinger::EffectModule::setInputDevice(const AudioDeviceTypeAddr &device) { return sendSetAudioDevicesCommand({device}, EFFECT_CMD_SET_INPUT_DEVICE); } status_t AudioFlinger::EffectModule::setMode(audio_mode_t mode) { Mutex::Autolock _l(mLock); Loading Loading @@ -2288,12 +2301,21 @@ size_t AudioFlinger::EffectChain::removeEffect_l(const sp<EffectModule>& effect, return mEffects.size(); } // setDevice_l() must be called with ThreadBase::mLock held void AudioFlinger::EffectChain::setDevice_l(audio_devices_t device) // setDevices_l() must be called with ThreadBase::mLock held void AudioFlinger::EffectChain::setDevices_l(const AudioDeviceTypeAddrVector &devices) { size_t size = mEffects.size(); for (size_t i = 0; i < size; i++) { mEffects[i]->setDevices(devices); } } // setInputDevice_l() must be called with ThreadBase::mLock held void AudioFlinger::EffectChain::setInputDevice_l(const AudioDeviceTypeAddr &device) { size_t size = mEffects.size(); for (size_t i = 0; i < size; i++) { mEffects[i]->setDevice(device); mEffects[i]->setInputDevice(device); } } Loading
services/audioflinger/Effects.h +5 −2 Original line number Diff line number Diff line Loading @@ -109,7 +109,8 @@ public: const effect_descriptor_t& desc() const { return mDescriptor; } wp<EffectChain>& chain() { return mChain; } status_t setDevice(audio_devices_t device); status_t setDevices(const AudioDeviceTypeAddrVector &devices); status_t setInputDevice(const AudioDeviceTypeAddr &device); status_t setVolume(uint32_t *left, uint32_t *right, bool controller); status_t setMode(audio_mode_t mode); status_t setAudioSource(audio_source_t source); Loading Loading @@ -158,6 +159,7 @@ private: status_t start_l(); status_t stop_l(); status_t remove_effect_from_hal_l(); status_t sendSetAudioDevicesCommand(const AudioDeviceTypeAddrVector &devices, uint32_t cmdCode); mutable Mutex mLock; // mutex for process, commands and handles list protection wp<ThreadBase> mThread; // parent thread Loading Loading @@ -350,7 +352,8 @@ public: // FIXME use float to improve the dynamic range bool setVolume_l(uint32_t *left, uint32_t *right, bool force = false); void resetVolume_l(); void setDevice_l(audio_devices_t device); void setDevices_l(const AudioDeviceTypeAddrVector &devices); void setInputDevice_l(const AudioDeviceTypeAddr &device); void setMode_l(audio_mode_t mode); void setAudioSource_l(audio_source_t source); Loading
services/audioflinger/Threads.cpp +12 −8 Original line number Diff line number Diff line Loading @@ -1378,8 +1378,8 @@ sp<AudioFlinger::EffectHandle> AudioFlinger::ThreadBase::createEffect_l( effectCreated = true; // FIXME: use vector of device and address when effect interface is ready. effect->setDevice(deviceTypesToBitMask(outDeviceTypes())); effect->setDevice(inDeviceType()); effect->setDevices(outDeviceTypeAddrs()); effect->setInputDevice(inDeviceTypeAddr()); effect->setMode(mAudioFlinger->getMode()); effect->setAudioSource(mAudioSource); } Loading Loading @@ -1495,8 +1495,8 @@ status_t AudioFlinger::ThreadBase::addEffect_l(const sp<EffectModule>& effect) return status; } effect->setDevice(deviceTypesToBitMask(outDeviceTypes())); effect->setDevice(inDeviceType()); effect->setDevices(outDeviceTypeAddrs()); effect->setInputDevice(inDeviceTypeAddr()); effect->setMode(mAudioFlinger->getMode()); effect->setAudioSource(mAudioSource); Loading Loading @@ -4070,7 +4070,7 @@ status_t AudioFlinger::PlaybackThread::createAudioPatch_l(const struct audio_pat #endif for (size_t i = 0; i < mEffectChains.size(); i++) { mEffectChains[i]->setDevice_l(type); mEffectChains[i]->setDevices_l(deviceTypeAddrs); } // mPatch.num_sinks is not set when the thread is created so that Loading Loading @@ -8321,7 +8321,7 @@ status_t AudioFlinger::RecordThread::createAudioPatch_l(const struct audio_patch mInDeviceTypeAddr.mAddress = patch->sources[0].ext.device.address; audio_port_handle_t deviceId = patch->sources[0].id; for (size_t i = 0; i < mEffectChains.size(); i++) { mEffectChains[i]->setDevice_l(mInDeviceTypeAddr.mType); mEffectChains[i]->setInputDevice_l(inDeviceTypeAddr()); } checkBtNrec_l(); Loading Loading @@ -8391,7 +8391,7 @@ void AudioFlinger::RecordThread::updateOutDevices(const DeviceDescriptorBaseVect mOutDevices = outDevices; mOutDeviceTypeAddrs = deviceTypeAddrsFromDescriptors(mOutDevices); for (size_t i = 0; i < mEffectChains.size(); i++) { mEffectChains[i]->setDevice_l(deviceTypesToBitMask(outDeviceTypes())); mEffectChains[i]->setDevices_l(outDeviceTypeAddrs()); } } Loading Loading @@ -8922,7 +8922,11 @@ status_t AudioFlinger::MmapThread::createAudioPatch_l(const struct audio_patch * } for (size_t i = 0; i < mEffectChains.size(); i++) { mEffectChains[i]->setDevice_l(type); if (isOutput()) { mEffectChains[i]->setDevices_l(sinkDeviceTypeAddrs); } else { mEffectChains[i]->setInputDevice_l(sourceDeviceTypeAddr); } } if (!isOutput()) { Loading
services/audioflinger/Threads.h +7 −0 Original line number Diff line number Diff line Loading @@ -321,6 +321,13 @@ public: return isOutput() ? outDeviceTypes() : DeviceTypeSet({inDeviceType()}); } const AudioDeviceTypeAddrVector& outDeviceTypeAddrs() const { return mOutDeviceTypeAddrs; } const AudioDeviceTypeAddr& inDeviceTypeAddr() const { return mInDeviceTypeAddr; } virtual bool isOutput() const = 0; virtual sp<StreamHalInterface> stream() const = 0; Loading