Merge "Use the new audio_port_config.flags field"

gugelfrei
TreeHugger Robot 6 years ago committed by Android (Google) Code Review
commit 1ee5077f7b

@ -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;
@ -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,
@ -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) {

@ -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;
}
}
// ----------------------------------------------------------------------------
@ -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;
}
}
// ----------------------------------------------------------------------------
@ -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);
@ -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

@ -1679,6 +1679,8 @@ public:
void updateMetadata_l() override;
virtual void toAudioPortConfig(struct audio_port_config *config);
protected:
audio_stream_type_t mStreamType;
@ -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;

@ -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,
@ -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

@ -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)
{
@ -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) {
@ -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->*port_config_field = portConfigField;
}
} 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;
}
} else {
dstConfig->channel_mask = AUDIO_CHANNEL_NONE;
}
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;
dstConfig->*port_config_field = defaultValue;
}
}
} // 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;
@ -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…
Cancel
Save