Loading media/libmedia/include/media/MediaMetadataRetrieverInterface.h +1 −1 Original line number Original line Diff line number Diff line Loading @@ -49,7 +49,7 @@ public: int index, int colorFormat, bool metaOnly) = 0; int index, int colorFormat, bool metaOnly) = 0; virtual status_t getFrameAtIndex( virtual status_t getFrameAtIndex( std::vector<VideoFrame*>* frames, std::vector<VideoFrame*>* frames, int frameIndex, int numFrames, int colorFormat, bool metaOnly); int frameIndex, int numFrames, int colorFormat, bool metaOnly) = 0; virtual MediaAlbumArt* extractAlbumArt() = 0; virtual MediaAlbumArt* extractAlbumArt() = 0; virtual const char* extractMetadata(int keyCode) = 0; virtual const char* extractMetadata(int keyCode) = 0; }; }; Loading services/audioflinger/Effects.cpp +79 −84 Original line number Original line Diff line number Diff line Loading @@ -296,6 +296,43 @@ void AudioFlinger::EffectModule::process() const bool auxType = const bool auxType = (mDescriptor.flags & EFFECT_FLAG_TYPE_MASK) == EFFECT_FLAG_TYPE_AUXILIARY; (mDescriptor.flags & EFFECT_FLAG_TYPE_MASK) == EFFECT_FLAG_TYPE_AUXILIARY; // safeInputOutputSampleCount is 0 if the channel count between input and output // buffers do not match. This prevents automatic accumulation or copying between the // input and output effect buffers without an intermediary effect process. // TODO: consider implementing channel conversion. const size_t safeInputOutputSampleCount = inChannelCount != outChannelCount ? 0 : outChannelCount * std::min( mConfig.inputCfg.buffer.frameCount, mConfig.outputCfg.buffer.frameCount); const auto accumulateInputToOutput = [this, safeInputOutputSampleCount]() { #ifdef FLOAT_EFFECT_CHAIN accumulate_float( mConfig.outputCfg.buffer.f32, mConfig.inputCfg.buffer.f32, safeInputOutputSampleCount); #else accumulate_i16( mConfig.outputCfg.buffer.s16, mConfig.inputCfg.buffer.s16, safeInputOutputSampleCount); #endif }; const auto copyInputToOutput = [this, safeInputOutputSampleCount]() { #ifdef FLOAT_EFFECT_CHAIN memcpy( mConfig.outputCfg.buffer.f32, mConfig.inputCfg.buffer.f32, safeInputOutputSampleCount * sizeof(*mConfig.outputCfg.buffer.f32)); #else memcpy( mConfig.outputCfg.buffer.s16, mConfig.inputCfg.buffer.s16, safeInputOutputSampleCount * sizeof(*mConfig.outputCfg.buffer.s16)); #endif }; if (isProcessEnabled()) { if (isProcessEnabled()) { int ret; int ret; if (isProcessImplemented()) { if (isProcessImplemented()) { Loading @@ -308,97 +345,69 @@ void AudioFlinger::EffectModule::process() static_assert(sizeof(float) <= sizeof(int32_t), static_assert(sizeof(float) <= sizeof(int32_t), "in-place conversion requires sizeof(float) <= sizeof(int32_t)"); "in-place conversion requires sizeof(float) <= sizeof(int32_t)"); const int32_t * const p32 = mConfig.inputCfg.buffer.s32; memcpy_to_float_from_q4_27( float * const pFloat = mConfig.inputCfg.buffer.f32; mConfig.inputCfg.buffer.f32, memcpy_to_float_from_q4_27(pFloat, p32, mConfig.inputCfg.buffer.frameCount); } else { memcpy_to_i16_from_q4_27(mConfig.inputCfg.buffer.s16, mConfig.inputCfg.buffer.s32, mConfig.inputCfg.buffer.s32, mConfig.inputCfg.buffer.frameCount); mConfig.inputCfg.buffer.frameCount); } } else #else #endif memcpy_to_i16_from_q4_27(mConfig.inputCfg.buffer.s16, { memcpy_to_i16_from_q4_27( mConfig.inputCfg.buffer.s16, mConfig.inputCfg.buffer.s32, mConfig.inputCfg.buffer.s32, mConfig.inputCfg.buffer.frameCount); mConfig.inputCfg.buffer.frameCount); #endif } } } #ifdef FLOAT_EFFECT_CHAIN #ifdef FLOAT_EFFECT_CHAIN if (mSupportsFloat) { if (!mSupportsFloat) { // convert input to int16_t as effect doesn't support float. ret = mEffectInterface->process(); } else { { // convert input to int16_t as effect doesn't support float. if (!auxType) { if (!auxType) { if (mInConversionBuffer.get() == nullptr) { if (mInConversionBuffer.get() == nullptr) { ALOGW("%s: mInConversionBuffer is null, bypassing", __func__); ALOGW("%s: mInConversionBuffer is null, bypassing", __func__); goto data_bypass; goto data_bypass; } } const float * const pIn = mInBuffer->audioBuffer()->f32; int16_t * const pIn16 = mInConversionBuffer->audioBuffer()->s16; memcpy_to_i16_from_float( memcpy_to_i16_from_float( pIn16, pIn, inChannelCount * mConfig.inputCfg.buffer.frameCount); mInConversionBuffer->audioBuffer()->s16, mInBuffer->audioBuffer()->f32, inChannelCount * mConfig.inputCfg.buffer.frameCount); } } if (mConfig.outputCfg.accessMode == EFFECT_BUFFER_ACCESS_ACCUMULATE) { if (mConfig.outputCfg.accessMode == EFFECT_BUFFER_ACCESS_ACCUMULATE) { if (mOutConversionBuffer.get() == nullptr) { if (mOutConversionBuffer.get() == nullptr) { ALOGW("%s: mOutConversionBuffer is null, bypassing", __func__); ALOGW("%s: mOutConversionBuffer is null, bypassing", __func__); goto data_bypass; goto data_bypass; } } int16_t * const pOut16 = mOutConversionBuffer->audioBuffer()->s16; const float * const pOut = mOutBuffer->audioBuffer()->f32; memcpy_to_i16_from_float( memcpy_to_i16_from_float( pOut16, mOutConversionBuffer->audioBuffer()->s16, pOut, mOutBuffer->audioBuffer()->f32, outChannelCount * mConfig.outputCfg.buffer.frameCount); outChannelCount * mConfig.outputCfg.buffer.frameCount); } } } } #endif ret = mEffectInterface->process(); ret = mEffectInterface->process(); { // convert output back to float. #ifdef FLOAT_EFFECT_CHAIN const int16_t * const pOut16 = mOutConversionBuffer->audioBuffer()->s16; if (!mSupportsFloat) { // convert output int16_t back to float. float * const pOut = mOutBuffer->audioBuffer()->f32; memcpy_to_float_from_i16( memcpy_to_float_from_i16( pOut, pOut16, outChannelCount * mConfig.outputCfg.buffer.frameCount); mOutBuffer->audioBuffer()->f32, } mOutConversionBuffer->audioBuffer()->s16, outChannelCount * mConfig.outputCfg.buffer.frameCount); } } #else ret = mEffectInterface->process(); #endif #endif } else { } else { #ifdef FLOAT_EFFECT_CHAIN #ifdef FLOAT_EFFECT_CHAIN data_bypass: data_bypass: #endif #endif if (!auxType /* aux effects do not require data bypass */ if (!auxType /* aux effects do not require data bypass */ && mConfig.inputCfg.buffer.raw != mConfig.outputCfg.buffer.raw && mConfig.inputCfg.buffer.raw != mConfig.outputCfg.buffer.raw) { && inChannelCount == outChannelCount) { const size_t sampleCount = std::min( mConfig.inputCfg.buffer.frameCount, mConfig.outputCfg.buffer.frameCount) * outChannelCount; #ifdef FLOAT_EFFECT_CHAIN const float * const in = mConfig.inputCfg.buffer.f32; float * const out = mConfig.outputCfg.buffer.f32; if (mConfig.outputCfg.accessMode == EFFECT_BUFFER_ACCESS_ACCUMULATE) { accumulate_float(out, in, sampleCount); } else { memcpy(mConfig.outputCfg.buffer.f32, mConfig.inputCfg.buffer.f32, sampleCount * sizeof(*mConfig.outputCfg.buffer.f32)); } #else const int16_t * const in = mConfig.inputCfg.buffer.s16; int16_t * const out = mConfig.outputCfg.buffer.s16; if (mConfig.outputCfg.accessMode == EFFECT_BUFFER_ACCESS_ACCUMULATE) { if (mConfig.outputCfg.accessMode == EFFECT_BUFFER_ACCESS_ACCUMULATE) { accumulate_i16(out, in, sampleCount); accumulateInputToOutput(); } else { } else { memcpy(mConfig.outputCfg.buffer.s16, mConfig.inputCfg.buffer.s16, copyInputToOutput(); sampleCount * sizeof(*mConfig.outputCfg.buffer.s16)); } } #endif } } ret = -ENODATA; ret = -ENODATA; } } // force transition to IDLE state when engine is ready // force transition to IDLE state when engine is ready if (mState == STOPPED && ret == -ENODATA) { if (mState == STOPPED && ret == -ENODATA) { mDisableWaitCnt = 1; mDisableWaitCnt = 1; Loading @@ -417,21 +426,8 @@ void AudioFlinger::EffectModule::process() // If an insert effect is idle and input buffer is different from output buffer, // If an insert effect is idle and input buffer is different from output buffer, // accumulate input onto output // accumulate input onto output sp<EffectChain> chain = mChain.promote(); sp<EffectChain> chain = mChain.promote(); if (chain != 0 if (chain.get() != nullptr && chain->activeTrackCnt() != 0) { && chain->activeTrackCnt() != 0 accumulateInputToOutput(); && inChannelCount == outChannelCount) { const size_t sampleCount = std::min( mConfig.inputCfg.buffer.frameCount, mConfig.outputCfg.buffer.frameCount) * outChannelCount; #ifdef FLOAT_EFFECT_CHAIN const float * const in = mConfig.inputCfg.buffer.f32; float * const out = mConfig.outputCfg.buffer.f32; accumulate_float(out, in, sampleCount); #else const int16_t * const in = mConfig.inputCfg.buffer.s16; int16_t * const out = mConfig.outputCfg.buffer.s16; accumulate_i16(out, in, sampleCount); #endif } } } } } } Loading Loading @@ -927,7 +923,6 @@ void AudioFlinger::EffectModule::setInBuffer(const sp<EffectBufferHalInterface>& (void)EffectBufferHalInterface::allocate(size, &mInConversionBuffer); (void)EffectBufferHalInterface::allocate(size, &mInConversionBuffer); } } if (mInConversionBuffer.get() != nullptr) { if (mInConversionBuffer.get() != nullptr) { // FIXME: confirm buffer has enough size. mInConversionBuffer->setFrameCount(inFrameCount); mInConversionBuffer->setFrameCount(inFrameCount); mEffectInterface->setInBuffer(mInConversionBuffer); mEffectInterface->setInBuffer(mInConversionBuffer); } else if (size > 0) { } else if (size > 0) { Loading services/audiopolicy/common/managerdefinitions/src/AudioCollections.cpp +4 −6 Original line number Original line Diff line number Diff line Loading @@ -27,14 +27,12 @@ namespace android { sp<AudioPort> AudioPortVector::findByTagName(const String8 &tagName) const sp<AudioPort> AudioPortVector::findByTagName(const String8 &tagName) const { { sp<AudioPort> port = 0; for (const auto& port : *this) { for (size_t i = 0; i < size(); i++) { if (port->getTagName() == tagName) { if (itemAt(i)->getTagName() == tagName) { return port; port = itemAt(i); break; } } } } return port; return nullptr; } } status_t AudioRouteVector::dump(int fd, int spaces) const status_t AudioRouteVector::dump(int fd, int spaces) const Loading services/audiopolicy/common/managerdefinitions/src/AudioPort.cpp +8 −10 Original line number Original line Diff line number Diff line Loading @@ -74,11 +74,11 @@ void AudioPort::toAudioPort(struct audio_port *port) const SortedVector<audio_format_t> flatenedFormats; SortedVector<audio_format_t> flatenedFormats; SampleRateVector flatenedRates; SampleRateVector flatenedRates; ChannelsVector flatenedChannels; ChannelsVector flatenedChannels; for (size_t profileIndex = 0; profileIndex < mProfiles.size(); profileIndex++) { for (const auto& profile : mProfiles) { if (mProfiles[profileIndex]->isValid()) { if (profile->isValid()) { audio_format_t formatToExport = mProfiles[profileIndex]->getFormat(); audio_format_t formatToExport = profile->getFormat(); const SampleRateVector &ratesToExport = mProfiles[profileIndex]->getSampleRates(); const SampleRateVector &ratesToExport = profile->getSampleRates(); const ChannelsVector &channelsToExport = mProfiles[profileIndex]->getChannels(); const ChannelsVector &channelsToExport = profile->getChannels(); if (flatenedFormats.indexOf(formatToExport) < 0) { if (flatenedFormats.indexOf(formatToExport) < 0) { flatenedFormats.add(formatToExport); flatenedFormats.add(formatToExport); Loading Loading @@ -130,14 +130,12 @@ void AudioPort::toAudioPort(struct audio_port *port) const void AudioPort::importAudioPort(const sp<AudioPort>& port, bool force __unused) void AudioPort::importAudioPort(const sp<AudioPort>& port, bool force __unused) { { size_t indexToImport; for (const auto& profileToImport : port->mProfiles) { for (indexToImport = 0; indexToImport < port->mProfiles.size(); indexToImport++) { const sp<AudioProfile> &profileToImport = port->mProfiles[indexToImport]; if (profileToImport->isValid()) { if (profileToImport->isValid()) { // Import only valid port, i.e. valid format, non empty rates and channels masks // Import only valid port, i.e. valid format, non empty rates and channels masks bool hasSameProfile = false; bool hasSameProfile = false; for (size_t profileIndex = 0; profileIndex < mProfiles.size(); profileIndex++) { for (const auto& profile : mProfiles) { if (*mProfiles[profileIndex] == *profileToImport) { if (*profile == *profileToImport) { // never import a profile twice // never import a profile twice hasSameProfile = true; hasSameProfile = true; break; break; Loading services/audiopolicy/common/managerdefinitions/src/AudioProfile.cpp +1 −2 Original line number Original line Diff line number Diff line Loading @@ -233,8 +233,7 @@ status_t AudioProfileVector::checkExactProfile(uint32_t samplingRate, return NO_ERROR; return NO_ERROR; } } for (size_t i = 0; i < size(); i++) { for (const auto& profile : *this) { const sp<AudioProfile> profile = itemAt(i); if (profile->checkExact(samplingRate, channelMask, format) == NO_ERROR) { if (profile->checkExact(samplingRate, channelMask, format) == NO_ERROR) { return NO_ERROR; return NO_ERROR; } } Loading Loading
media/libmedia/include/media/MediaMetadataRetrieverInterface.h +1 −1 Original line number Original line Diff line number Diff line Loading @@ -49,7 +49,7 @@ public: int index, int colorFormat, bool metaOnly) = 0; int index, int colorFormat, bool metaOnly) = 0; virtual status_t getFrameAtIndex( virtual status_t getFrameAtIndex( std::vector<VideoFrame*>* frames, std::vector<VideoFrame*>* frames, int frameIndex, int numFrames, int colorFormat, bool metaOnly); int frameIndex, int numFrames, int colorFormat, bool metaOnly) = 0; virtual MediaAlbumArt* extractAlbumArt() = 0; virtual MediaAlbumArt* extractAlbumArt() = 0; virtual const char* extractMetadata(int keyCode) = 0; virtual const char* extractMetadata(int keyCode) = 0; }; }; Loading
services/audioflinger/Effects.cpp +79 −84 Original line number Original line Diff line number Diff line Loading @@ -296,6 +296,43 @@ void AudioFlinger::EffectModule::process() const bool auxType = const bool auxType = (mDescriptor.flags & EFFECT_FLAG_TYPE_MASK) == EFFECT_FLAG_TYPE_AUXILIARY; (mDescriptor.flags & EFFECT_FLAG_TYPE_MASK) == EFFECT_FLAG_TYPE_AUXILIARY; // safeInputOutputSampleCount is 0 if the channel count between input and output // buffers do not match. This prevents automatic accumulation or copying between the // input and output effect buffers without an intermediary effect process. // TODO: consider implementing channel conversion. const size_t safeInputOutputSampleCount = inChannelCount != outChannelCount ? 0 : outChannelCount * std::min( mConfig.inputCfg.buffer.frameCount, mConfig.outputCfg.buffer.frameCount); const auto accumulateInputToOutput = [this, safeInputOutputSampleCount]() { #ifdef FLOAT_EFFECT_CHAIN accumulate_float( mConfig.outputCfg.buffer.f32, mConfig.inputCfg.buffer.f32, safeInputOutputSampleCount); #else accumulate_i16( mConfig.outputCfg.buffer.s16, mConfig.inputCfg.buffer.s16, safeInputOutputSampleCount); #endif }; const auto copyInputToOutput = [this, safeInputOutputSampleCount]() { #ifdef FLOAT_EFFECT_CHAIN memcpy( mConfig.outputCfg.buffer.f32, mConfig.inputCfg.buffer.f32, safeInputOutputSampleCount * sizeof(*mConfig.outputCfg.buffer.f32)); #else memcpy( mConfig.outputCfg.buffer.s16, mConfig.inputCfg.buffer.s16, safeInputOutputSampleCount * sizeof(*mConfig.outputCfg.buffer.s16)); #endif }; if (isProcessEnabled()) { if (isProcessEnabled()) { int ret; int ret; if (isProcessImplemented()) { if (isProcessImplemented()) { Loading @@ -308,97 +345,69 @@ void AudioFlinger::EffectModule::process() static_assert(sizeof(float) <= sizeof(int32_t), static_assert(sizeof(float) <= sizeof(int32_t), "in-place conversion requires sizeof(float) <= sizeof(int32_t)"); "in-place conversion requires sizeof(float) <= sizeof(int32_t)"); const int32_t * const p32 = mConfig.inputCfg.buffer.s32; memcpy_to_float_from_q4_27( float * const pFloat = mConfig.inputCfg.buffer.f32; mConfig.inputCfg.buffer.f32, memcpy_to_float_from_q4_27(pFloat, p32, mConfig.inputCfg.buffer.frameCount); } else { memcpy_to_i16_from_q4_27(mConfig.inputCfg.buffer.s16, mConfig.inputCfg.buffer.s32, mConfig.inputCfg.buffer.s32, mConfig.inputCfg.buffer.frameCount); mConfig.inputCfg.buffer.frameCount); } } else #else #endif memcpy_to_i16_from_q4_27(mConfig.inputCfg.buffer.s16, { memcpy_to_i16_from_q4_27( mConfig.inputCfg.buffer.s16, mConfig.inputCfg.buffer.s32, mConfig.inputCfg.buffer.s32, mConfig.inputCfg.buffer.frameCount); mConfig.inputCfg.buffer.frameCount); #endif } } } #ifdef FLOAT_EFFECT_CHAIN #ifdef FLOAT_EFFECT_CHAIN if (mSupportsFloat) { if (!mSupportsFloat) { // convert input to int16_t as effect doesn't support float. ret = mEffectInterface->process(); } else { { // convert input to int16_t as effect doesn't support float. if (!auxType) { if (!auxType) { if (mInConversionBuffer.get() == nullptr) { if (mInConversionBuffer.get() == nullptr) { ALOGW("%s: mInConversionBuffer is null, bypassing", __func__); ALOGW("%s: mInConversionBuffer is null, bypassing", __func__); goto data_bypass; goto data_bypass; } } const float * const pIn = mInBuffer->audioBuffer()->f32; int16_t * const pIn16 = mInConversionBuffer->audioBuffer()->s16; memcpy_to_i16_from_float( memcpy_to_i16_from_float( pIn16, pIn, inChannelCount * mConfig.inputCfg.buffer.frameCount); mInConversionBuffer->audioBuffer()->s16, mInBuffer->audioBuffer()->f32, inChannelCount * mConfig.inputCfg.buffer.frameCount); } } if (mConfig.outputCfg.accessMode == EFFECT_BUFFER_ACCESS_ACCUMULATE) { if (mConfig.outputCfg.accessMode == EFFECT_BUFFER_ACCESS_ACCUMULATE) { if (mOutConversionBuffer.get() == nullptr) { if (mOutConversionBuffer.get() == nullptr) { ALOGW("%s: mOutConversionBuffer is null, bypassing", __func__); ALOGW("%s: mOutConversionBuffer is null, bypassing", __func__); goto data_bypass; goto data_bypass; } } int16_t * const pOut16 = mOutConversionBuffer->audioBuffer()->s16; const float * const pOut = mOutBuffer->audioBuffer()->f32; memcpy_to_i16_from_float( memcpy_to_i16_from_float( pOut16, mOutConversionBuffer->audioBuffer()->s16, pOut, mOutBuffer->audioBuffer()->f32, outChannelCount * mConfig.outputCfg.buffer.frameCount); outChannelCount * mConfig.outputCfg.buffer.frameCount); } } } } #endif ret = mEffectInterface->process(); ret = mEffectInterface->process(); { // convert output back to float. #ifdef FLOAT_EFFECT_CHAIN const int16_t * const pOut16 = mOutConversionBuffer->audioBuffer()->s16; if (!mSupportsFloat) { // convert output int16_t back to float. float * const pOut = mOutBuffer->audioBuffer()->f32; memcpy_to_float_from_i16( memcpy_to_float_from_i16( pOut, pOut16, outChannelCount * mConfig.outputCfg.buffer.frameCount); mOutBuffer->audioBuffer()->f32, } mOutConversionBuffer->audioBuffer()->s16, outChannelCount * mConfig.outputCfg.buffer.frameCount); } } #else ret = mEffectInterface->process(); #endif #endif } else { } else { #ifdef FLOAT_EFFECT_CHAIN #ifdef FLOAT_EFFECT_CHAIN data_bypass: data_bypass: #endif #endif if (!auxType /* aux effects do not require data bypass */ if (!auxType /* aux effects do not require data bypass */ && mConfig.inputCfg.buffer.raw != mConfig.outputCfg.buffer.raw && mConfig.inputCfg.buffer.raw != mConfig.outputCfg.buffer.raw) { && inChannelCount == outChannelCount) { const size_t sampleCount = std::min( mConfig.inputCfg.buffer.frameCount, mConfig.outputCfg.buffer.frameCount) * outChannelCount; #ifdef FLOAT_EFFECT_CHAIN const float * const in = mConfig.inputCfg.buffer.f32; float * const out = mConfig.outputCfg.buffer.f32; if (mConfig.outputCfg.accessMode == EFFECT_BUFFER_ACCESS_ACCUMULATE) { accumulate_float(out, in, sampleCount); } else { memcpy(mConfig.outputCfg.buffer.f32, mConfig.inputCfg.buffer.f32, sampleCount * sizeof(*mConfig.outputCfg.buffer.f32)); } #else const int16_t * const in = mConfig.inputCfg.buffer.s16; int16_t * const out = mConfig.outputCfg.buffer.s16; if (mConfig.outputCfg.accessMode == EFFECT_BUFFER_ACCESS_ACCUMULATE) { if (mConfig.outputCfg.accessMode == EFFECT_BUFFER_ACCESS_ACCUMULATE) { accumulate_i16(out, in, sampleCount); accumulateInputToOutput(); } else { } else { memcpy(mConfig.outputCfg.buffer.s16, mConfig.inputCfg.buffer.s16, copyInputToOutput(); sampleCount * sizeof(*mConfig.outputCfg.buffer.s16)); } } #endif } } ret = -ENODATA; ret = -ENODATA; } } // force transition to IDLE state when engine is ready // force transition to IDLE state when engine is ready if (mState == STOPPED && ret == -ENODATA) { if (mState == STOPPED && ret == -ENODATA) { mDisableWaitCnt = 1; mDisableWaitCnt = 1; Loading @@ -417,21 +426,8 @@ void AudioFlinger::EffectModule::process() // If an insert effect is idle and input buffer is different from output buffer, // If an insert effect is idle and input buffer is different from output buffer, // accumulate input onto output // accumulate input onto output sp<EffectChain> chain = mChain.promote(); sp<EffectChain> chain = mChain.promote(); if (chain != 0 if (chain.get() != nullptr && chain->activeTrackCnt() != 0) { && chain->activeTrackCnt() != 0 accumulateInputToOutput(); && inChannelCount == outChannelCount) { const size_t sampleCount = std::min( mConfig.inputCfg.buffer.frameCount, mConfig.outputCfg.buffer.frameCount) * outChannelCount; #ifdef FLOAT_EFFECT_CHAIN const float * const in = mConfig.inputCfg.buffer.f32; float * const out = mConfig.outputCfg.buffer.f32; accumulate_float(out, in, sampleCount); #else const int16_t * const in = mConfig.inputCfg.buffer.s16; int16_t * const out = mConfig.outputCfg.buffer.s16; accumulate_i16(out, in, sampleCount); #endif } } } } } } Loading Loading @@ -927,7 +923,6 @@ void AudioFlinger::EffectModule::setInBuffer(const sp<EffectBufferHalInterface>& (void)EffectBufferHalInterface::allocate(size, &mInConversionBuffer); (void)EffectBufferHalInterface::allocate(size, &mInConversionBuffer); } } if (mInConversionBuffer.get() != nullptr) { if (mInConversionBuffer.get() != nullptr) { // FIXME: confirm buffer has enough size. mInConversionBuffer->setFrameCount(inFrameCount); mInConversionBuffer->setFrameCount(inFrameCount); mEffectInterface->setInBuffer(mInConversionBuffer); mEffectInterface->setInBuffer(mInConversionBuffer); } else if (size > 0) { } else if (size > 0) { Loading
services/audiopolicy/common/managerdefinitions/src/AudioCollections.cpp +4 −6 Original line number Original line Diff line number Diff line Loading @@ -27,14 +27,12 @@ namespace android { sp<AudioPort> AudioPortVector::findByTagName(const String8 &tagName) const sp<AudioPort> AudioPortVector::findByTagName(const String8 &tagName) const { { sp<AudioPort> port = 0; for (const auto& port : *this) { for (size_t i = 0; i < size(); i++) { if (port->getTagName() == tagName) { if (itemAt(i)->getTagName() == tagName) { return port; port = itemAt(i); break; } } } } return port; return nullptr; } } status_t AudioRouteVector::dump(int fd, int spaces) const status_t AudioRouteVector::dump(int fd, int spaces) const Loading
services/audiopolicy/common/managerdefinitions/src/AudioPort.cpp +8 −10 Original line number Original line Diff line number Diff line Loading @@ -74,11 +74,11 @@ void AudioPort::toAudioPort(struct audio_port *port) const SortedVector<audio_format_t> flatenedFormats; SortedVector<audio_format_t> flatenedFormats; SampleRateVector flatenedRates; SampleRateVector flatenedRates; ChannelsVector flatenedChannels; ChannelsVector flatenedChannels; for (size_t profileIndex = 0; profileIndex < mProfiles.size(); profileIndex++) { for (const auto& profile : mProfiles) { if (mProfiles[profileIndex]->isValid()) { if (profile->isValid()) { audio_format_t formatToExport = mProfiles[profileIndex]->getFormat(); audio_format_t formatToExport = profile->getFormat(); const SampleRateVector &ratesToExport = mProfiles[profileIndex]->getSampleRates(); const SampleRateVector &ratesToExport = profile->getSampleRates(); const ChannelsVector &channelsToExport = mProfiles[profileIndex]->getChannels(); const ChannelsVector &channelsToExport = profile->getChannels(); if (flatenedFormats.indexOf(formatToExport) < 0) { if (flatenedFormats.indexOf(formatToExport) < 0) { flatenedFormats.add(formatToExport); flatenedFormats.add(formatToExport); Loading Loading @@ -130,14 +130,12 @@ void AudioPort::toAudioPort(struct audio_port *port) const void AudioPort::importAudioPort(const sp<AudioPort>& port, bool force __unused) void AudioPort::importAudioPort(const sp<AudioPort>& port, bool force __unused) { { size_t indexToImport; for (const auto& profileToImport : port->mProfiles) { for (indexToImport = 0; indexToImport < port->mProfiles.size(); indexToImport++) { const sp<AudioProfile> &profileToImport = port->mProfiles[indexToImport]; if (profileToImport->isValid()) { if (profileToImport->isValid()) { // Import only valid port, i.e. valid format, non empty rates and channels masks // Import only valid port, i.e. valid format, non empty rates and channels masks bool hasSameProfile = false; bool hasSameProfile = false; for (size_t profileIndex = 0; profileIndex < mProfiles.size(); profileIndex++) { for (const auto& profile : mProfiles) { if (*mProfiles[profileIndex] == *profileToImport) { if (*profile == *profileToImport) { // never import a profile twice // never import a profile twice hasSameProfile = true; hasSameProfile = true; break; break; Loading
services/audiopolicy/common/managerdefinitions/src/AudioProfile.cpp +1 −2 Original line number Original line Diff line number Diff line Loading @@ -233,8 +233,7 @@ status_t AudioProfileVector::checkExactProfile(uint32_t samplingRate, return NO_ERROR; return NO_ERROR; } } for (size_t i = 0; i < size(); i++) { for (const auto& profile : *this) { const sp<AudioProfile> profile = itemAt(i); if (profile->checkExact(samplingRate, channelMask, format) == NO_ERROR) { if (profile->checkExact(samplingRate, channelMask, format) == NO_ERROR) { return NO_ERROR; return NO_ERROR; } } Loading