Loading services/audioflinger/PatchPanel.cpp +8 −2 Original line number Diff line number Diff line Loading @@ -227,13 +227,16 @@ status_t AudioFlinger::PatchPanel::createAudioPatch(const struct audio_patch *pa audio_devices_t device = patch->sinks[0].ext.device.type; String8 address = String8(patch->sinks[0].ext.device.address); audio_io_handle_t output = AUDIO_IO_HANDLE_NONE; audio_output_flags_t flags = patch->sinks[0].config_mask & AUDIO_PORT_CONFIG_FLAGS ? patch->sinks[0].flags.output : AUDIO_OUTPUT_FLAG_NONE; sp<ThreadBase> thread = mAudioFlinger.openOutput_l( patch->sinks[0].ext.device.hw_module, &output, &config, device, address, AUDIO_OUTPUT_FLAG_NONE); flags); ALOGV("mAudioFlinger.openOutput_l() returned %p", thread.get()); if (thread == 0) { status = NO_MEMORY; Loading Loading @@ -262,6 +265,9 @@ status_t AudioFlinger::PatchPanel::createAudioPatch(const struct audio_patch *pa } else { config.format = newPatch.mPlayback.thread()->format(); } audio_input_flags_t flags = patch->sources[0].config_mask & AUDIO_PORT_CONFIG_FLAGS ? patch->sources[0].flags.input : AUDIO_INPUT_FLAG_NONE; audio_io_handle_t input = AUDIO_IO_HANDLE_NONE; sp<ThreadBase> thread = mAudioFlinger.openInput_l(srcModule, &input, Loading @@ -269,7 +275,7 @@ status_t AudioFlinger::PatchPanel::createAudioPatch(const struct audio_patch *pa device, address, AUDIO_SOURCE_MIC, AUDIO_INPUT_FLAG_NONE); flags); ALOGV("mAudioFlinger.openInput_l() returned %p inChannelMask %08x", thread.get(), config.channel_mask); if (thread == 0) { Loading services/audioflinger/Threads.cpp +26 −0 Original line number Diff line number Diff line Loading @@ -3792,6 +3792,10 @@ void AudioFlinger::PlaybackThread::toAudioPortConfig(struct audio_port_config *c config->role = AUDIO_PORT_ROLE_SOURCE; config->ext.mix.hw_module = mOutput->audioHwDev->handle(); config->ext.mix.usecase.stream = AUDIO_STREAM_DEFAULT; if (mOutput && mOutput->flags != AUDIO_OUTPUT_FLAG_NONE) { config->config_mask |= AUDIO_PORT_CONFIG_FLAGS; config->flags.output = mOutput->flags; } } // ---------------------------------------------------------------------------- Loading Loading @@ -7898,6 +7902,10 @@ void AudioFlinger::RecordThread::toAudioPortConfig(struct audio_port_config *con config->role = AUDIO_PORT_ROLE_SINK; config->ext.mix.hw_module = mInput->audioHwDev->handle(); config->ext.mix.usecase.source = mAudioSource; if (mInput && mInput->flags != AUDIO_INPUT_FLAG_NONE) { config->config_mask |= AUDIO_PORT_CONFIG_FLAGS; config->flags.input = mInput->flags; } } // ---------------------------------------------------------------------------- Loading Loading @@ -8865,6 +8873,15 @@ void AudioFlinger::MmapPlaybackThread::checkSilentMode_l() } } void AudioFlinger::MmapPlaybackThread::toAudioPortConfig(struct audio_port_config *config) { MmapThread::toAudioPortConfig(config); if (mOutput && mOutput->flags != AUDIO_OUTPUT_FLAG_NONE) { config->config_mask |= AUDIO_PORT_CONFIG_FLAGS; config->flags.output = mOutput->flags; } } void AudioFlinger::MmapPlaybackThread::dumpInternals(int fd, const Vector<String16>& args) { MmapThread::dumpInternals(fd, args); Loading Loading @@ -8955,4 +8972,13 @@ void AudioFlinger::MmapCaptureThread::setRecordSilenced(uid_t uid, bool silenced } } void AudioFlinger::MmapCaptureThread::toAudioPortConfig(struct audio_port_config *config) { MmapThread::toAudioPortConfig(config); if (mInput && mInput->flags != AUDIO_INPUT_FLAG_NONE) { config->config_mask |= AUDIO_PORT_CONFIG_FLAGS; config->flags.input = mInput->flags; } } } // namespace android services/audioflinger/Threads.h +4 −0 Original line number Diff line number Diff line Loading @@ -1679,6 +1679,8 @@ public: void updateMetadata_l() override; virtual void toAudioPortConfig(struct audio_port_config *config); protected: audio_stream_type_t mStreamType; Loading Loading @@ -1707,6 +1709,8 @@ public: void processVolume_l() override; void setRecordSilenced(uid_t uid, bool silenced) override; virtual void toAudioPortConfig(struct audio_port_config *config); protected: AudioStreamIn* mInput; Loading services/audiopolicy/common/managerdefinitions/include/AudioPort.h +5 −7 Original line number Diff line number Diff line Loading @@ -153,9 +153,6 @@ private: class AudioPortConfig : public virtual RefBase { public: AudioPortConfig(); virtual ~AudioPortConfig() {} status_t applyAudioPortConfig(const struct audio_port_config *config, struct audio_port_config *backupConfig = NULL); virtual void toAudioPortConfig(struct audio_port_config *dstConfig, Loading @@ -165,10 +162,11 @@ public: return (other != 0) && (other->getAudioPort()->getModuleHandle() == getAudioPort()->getModuleHandle()); } uint32_t mSamplingRate; audio_format_t mFormat; audio_channel_mask_t mChannelMask; struct audio_gain_config mGain; unsigned int mSamplingRate = 0u; audio_format_t mFormat = AUDIO_FORMAT_INVALID; audio_channel_mask_t mChannelMask = AUDIO_CHANNEL_NONE; struct audio_gain_config mGain = { .index = -1 }; union audio_io_flags mFlags = { AUDIO_INPUT_FLAG_NONE }; }; } // namespace android services/audiopolicy/common/managerdefinitions/src/AudioPort.cpp +34 −32 Original line number Diff line number Diff line Loading @@ -386,15 +386,6 @@ void AudioPort::log(const char* indent) const // --- AudioPortConfig class implementation AudioPortConfig::AudioPortConfig() { mSamplingRate = 0; mChannelMask = AUDIO_CHANNEL_NONE; mFormat = AUDIO_FORMAT_INVALID; memset(&mGain, 0, sizeof(struct audio_gain_config)); mGain.index = -1; } status_t AudioPortConfig::applyAudioPortConfig(const struct audio_port_config *config, struct audio_port_config *backupConfig) { Loading Loading @@ -424,6 +415,9 @@ status_t AudioPortConfig::applyAudioPortConfig(const struct audio_port_config *c if (config->config_mask & AUDIO_PORT_CONFIG_GAIN) { mGain = config->gain; } if (config->config_mask & AUDIO_PORT_CONFIG_FLAGS) { mFlags = config->flags; } exit: if (status != NO_ERROR) { Loading @@ -435,33 +429,38 @@ exit: return status; } void AudioPortConfig::toAudioPortConfig(struct audio_port_config *dstConfig, const struct audio_port_config *srcConfig) const namespace { template<typename T> void updateField( const T& portConfigField, T audio_port_config::*port_config_field, struct audio_port_config *dstConfig, const struct audio_port_config *srcConfig, unsigned int configMask, T defaultValue) { if (dstConfig->config_mask & AUDIO_PORT_CONFIG_SAMPLE_RATE) { dstConfig->sample_rate = mSamplingRate; if ((srcConfig != NULL) && (srcConfig->config_mask & AUDIO_PORT_CONFIG_SAMPLE_RATE)) { dstConfig->sample_rate = srcConfig->sample_rate; } if (dstConfig->config_mask & configMask) { if ((srcConfig != nullptr) && (srcConfig->config_mask & configMask)) { dstConfig->*port_config_field = srcConfig->*port_config_field; } else { dstConfig->sample_rate = 0; } if (dstConfig->config_mask & AUDIO_PORT_CONFIG_CHANNEL_MASK) { dstConfig->channel_mask = mChannelMask; if ((srcConfig != NULL) && (srcConfig->config_mask & AUDIO_PORT_CONFIG_CHANNEL_MASK)) { dstConfig->channel_mask = srcConfig->channel_mask; dstConfig->*port_config_field = portConfigField; } } else { dstConfig->channel_mask = AUDIO_CHANNEL_NONE; dstConfig->*port_config_field = defaultValue; } if (dstConfig->config_mask & AUDIO_PORT_CONFIG_FORMAT) { dstConfig->format = mFormat; if ((srcConfig != NULL) && (srcConfig->config_mask & AUDIO_PORT_CONFIG_FORMAT)) { dstConfig->format = srcConfig->format; } } else { dstConfig->format = AUDIO_FORMAT_INVALID; } } // namespace void AudioPortConfig::toAudioPortConfig(struct audio_port_config *dstConfig, const struct audio_port_config *srcConfig) const { updateField(mSamplingRate, &audio_port_config::sample_rate, dstConfig, srcConfig, AUDIO_PORT_CONFIG_SAMPLE_RATE, 0u); updateField(mChannelMask, &audio_port_config::channel_mask, dstConfig, srcConfig, AUDIO_PORT_CONFIG_CHANNEL_MASK, (audio_channel_mask_t)AUDIO_CHANNEL_NONE); updateField(mFormat, &audio_port_config::format, dstConfig, srcConfig, AUDIO_PORT_CONFIG_FORMAT, AUDIO_FORMAT_INVALID); sp<AudioPort> audioport = getAudioPort(); if ((dstConfig->config_mask & AUDIO_PORT_CONFIG_GAIN) && audioport != NULL) { dstConfig->gain = mGain; Loading @@ -477,6 +476,9 @@ void AudioPortConfig::toAudioPortConfig(struct audio_port_config *dstConfig, } else { dstConfig->config_mask &= ~AUDIO_PORT_CONFIG_GAIN; } updateField(mFlags, &audio_port_config::flags, dstConfig, srcConfig, AUDIO_PORT_CONFIG_FLAGS, { AUDIO_INPUT_FLAG_NONE }); } } // namespace android Loading
services/audioflinger/PatchPanel.cpp +8 −2 Original line number Diff line number Diff line Loading @@ -227,13 +227,16 @@ status_t AudioFlinger::PatchPanel::createAudioPatch(const struct audio_patch *pa audio_devices_t device = patch->sinks[0].ext.device.type; String8 address = String8(patch->sinks[0].ext.device.address); audio_io_handle_t output = AUDIO_IO_HANDLE_NONE; audio_output_flags_t flags = patch->sinks[0].config_mask & AUDIO_PORT_CONFIG_FLAGS ? patch->sinks[0].flags.output : AUDIO_OUTPUT_FLAG_NONE; sp<ThreadBase> thread = mAudioFlinger.openOutput_l( patch->sinks[0].ext.device.hw_module, &output, &config, device, address, AUDIO_OUTPUT_FLAG_NONE); flags); ALOGV("mAudioFlinger.openOutput_l() returned %p", thread.get()); if (thread == 0) { status = NO_MEMORY; Loading Loading @@ -262,6 +265,9 @@ status_t AudioFlinger::PatchPanel::createAudioPatch(const struct audio_patch *pa } else { config.format = newPatch.mPlayback.thread()->format(); } audio_input_flags_t flags = patch->sources[0].config_mask & AUDIO_PORT_CONFIG_FLAGS ? patch->sources[0].flags.input : AUDIO_INPUT_FLAG_NONE; audio_io_handle_t input = AUDIO_IO_HANDLE_NONE; sp<ThreadBase> thread = mAudioFlinger.openInput_l(srcModule, &input, Loading @@ -269,7 +275,7 @@ status_t AudioFlinger::PatchPanel::createAudioPatch(const struct audio_patch *pa device, address, AUDIO_SOURCE_MIC, AUDIO_INPUT_FLAG_NONE); flags); ALOGV("mAudioFlinger.openInput_l() returned %p inChannelMask %08x", thread.get(), config.channel_mask); if (thread == 0) { Loading
services/audioflinger/Threads.cpp +26 −0 Original line number Diff line number Diff line Loading @@ -3792,6 +3792,10 @@ void AudioFlinger::PlaybackThread::toAudioPortConfig(struct audio_port_config *c config->role = AUDIO_PORT_ROLE_SOURCE; config->ext.mix.hw_module = mOutput->audioHwDev->handle(); config->ext.mix.usecase.stream = AUDIO_STREAM_DEFAULT; if (mOutput && mOutput->flags != AUDIO_OUTPUT_FLAG_NONE) { config->config_mask |= AUDIO_PORT_CONFIG_FLAGS; config->flags.output = mOutput->flags; } } // ---------------------------------------------------------------------------- Loading Loading @@ -7898,6 +7902,10 @@ void AudioFlinger::RecordThread::toAudioPortConfig(struct audio_port_config *con config->role = AUDIO_PORT_ROLE_SINK; config->ext.mix.hw_module = mInput->audioHwDev->handle(); config->ext.mix.usecase.source = mAudioSource; if (mInput && mInput->flags != AUDIO_INPUT_FLAG_NONE) { config->config_mask |= AUDIO_PORT_CONFIG_FLAGS; config->flags.input = mInput->flags; } } // ---------------------------------------------------------------------------- Loading Loading @@ -8865,6 +8873,15 @@ void AudioFlinger::MmapPlaybackThread::checkSilentMode_l() } } void AudioFlinger::MmapPlaybackThread::toAudioPortConfig(struct audio_port_config *config) { MmapThread::toAudioPortConfig(config); if (mOutput && mOutput->flags != AUDIO_OUTPUT_FLAG_NONE) { config->config_mask |= AUDIO_PORT_CONFIG_FLAGS; config->flags.output = mOutput->flags; } } void AudioFlinger::MmapPlaybackThread::dumpInternals(int fd, const Vector<String16>& args) { MmapThread::dumpInternals(fd, args); Loading Loading @@ -8955,4 +8972,13 @@ void AudioFlinger::MmapCaptureThread::setRecordSilenced(uid_t uid, bool silenced } } void AudioFlinger::MmapCaptureThread::toAudioPortConfig(struct audio_port_config *config) { MmapThread::toAudioPortConfig(config); if (mInput && mInput->flags != AUDIO_INPUT_FLAG_NONE) { config->config_mask |= AUDIO_PORT_CONFIG_FLAGS; config->flags.input = mInput->flags; } } } // namespace android
services/audioflinger/Threads.h +4 −0 Original line number Diff line number Diff line Loading @@ -1679,6 +1679,8 @@ public: void updateMetadata_l() override; virtual void toAudioPortConfig(struct audio_port_config *config); protected: audio_stream_type_t mStreamType; Loading Loading @@ -1707,6 +1709,8 @@ public: void processVolume_l() override; void setRecordSilenced(uid_t uid, bool silenced) override; virtual void toAudioPortConfig(struct audio_port_config *config); protected: AudioStreamIn* mInput; Loading
services/audiopolicy/common/managerdefinitions/include/AudioPort.h +5 −7 Original line number Diff line number Diff line Loading @@ -153,9 +153,6 @@ private: class AudioPortConfig : public virtual RefBase { public: AudioPortConfig(); virtual ~AudioPortConfig() {} status_t applyAudioPortConfig(const struct audio_port_config *config, struct audio_port_config *backupConfig = NULL); virtual void toAudioPortConfig(struct audio_port_config *dstConfig, Loading @@ -165,10 +162,11 @@ public: return (other != 0) && (other->getAudioPort()->getModuleHandle() == getAudioPort()->getModuleHandle()); } uint32_t mSamplingRate; audio_format_t mFormat; audio_channel_mask_t mChannelMask; struct audio_gain_config mGain; unsigned int mSamplingRate = 0u; audio_format_t mFormat = AUDIO_FORMAT_INVALID; audio_channel_mask_t mChannelMask = AUDIO_CHANNEL_NONE; struct audio_gain_config mGain = { .index = -1 }; union audio_io_flags mFlags = { AUDIO_INPUT_FLAG_NONE }; }; } // namespace android
services/audiopolicy/common/managerdefinitions/src/AudioPort.cpp +34 −32 Original line number Diff line number Diff line Loading @@ -386,15 +386,6 @@ void AudioPort::log(const char* indent) const // --- AudioPortConfig class implementation AudioPortConfig::AudioPortConfig() { mSamplingRate = 0; mChannelMask = AUDIO_CHANNEL_NONE; mFormat = AUDIO_FORMAT_INVALID; memset(&mGain, 0, sizeof(struct audio_gain_config)); mGain.index = -1; } status_t AudioPortConfig::applyAudioPortConfig(const struct audio_port_config *config, struct audio_port_config *backupConfig) { Loading Loading @@ -424,6 +415,9 @@ status_t AudioPortConfig::applyAudioPortConfig(const struct audio_port_config *c if (config->config_mask & AUDIO_PORT_CONFIG_GAIN) { mGain = config->gain; } if (config->config_mask & AUDIO_PORT_CONFIG_FLAGS) { mFlags = config->flags; } exit: if (status != NO_ERROR) { Loading @@ -435,33 +429,38 @@ exit: return status; } void AudioPortConfig::toAudioPortConfig(struct audio_port_config *dstConfig, const struct audio_port_config *srcConfig) const namespace { template<typename T> void updateField( const T& portConfigField, T audio_port_config::*port_config_field, struct audio_port_config *dstConfig, const struct audio_port_config *srcConfig, unsigned int configMask, T defaultValue) { if (dstConfig->config_mask & AUDIO_PORT_CONFIG_SAMPLE_RATE) { dstConfig->sample_rate = mSamplingRate; if ((srcConfig != NULL) && (srcConfig->config_mask & AUDIO_PORT_CONFIG_SAMPLE_RATE)) { dstConfig->sample_rate = srcConfig->sample_rate; } if (dstConfig->config_mask & configMask) { if ((srcConfig != nullptr) && (srcConfig->config_mask & configMask)) { dstConfig->*port_config_field = srcConfig->*port_config_field; } else { dstConfig->sample_rate = 0; } if (dstConfig->config_mask & AUDIO_PORT_CONFIG_CHANNEL_MASK) { dstConfig->channel_mask = mChannelMask; if ((srcConfig != NULL) && (srcConfig->config_mask & AUDIO_PORT_CONFIG_CHANNEL_MASK)) { dstConfig->channel_mask = srcConfig->channel_mask; dstConfig->*port_config_field = portConfigField; } } else { dstConfig->channel_mask = AUDIO_CHANNEL_NONE; dstConfig->*port_config_field = defaultValue; } if (dstConfig->config_mask & AUDIO_PORT_CONFIG_FORMAT) { dstConfig->format = mFormat; if ((srcConfig != NULL) && (srcConfig->config_mask & AUDIO_PORT_CONFIG_FORMAT)) { dstConfig->format = srcConfig->format; } } else { dstConfig->format = AUDIO_FORMAT_INVALID; } } // namespace void AudioPortConfig::toAudioPortConfig(struct audio_port_config *dstConfig, const struct audio_port_config *srcConfig) const { updateField(mSamplingRate, &audio_port_config::sample_rate, dstConfig, srcConfig, AUDIO_PORT_CONFIG_SAMPLE_RATE, 0u); updateField(mChannelMask, &audio_port_config::channel_mask, dstConfig, srcConfig, AUDIO_PORT_CONFIG_CHANNEL_MASK, (audio_channel_mask_t)AUDIO_CHANNEL_NONE); updateField(mFormat, &audio_port_config::format, dstConfig, srcConfig, AUDIO_PORT_CONFIG_FORMAT, AUDIO_FORMAT_INVALID); sp<AudioPort> audioport = getAudioPort(); if ((dstConfig->config_mask & AUDIO_PORT_CONFIG_GAIN) && audioport != NULL) { dstConfig->gain = mGain; Loading @@ -477,6 +476,9 @@ void AudioPortConfig::toAudioPortConfig(struct audio_port_config *dstConfig, } else { dstConfig->config_mask &= ~AUDIO_PORT_CONFIG_GAIN; } updateField(mFlags, &audio_port_config::flags, dstConfig, srcConfig, AUDIO_PORT_CONFIG_FLAGS, { AUDIO_INPUT_FLAG_NONE }); } } // namespace android