diff options
author | Dima Zavin <dima@android.com> | 2011-04-19 22:30:36 -0700 |
---|---|---|
committer | Dima Zavin <dima@android.com> | 2011-04-27 13:10:10 -0700 |
commit | fce7a473248381cc83a01855f92581077d3c9ee2 (patch) | |
tree | e002e1edd8a11f2be56ce9538ab1b13aa289bc9e /services/audioflinger/AudioFlinger.cpp | |
parent | db5cb14318bb24cd6ea14ff7ceea0d5e1f83d903 (diff) | |
download | frameworks_av-fce7a473248381cc83a01855f92581077d3c9ee2.zip frameworks_av-fce7a473248381cc83a01855f92581077d3c9ee2.tar.gz frameworks_av-fce7a473248381cc83a01855f92581077d3c9ee2.tar.bz2 |
audio/media: convert to using the audio HAL and new audio defs
Change-Id: Ibc637918637329e4f2b62f4ac7781102fbc269f5
Signed-off-by: Dima Zavin <dima@android.com>
Diffstat (limited to 'services/audioflinger/AudioFlinger.cpp')
-rw-r--r-- | services/audioflinger/AudioFlinger.cpp | 402 |
1 files changed, 222 insertions, 180 deletions
diff --git a/services/audioflinger/AudioFlinger.cpp b/services/audioflinger/AudioFlinger.cpp index 04cfa08..301f467 100644 --- a/services/audioflinger/AudioFlinger.cpp +++ b/services/audioflinger/AudioFlinger.cpp @@ -33,6 +33,7 @@ #include <utils/threads.h> #include <utils/Atomic.h> +#include <cutils/bitops.h> #include <cutils/properties.h> #include <media/AudioTrack.h> @@ -41,15 +42,13 @@ #include <private/media/AudioTrackShared.h> #include <private/media/AudioEffectShared.h> -#include <hardware_legacy/AudioHardwareInterface.h> + +#include <hardware/audio.h> +#include <hardware/audio_hal.h> #include "AudioMixer.h" #include "AudioFlinger.h" -#ifdef WITH_A2DP -#include "A2dpAudioInterface.h" -#endif - #include <media/EffectsFactoryApi.h> #include <media/EffectVisualizerApi.h> @@ -141,22 +140,37 @@ static void addBatteryData(uint32_t params) { AudioFlinger::AudioFlinger() : BnAudioFlinger(), - mAudioHardware(0), mMasterVolume(1.0f), mMasterMute(false), mNextUniqueId(1) + mAudioHardwareDev(0), mMasterVolume(1.0f), mMasterMute(false), mNextUniqueId(1) { + const hw_module_t *module; + int rc; + char mod_name[PATH_MAX]; + Mutex::Autolock _l(mLock); mHardwareStatus = AUDIO_HW_IDLE; - mAudioHardware = AudioHardwareInterface::create(); + /* get the audio hw module and create an audio_hw device */ + snprintf(mod_name, PATH_MAX, "%s.%s", AUDIO_HARDWARE_MODULE_ID, "primary"); + rc = hw_get_module(mod_name, &module); + if (rc) + return; + + rc = audio_hw_device_open(module, &mAudioHardwareDev); + LOGE_IF(rc, "couldn't open audio hw device (%s)", strerror(-rc)); + if (rc) + return; mHardwareStatus = AUDIO_HW_INIT; - if (mAudioHardware->initCheck() == NO_ERROR) { + + rc = mAudioHardwareDev->init_check(mAudioHardwareDev); + if (rc == 0) { AutoMutex lock(mHardwareLock); - mMode = AudioSystem::MODE_NORMAL; + mMode = AUDIO_MODE_NORMAL; mHardwareStatus = AUDIO_HW_SET_MODE; - mAudioHardware->setMode(mMode); + mAudioHardwareDev->set_mode(mAudioHardwareDev, mMode); mHardwareStatus = AUDIO_HW_SET_MASTER_VOLUME; - mAudioHardware->setMasterVolume(1.0f); + mAudioHardwareDev->set_master_volume(mAudioHardwareDev, 1.0f); mHardwareStatus = AUDIO_HW_IDLE; } else { LOGE("Couldn't even initialize the stubbed audio hardware!"); @@ -173,8 +187,8 @@ AudioFlinger::~AudioFlinger() // closeOutput() will remove first entry from mPlaybackThreads closeOutput(mPlaybackThreads.keyAt(0)); } - if (mAudioHardware) { - delete mAudioHardware; + if (mAudioHardwareDev) { + audio_hw_device_close(mAudioHardwareDev); } } @@ -277,8 +291,8 @@ status_t AudioFlinger::dump(int fd, const Vector<String16>& args) mRecordThreads.valueAt(i)->dump(fd, args); } - if (mAudioHardware) { - mAudioHardware->dumpState(fd, args); + if (mAudioHardwareDev) { + mAudioHardwareDev->dump(mAudioHardwareDev, fd); } if (locked) mLock.unlock(); } @@ -309,7 +323,7 @@ sp<IAudioTrack> AudioFlinger::createTrack( status_t lStatus; int lSessionId; - if (streamType >= AudioSystem::NUM_STREAM_TYPES) { + if (streamType >= AUDIO_STREAM_CNT) { LOGE("invalid stream type"); lStatus = BAD_VALUE; goto Exit; @@ -335,7 +349,7 @@ sp<IAudioTrack> AudioFlinger::createTrack( } LOGV("createTrack() sessionId: %d", (sessionId == NULL) ? -2 : *sessionId); - if (sessionId != NULL && *sessionId != AudioSystem::SESSION_OUTPUT_MIX) { + if (sessionId != NULL && *sessionId != AUDIO_SESSION_OUTPUT_MIX) { for (size_t i = 0; i < mPlaybackThreads.size(); i++) { sp<PlaybackThread> t = mPlaybackThreads.valueAt(i); if (mPlaybackThreads.keyAt(i) != output) { @@ -454,7 +468,7 @@ status_t AudioFlinger::setMasterVolume(float value) { // scope for the lock AutoMutex lock(mHardwareLock); mHardwareStatus = AUDIO_HW_SET_MASTER_VOLUME; - if (mAudioHardware->setMasterVolume(value) == NO_ERROR) { + if (mAudioHardwareDev->set_master_volume(mAudioHardwareDev, value) == NO_ERROR) { value = 1.0f; } mHardwareStatus = AUDIO_HW_IDLE; @@ -476,7 +490,7 @@ status_t AudioFlinger::setMode(int mode) if (!settingsAllowed()) { return PERMISSION_DENIED; } - if ((mode < 0) || (mode >= AudioSystem::NUM_MODES)) { + if ((mode < 0) || (mode >= AUDIO_MODE_CNT)) { LOGW("Illegal value: setMode(%d)", mode); return BAD_VALUE; } @@ -484,7 +498,7 @@ status_t AudioFlinger::setMode(int mode) { // scope for the lock AutoMutex lock(mHardwareLock); mHardwareStatus = AUDIO_HW_SET_MODE; - ret = mAudioHardware->setMode(mode); + ret = mAudioHardwareDev->set_mode(mAudioHardwareDev, mode); mHardwareStatus = AUDIO_HW_IDLE; } @@ -507,16 +521,16 @@ status_t AudioFlinger::setMicMute(bool state) AutoMutex lock(mHardwareLock); mHardwareStatus = AUDIO_HW_SET_MIC_MUTE; - status_t ret = mAudioHardware->setMicMute(state); + status_t ret = mAudioHardwareDev->set_mic_mute(mAudioHardwareDev, state); mHardwareStatus = AUDIO_HW_IDLE; return ret; } bool AudioFlinger::getMicMute() const { - bool state = AudioSystem::MODE_INVALID; + bool state = AUDIO_MODE_INVALID; mHardwareStatus = AUDIO_HW_GET_MIC_MUTE; - mAudioHardware->getMicMute(&state); + mAudioHardwareDev->get_mic_mute(mAudioHardwareDev, &state); mHardwareStatus = AUDIO_HW_IDLE; return state; } @@ -553,7 +567,7 @@ status_t AudioFlinger::setStreamVolume(int stream, float value, int output) return PERMISSION_DENIED; } - if (stream < 0 || uint32_t(stream) >= AudioSystem::NUM_STREAM_TYPES) { + if (stream < 0 || uint32_t(stream) >= AUDIO_STREAM_CNT) { return BAD_VALUE; } @@ -586,8 +600,8 @@ status_t AudioFlinger::setStreamMute(int stream, bool muted) return PERMISSION_DENIED; } - if (stream < 0 || uint32_t(stream) >= AudioSystem::NUM_STREAM_TYPES || - uint32_t(stream) == AudioSystem::ENFORCED_AUDIBLE) { + if (stream < 0 || uint32_t(stream) >= AUDIO_STREAM_CNT || + uint32_t(stream) == AUDIO_STREAM_ENFORCED_AUDIBLE) { return BAD_VALUE; } @@ -601,7 +615,7 @@ status_t AudioFlinger::setStreamMute(int stream, bool muted) float AudioFlinger::streamVolume(int stream, int output) const { - if (stream < 0 || uint32_t(stream) >= AudioSystem::NUM_STREAM_TYPES) { + if (stream < 0 || uint32_t(stream) >= AUDIO_STREAM_CNT) { return 0.0f; } @@ -622,7 +636,7 @@ float AudioFlinger::streamVolume(int stream, int output) const bool AudioFlinger::streamMute(int stream) const { - if (stream < 0 || stream >= (int)AudioSystem::NUM_STREAM_TYPES) { + if (stream < 0 || stream >= (int)AUDIO_STREAM_CNT) { return true; } @@ -644,7 +658,7 @@ status_t AudioFlinger::setParameters(int ioHandle, const String8& keyValuePairs) if (ioHandle == 0) { AutoMutex lock(mHardwareLock); mHardwareStatus = AUDIO_SET_PARAMETER; - result = mAudioHardware->setParameters(keyValuePairs); + result = mAudioHardwareDev->set_parameters(mAudioHardwareDev, keyValuePairs.string()); mHardwareStatus = AUDIO_HW_IDLE; return result; } @@ -672,7 +686,13 @@ String8 AudioFlinger::getParameters(int ioHandle, const String8& keys) // ioHandle, keys.string(), gettid(), IPCThreadState::self()->getCallingPid()); if (ioHandle == 0) { - return mAudioHardware->getParameters(keys); + char *s; + String8 out_s8; + + s = mAudioHardwareDev->get_parameters(mAudioHardwareDev, keys.string()); + out_s8 = String8(s); + free(s); + return out_s8; } Mutex::Autolock _l(mLock); @@ -690,7 +710,7 @@ String8 AudioFlinger::getParameters(int ioHandle, const String8& keys) size_t AudioFlinger::getInputBufferSize(uint32_t sampleRate, int format, int channelCount) { - return mAudioHardware->getInputBufferSize(sampleRate, format, channelCount); + return mAudioHardwareDev->get_input_buffer_size(mAudioHardwareDev, sampleRate, format, channelCount); } unsigned int AudioFlinger::getInputFramesLost(int ioHandle) @@ -717,7 +737,7 @@ status_t AudioFlinger::setVoiceVolume(float value) AutoMutex lock(mHardwareLock); mHardwareStatus = AUDIO_SET_VOICE_VOLUME; - status_t ret = mAudioHardware->setVoiceVolume(value); + status_t ret = mAudioHardwareDev->set_voice_volume(mAudioHardwareDev, value); mHardwareStatus = AUDIO_HW_IDLE; return ret; @@ -957,7 +977,7 @@ status_t AudioFlinger::ThreadBase::dumpBase(int fd, const Vector<String16>& args // ---------------------------------------------------------------------------- -AudioFlinger::PlaybackThread::PlaybackThread(const sp<AudioFlinger>& audioFlinger, AudioStreamOut* output, int id, uint32_t device) +AudioFlinger::PlaybackThread::PlaybackThread(const sp<AudioFlinger>& audioFlinger, struct audio_stream_out* output, int id, uint32_t device) : ThreadBase(audioFlinger, id), mMixBuffer(0), mSuspended(0), mBytesWritten(0), mOutput(output), mLastWriteTime(0), mNumWrites(0), mNumDelayedWrites(0), mInWrite(false), @@ -968,7 +988,7 @@ AudioFlinger::PlaybackThread::PlaybackThread(const sp<AudioFlinger>& audioFlinge mMasterVolume = mAudioFlinger->masterVolume(); mMasterMute = mAudioFlinger->masterMute(); - for (int stream = 0; stream < AudioSystem::NUM_STREAM_TYPES; stream++) { + for (int stream = 0; stream < AUDIO_STREAM_CNT; stream++) { mStreamTypes[stream].volume = mAudioFlinger->streamVolumeInternal(stream); mStreamTypes[stream].mute = mAudioFlinger->streamMute(stream); } @@ -1131,12 +1151,12 @@ sp<AudioFlinger::PlaybackThread::Track> AudioFlinger::PlaybackThread::createTra // conflicts will happen when tracks are moved from one output to another by audio policy // manager uint32_t strategy = - AudioSystem::getStrategyForStream((AudioSystem::stream_type)streamType); + AudioSystem::getStrategyForStream((audio_stream_type_t)streamType); for (size_t i = 0; i < mTracks.size(); ++i) { sp<Track> t = mTracks[i]; if (t != 0) { if (sessionId == t->sessionId() && - strategy != AudioSystem::getStrategyForStream((AudioSystem::stream_type)t->type())) { + strategy != AudioSystem::getStrategyForStream((audio_stream_type_t)t->type())) { lStatus = BAD_VALUE; goto Exit; } @@ -1155,7 +1175,7 @@ sp<AudioFlinger::PlaybackThread::Track> AudioFlinger::PlaybackThread::createTra if (chain != 0) { LOGV("createTrack_l() setting main buffer %p", chain->inBuffer()); track->setMainBuffer(chain->inBuffer()); - chain->setStrategy(AudioSystem::getStrategyForStream((AudioSystem::stream_type)track->type())); + chain->setStrategy(AudioSystem::getStrategyForStream((audio_stream_type_t)track->type())); } } lStatus = NO_ERROR; @@ -1170,7 +1190,7 @@ Exit: uint32_t AudioFlinger::PlaybackThread::latency() const { if (mOutput) { - return mOutput->latency(); + return mOutput->get_latency(mOutput); } else { return 0; @@ -1264,7 +1284,13 @@ void AudioFlinger::PlaybackThread::destroyTrack_l(const sp<Track>& track) String8 AudioFlinger::PlaybackThread::getParameters(const String8& keys) { - return mOutput->getParameters(keys); + String8 out_s8; + char *s; + + s = mOutput->common.get_parameters(&mOutput->common, keys.string()); + out_s8 = String8(s); + free(s); + return out_s8; } // destroyTrack_l() must be called with AudioFlinger::mLock held @@ -1296,12 +1322,12 @@ void AudioFlinger::PlaybackThread::audioConfigChanged_l(int event, int param) { void AudioFlinger::PlaybackThread::readOutputParameters() { - mSampleRate = mOutput->sampleRate(); - mChannels = mOutput->channels(); - mChannelCount = (uint16_t)AudioSystem::popCount(mChannels); - mFormat = mOutput->format(); - mFrameSize = (uint16_t)mOutput->frameSize(); - mFrameCount = mOutput->bufferSize() / mFrameSize; + mSampleRate = mOutput->common.get_sample_rate(&mOutput->common); + mChannels = mOutput->common.get_channels(&mOutput->common); + mChannelCount = (uint16_t)popcount(mChannels); + mFormat = mOutput->common.get_format(&mOutput->common); + mFrameSize = (uint16_t)audio_stream_frame_size(&mOutput->common); + mFrameCount = mOutput->common.get_buffer_size(&mOutput->common) / mFrameSize; // FIXME - Current mixer implementation only supports stereo output: Always // Allocate a stereo buffer even if HW output is mono. @@ -1329,9 +1355,9 @@ status_t AudioFlinger::PlaybackThread::getRenderPosition(uint32_t *halFrames, ui if (mOutput == 0) { return INVALID_OPERATION; } - *halFrames = mBytesWritten/mOutput->frameSize(); + *halFrames = mBytesWritten / audio_stream_frame_size(&mOutput->common); - return mOutput->getRenderPosition(dspFrames); + return mOutput->get_render_position(mOutput, dspFrames); } uint32_t AudioFlinger::PlaybackThread::hasAudioSession(int sessionId) @@ -1356,19 +1382,19 @@ uint32_t AudioFlinger::PlaybackThread::hasAudioSession(int sessionId) uint32_t AudioFlinger::PlaybackThread::getStrategyForSession_l(int sessionId) { - // session AudioSystem::SESSION_OUTPUT_MIX is placed in same strategy as MUSIC stream so that + // session AUDIO_SESSION_OUTPUT_MIX is placed in same strategy as MUSIC stream so that // it is moved to correct output by audio policy manager when A2DP is connected or disconnected - if (sessionId == AudioSystem::SESSION_OUTPUT_MIX) { - return AudioSystem::getStrategyForStream(AudioSystem::MUSIC); + if (sessionId == AUDIO_SESSION_OUTPUT_MIX) { + return AudioSystem::getStrategyForStream(AUDIO_STREAM_MUSIC); } for (size_t i = 0; i < mTracks.size(); i++) { sp<Track> track = mTracks[i]; if (sessionId == track->sessionId() && !(track->mCblk->flags & CBLK_INVALID_MSK)) { - return AudioSystem::getStrategyForStream((AudioSystem::stream_type) track->type()); + return AudioSystem::getStrategyForStream((audio_stream_type_t) track->type()); } } - return AudioSystem::getStrategyForStream(AudioSystem::MUSIC); + return AudioSystem::getStrategyForStream(AUDIO_STREAM_MUSIC); } sp<AudioFlinger::EffectChain> AudioFlinger::PlaybackThread::getEffectChain(int sessionId) @@ -1402,7 +1428,7 @@ void AudioFlinger::PlaybackThread::setMode(uint32_t mode) // ---------------------------------------------------------------------------- -AudioFlinger::MixerThread::MixerThread(const sp<AudioFlinger>& audioFlinger, AudioStreamOut* output, int id, uint32_t device) +AudioFlinger::MixerThread::MixerThread(const sp<AudioFlinger>& audioFlinger, struct audio_stream_out* output, int id, uint32_t device) : PlaybackThread(audioFlinger, output, id, device), mAudioMixer(0) { @@ -1461,7 +1487,7 @@ bool AudioFlinger::MixerThread::threadLoop() mSuspended) { if (!mStandby) { LOGV("Audio hardware entering standby, mixer %p, mSuspended %d\n", this, mSuspended); - mOutput->standby(); + mOutput->common.standby(&mOutput->common); mStandby = true; mBytesWritten = 0; } @@ -1538,7 +1564,7 @@ bool AudioFlinger::MixerThread::threadLoop() mInWrite = true; mBytesWritten += mixBufferSize; - int bytesWritten = (int)mOutput->write(mMixBuffer, mixBufferSize); + int bytesWritten = (int)mOutput->write(mOutput, mMixBuffer, mixBufferSize); if (bytesWritten < 0) mBytesWritten -= mixBufferSize; mNumWrites++; mInWrite = false; @@ -1573,7 +1599,7 @@ bool AudioFlinger::MixerThread::threadLoop() } if (!mStandby) { - mOutput->standby(); + mOutput->common.standby(&mOutput->common); } LOGV("MixerThread %p exiting", this); @@ -1597,7 +1623,7 @@ uint32_t AudioFlinger::MixerThread::prepareTracks_l(const SortedVector< wp<Track masterVolume = 0; } // Delegate master volume control to effect in output mix effect chain if needed - sp<EffectChain> chain = getEffectChain_l(AudioSystem::SESSION_OUTPUT_MIX); + sp<EffectChain> chain = getEffectChain_l(AUDIO_SESSION_OUTPUT_MIX); if (chain != 0) { uint32_t v = (uint32_t)(masterVolume * (1 << 24)); chain->setVolume_l(&v, &v); @@ -1823,14 +1849,14 @@ bool AudioFlinger::MixerThread::checkForNewParameters_l() reconfig = true; } if (param.getInt(String8(AudioParameter::keyFormat), value) == NO_ERROR) { - if (value != AudioSystem::PCM_16_BIT) { + if (value != AUDIO_FORMAT_PCM_16_BIT) { status = BAD_VALUE; } else { reconfig = true; } } if (param.getInt(String8(AudioParameter::keyChannels), value) == NO_ERROR) { - if (value != AudioSystem::CHANNEL_OUT_STEREO) { + if (value != AUDIO_CHANNEL_OUT_STEREO) { status = BAD_VALUE; } else { reconfig = true; @@ -1852,12 +1878,12 @@ bool AudioFlinger::MixerThread::checkForNewParameters_l() if (mDevice != value) { uint32_t params = 0; // check whether speaker is on - if (value & AudioSystem::DEVICE_OUT_SPEAKER) { + if (value & AUDIO_DEVICE_OUT_SPEAKER) { params |= IMediaPlayerService::kBatteryDataSpeakerOn; } int deviceWithoutSpeaker - = AudioSystem::DEVICE_OUT_ALL & ~AudioSystem::DEVICE_OUT_SPEAKER; + = AUDIO_DEVICE_OUT_ALL & ~AUDIO_DEVICE_OUT_SPEAKER; // check if any other device (except speaker) is on if (value & deviceWithoutSpeaker ) { params |= IMediaPlayerService::kBatteryDataOtherAudioDeviceOn; @@ -1877,12 +1903,14 @@ bool AudioFlinger::MixerThread::checkForNewParameters_l() } if (status == NO_ERROR) { - status = mOutput->setParameters(keyValuePair); + status = mOutput->common.set_parameters(&mOutput->common, + keyValuePair.string()); if (!mStandby && status == INVALID_OPERATION) { - mOutput->standby(); + mOutput->common.standby(&mOutput->common); mStandby = true; mBytesWritten = 0; - status = mOutput->setParameters(keyValuePair); + status = mOutput->common.set_parameters(&mOutput->common, + keyValuePair.string()); } if (status == NO_ERROR && reconfig) { delete mAudioMixer; @@ -1926,7 +1954,7 @@ status_t AudioFlinger::MixerThread::dumpInternals(int fd, const Vector<String16> uint32_t AudioFlinger::MixerThread::activeSleepTimeUs() { - return (uint32_t)(mOutput->latency() * 1000) / 2; + return (uint32_t)(mOutput->get_latency(mOutput) * 1000) / 2; } uint32_t AudioFlinger::MixerThread::idleSleepTimeUs() @@ -1940,7 +1968,7 @@ uint32_t AudioFlinger::MixerThread::suspendSleepTimeUs() } // ---------------------------------------------------------------------------- -AudioFlinger::DirectOutputThread::DirectOutputThread(const sp<AudioFlinger>& audioFlinger, AudioStreamOut* output, int id, uint32_t device) +AudioFlinger::DirectOutputThread::DirectOutputThread(const sp<AudioFlinger>& audioFlinger, struct audio_stream_out* output, int id, uint32_t device) : PlaybackThread(audioFlinger, output, id, device) { mType = PlaybackThread::DIRECT; @@ -1976,12 +2004,12 @@ int32_t mul(int16_t in, int16_t v) void AudioFlinger::DirectOutputThread::applyVolume(uint16_t leftVol, uint16_t rightVol, bool ramp) { // Do not apply volume on compressed audio - if (!AudioSystem::isLinearPCM(mFormat)) { + if (!audio_is_linear_pcm(mFormat)) { return; } // convert to signed 16 bit before volume calculation - if (mFormat == AudioSystem::PCM_8_BIT) { + if (mFormat == AUDIO_FORMAT_PCM_8_BIT) { size_t count = mFrameCount * mChannelCount; uint8_t *src = (uint8_t *)mMixBuffer + count-1; int16_t *dst = mMixBuffer + count-1; @@ -2034,7 +2062,7 @@ void AudioFlinger::DirectOutputThread::applyVolume(uint16_t leftVol, uint16_t ri } // convert back to unsigned 8 bit after volume calculation - if (mFormat == AudioSystem::PCM_8_BIT) { + if (mFormat == AUDIO_FORMAT_PCM_8_BIT) { size_t count = mFrameCount * mChannelCount; int16_t *src = mMixBuffer; uint8_t *dst = (uint8_t *)mMixBuffer; @@ -2090,7 +2118,7 @@ bool AudioFlinger::DirectOutputThread::threadLoop() // wait until we have something to do... if (!mStandby) { LOGV("Audio hardware entering standby, mixer %p\n", this); - mOutput->standby(); + mOutput->common.standby(&mOutput->common); mStandby = true; mBytesWritten = 0; } @@ -2175,7 +2203,7 @@ bool AudioFlinger::DirectOutputThread::threadLoop() // If audio HAL implements volume control, // force software volume to nominal value - if (mOutput->setVolume(left, right) == NO_ERROR) { + if (mOutput->set_volume(mOutput, left, right) == NO_ERROR) { left = 1.0f; right = 1.0f; } @@ -2276,7 +2304,7 @@ bool AudioFlinger::DirectOutputThread::threadLoop() } else { sleepTime = idleSleepTime; } - } else if (mBytesWritten != 0 && AudioSystem::isLinearPCM(mFormat)) { + } else if (mBytesWritten != 0 && audio_is_linear_pcm(mFormat)) { memset (mMixBuffer, 0, mFrameCount * mFrameSize); sleepTime = 0; } @@ -2298,7 +2326,7 @@ bool AudioFlinger::DirectOutputThread::threadLoop() mLastWriteTime = systemTime(); mInWrite = true; mBytesWritten += mixBufferSize; - int bytesWritten = (int)mOutput->write(mMixBuffer, mixBufferSize); + int bytesWritten = (int)mOutput->write(mOutput, mMixBuffer, mixBufferSize); if (bytesWritten < 0) mBytesWritten -= mixBufferSize; mNumWrites++; mInWrite = false; @@ -2320,7 +2348,7 @@ bool AudioFlinger::DirectOutputThread::threadLoop() } if (!mStandby) { - mOutput->standby(); + mOutput->common.standby(&mOutput->common); } LOGV("DirectOutputThread %p exiting", this); @@ -2360,12 +2388,14 @@ bool AudioFlinger::DirectOutputThread::checkForNewParameters_l() } } if (status == NO_ERROR) { - status = mOutput->setParameters(keyValuePair); + status = mOutput->common.set_parameters(&mOutput->common, + keyValuePair.string()); if (!mStandby && status == INVALID_OPERATION) { - mOutput->standby(); + mOutput->common.standby(&mOutput->common); mStandby = true; mBytesWritten = 0; - status = mOutput->setParameters(keyValuePair); + status = mOutput->common.set_parameters(&mOutput->common, + keyValuePair.string()); } if (status == NO_ERROR && reconfig) { readOutputParameters(); @@ -2385,8 +2415,8 @@ bool AudioFlinger::DirectOutputThread::checkForNewParameters_l() uint32_t AudioFlinger::DirectOutputThread::activeSleepTimeUs() { uint32_t time; - if (AudioSystem::isLinearPCM(mFormat)) { - time = (uint32_t)(mOutput->latency() * 1000) / 2; + if (audio_is_linear_pcm(mFormat)) { + time = (uint32_t)(mOutput->get_latency(mOutput) * 1000) / 2; } else { time = 10000; } @@ -2396,7 +2426,7 @@ uint32_t AudioFlinger::DirectOutputThread::activeSleepTimeUs() uint32_t AudioFlinger::DirectOutputThread::idleSleepTimeUs() { uint32_t time; - if (AudioSystem::isLinearPCM(mFormat)) { + if (audio_is_linear_pcm(mFormat)) { time = (uint32_t)(((mFrameCount * 1000) / mSampleRate) * 1000) / 2; } else { time = 10000; @@ -2407,7 +2437,7 @@ uint32_t AudioFlinger::DirectOutputThread::idleSleepTimeUs() uint32_t AudioFlinger::DirectOutputThread::suspendSleepTimeUs() { uint32_t time; - if (AudioSystem::isLinearPCM(mFormat)) { + if (audio_is_linear_pcm(mFormat)) { time = (uint32_t)(((mFrameCount * 1000) / mSampleRate) * 1000); } else { time = 10000; @@ -2588,7 +2618,7 @@ void AudioFlinger::DuplicatingThread::addOutputTrack(MixerThread *thread) mChannelCount, frameCount); if (outputTrack->cblk() != NULL) { - thread->setStreamVolume(AudioSystem::NUM_STREAM_TYPES, 1.0f); + thread->setStreamVolume(AUDIO_STREAM_CNT, 1.0f); mOutputTracks.add(outputTrack); LOGV("addOutputTrack() track %p, on thread %p", outputTrack, thread); updateWaitTime(); @@ -2833,7 +2863,7 @@ AudioFlinger::PlaybackThread::Track::Track( mStreamType = streamType; // NOTE: audio_track_cblk_t::frameSize for 8 bit PCM data is based on a sample size of // 16 bit because data is converted to 16 bit before being stored in buffer by AudioTrack - mCblk->frameSize = AudioSystem::isLinearPCM(format) ? channelCount * sizeof(int16_t) : sizeof(int8_t); + mCblk->frameSize = audio_is_linear_pcm(format) ? channelCount * sizeof(int16_t) : sizeof(int8_t); } } @@ -2864,7 +2894,7 @@ void AudioFlinger::PlaybackThread::Track::destroy() if (!isOutputTrack()) { if (mState == ACTIVE || mState == RESUMING) { AudioSystem::stopOutput(thread->id(), - (AudioSystem::stream_type)mStreamType, + (audio_stream_type_t)mStreamType, mSessionId); // to track the speaker usage @@ -2976,7 +3006,7 @@ status_t AudioFlinger::PlaybackThread::Track::start() if (!isOutputTrack() && state != ACTIVE && state != RESUMING) { thread->mLock.unlock(); status = AudioSystem::startOutput(thread->id(), - (AudioSystem::stream_type)mStreamType, + (audio_stream_type_t)mStreamType, mSessionId); thread->mLock.lock(); @@ -3016,7 +3046,7 @@ void AudioFlinger::PlaybackThread::Track::stop() if (!isOutputTrack() && (state == ACTIVE || state == RESUMING)) { thread->mLock.unlock(); AudioSystem::stopOutput(thread->id(), - (AudioSystem::stream_type)mStreamType, + (audio_stream_type_t)mStreamType, mSessionId); thread->mLock.lock(); @@ -3038,7 +3068,7 @@ void AudioFlinger::PlaybackThread::Track::pause() if (!isOutputTrack()) { thread->mLock.unlock(); AudioSystem::stopOutput(thread->id(), - (AudioSystem::stream_type)mStreamType, + (audio_stream_type_t)mStreamType, mSessionId); thread->mLock.lock(); @@ -3132,9 +3162,9 @@ AudioFlinger::RecordThread::RecordTrack::RecordTrack( { if (mCblk != NULL) { LOGV("RecordTrack constructor, size %d", (int)mBufferEnd - (int)mBuffer); - if (format == AudioSystem::PCM_16_BIT) { + if (format == AUDIO_FORMAT_PCM_16_BIT) { mCblk->frameSize = channelCount * sizeof(int16_t); - } else if (format == AudioSystem::PCM_8_BIT) { + } else if (format == AUDIO_FORMAT_PCM_8_BIT) { mCblk->frameSize = channelCount * sizeof(int8_t); } else { mCblk->frameSize = sizeof(int8_t); @@ -3237,7 +3267,7 @@ AudioFlinger::PlaybackThread::OutputTrack::OutputTrack( int format, int channelCount, int frameCount) - : Track(thread, NULL, AudioSystem::NUM_STREAM_TYPES, sampleRate, format, channelCount, frameCount, NULL, 0), + : Track(thread, NULL, AUDIO_STREAM_CNT, sampleRate, format, channelCount, frameCount, NULL, 0), mActive(false), mSourceThread(sourceThread) { @@ -3609,7 +3639,7 @@ sp<IAudioRecord> AudioFlinger::openRecord( } // If no audio session id is provided, create one here - if (sessionId != NULL && *sessionId != AudioSystem::SESSION_OUTPUT_MIX) { + if (sessionId != NULL && *sessionId != AUDIO_SESSION_OUTPUT_MIX) { lSessionId = *sessionId; } else { lSessionId = nextUniqueId_l(); @@ -3675,11 +3705,11 @@ status_t AudioFlinger::RecordHandle::onTransact( // ---------------------------------------------------------------------------- -AudioFlinger::RecordThread::RecordThread(const sp<AudioFlinger>& audioFlinger, AudioStreamIn *input, uint32_t sampleRate, uint32_t channels, int id) : +AudioFlinger::RecordThread::RecordThread(const sp<AudioFlinger>& audioFlinger, struct audio_stream_in *input, uint32_t sampleRate, uint32_t channels, int id) : ThreadBase(audioFlinger, id), mInput(input), mResampler(0), mRsmpOutBuffer(0), mRsmpInBuffer(0) { - mReqChannelCount = AudioSystem::popCount(channels); + mReqChannelCount = popcount(channels); mReqSampleRate = sampleRate; readInputParameters(); } @@ -3721,7 +3751,7 @@ bool AudioFlinger::RecordThread::threadLoop() checkForNewParameters_l(); if (mActiveTrack == 0 && mConfigEvents.isEmpty()) { if (!mStandby) { - mInput->standby(); + mInput->common.standby(&mInput->common); mStandby = true; } @@ -3736,7 +3766,7 @@ bool AudioFlinger::RecordThread::threadLoop() if (mActiveTrack != 0) { if (mActiveTrack->mState == TrackBase::PAUSING) { if (!mStandby) { - mInput->standby(); + mInput->common.standby(&mInput->common); mStandby = true; } mActiveTrack.clear(); @@ -3781,7 +3811,7 @@ bool AudioFlinger::RecordThread::threadLoop() mRsmpInIndex += framesIn; framesOut -= framesIn; if ((int)mChannelCount == mReqChannelCount || - mFormat != AudioSystem::PCM_16_BIT) { + mFormat != AUDIO_FORMAT_PCM_16_BIT) { memcpy(dst, src, framesIn * mFrameSize); } else { int16_t *src16 = (int16_t *)src; @@ -3801,11 +3831,11 @@ bool AudioFlinger::RecordThread::threadLoop() } if (framesOut && mFrameCount == mRsmpInIndex) { if (framesOut == mFrameCount && - ((int)mChannelCount == mReqChannelCount || mFormat != AudioSystem::PCM_16_BIT)) { - mBytesRead = mInput->read(buffer.raw, mInputBytes); + ((int)mChannelCount == mReqChannelCount || mFormat != AUDIO_FORMAT_PCM_16_BIT)) { + mBytesRead = mInput->read(mInput, buffer.raw, mInputBytes); framesOut = 0; } else { - mBytesRead = mInput->read(mRsmpInBuffer, mInputBytes); + mBytesRead = mInput->read(mInput, mRsmpInBuffer, mInputBytes); mRsmpInIndex = 0; } if (mBytesRead < 0) { @@ -3813,7 +3843,7 @@ bool AudioFlinger::RecordThread::threadLoop() if (mActiveTrack->mState == TrackBase::ACTIVE) { // Force input into standby so that it tries to // recover at next read attempt - mInput->standby(); + mInput->common.standby(&mInput->common); usleep(5000); } mRsmpInIndex = mFrameCount; @@ -3868,7 +3898,7 @@ bool AudioFlinger::RecordThread::threadLoop() } if (!mStandby) { - mInput->standby(); + mInput->common.standby(&mInput->common); } mActiveTrack.clear(); @@ -4000,13 +4030,13 @@ status_t AudioFlinger::RecordThread::getNextBuffer(AudioBufferProvider::Buffer* int channelCount; if (framesReady == 0) { - mBytesRead = mInput->read(mRsmpInBuffer, mInputBytes); + mBytesRead = mInput->read(mInput, mRsmpInBuffer, mInputBytes); if (mBytesRead < 0) { LOGE("RecordThread::getNextBuffer() Error reading audio input"); if (mActiveTrack->mState == TrackBase::ACTIVE) { // Force input into standby so that it tries to // recover at next read attempt - mInput->standby(); + mInput->common.standby(&mInput->common); usleep(5000); } buffer->raw = 0; @@ -4059,7 +4089,7 @@ bool AudioFlinger::RecordThread::checkForNewParameters_l() reconfig = true; } if (param.getInt(String8(AudioParameter::keyChannels), value) == NO_ERROR) { - reqChannelCount = AudioSystem::popCount(value); + reqChannelCount = popcount(value); reconfig = true; } if (param.getInt(String8(AudioParameter::keyFrameCount), value) == NO_ERROR) { @@ -4073,16 +4103,18 @@ bool AudioFlinger::RecordThread::checkForNewParameters_l() } } if (status == NO_ERROR) { - status = mInput->setParameters(keyValuePair); + status = mInput->common.set_parameters(&mInput->common, keyValuePair.string()); if (status == INVALID_OPERATION) { - mInput->standby(); - status = mInput->setParameters(keyValuePair); + mInput->common.standby(&mInput->common); + status = mInput->common.set_parameters(&mInput->common, keyValuePair.string()); } if (reconfig) { if (status == BAD_VALUE && - reqFormat == mInput->format() && reqFormat == AudioSystem::PCM_16_BIT && - ((int)mInput->sampleRate() <= 2 * reqSamplingRate) && - (AudioSystem::popCount(mInput->channels()) < 3) && (reqChannelCount < 3)) { + reqFormat == mInput->common.get_format(&mInput->common) && + reqFormat == AUDIO_FORMAT_PCM_16_BIT && + ((int)mInput->common.get_sample_rate(&mInput->common) <= (2 * reqSamplingRate)) && + (popcount(mInput->common.get_channels(&mInput->common)) < 3) && + (reqChannelCount < 3)) { status = NO_ERROR; } if (status == NO_ERROR) { @@ -4103,7 +4135,13 @@ bool AudioFlinger::RecordThread::checkForNewParameters_l() String8 AudioFlinger::RecordThread::getParameters(const String8& keys) { - return mInput->getParameters(keys); + char *s; + String8 out_s8; + + s = mInput->common.get_parameters(&mInput->common, keys.string()); + out_s8 = String8(s); + free(s); + return out_s8; } void AudioFlinger::RecordThread::audioConfigChanged_l(int event, int param) { @@ -4135,12 +4173,12 @@ void AudioFlinger::RecordThread::readInputParameters() if (mResampler) delete mResampler; mResampler = 0; - mSampleRate = mInput->sampleRate(); - mChannels = mInput->channels(); - mChannelCount = (uint16_t)AudioSystem::popCount(mChannels); - mFormat = mInput->format(); - mFrameSize = (uint16_t)mInput->frameSize(); - mInputBytes = mInput->bufferSize(); + mSampleRate = mInput->common.get_sample_rate(&mInput->common); + mChannels = mInput->common.get_channels(&mInput->common); + mChannelCount = (uint16_t)popcount(mChannels); + mFormat = mInput->common.get_format(&mInput->common); + mFrameSize = (uint16_t)audio_stream_frame_size(&mInput->common); + mInputBytes = mInput->common.get_buffer_size(&mInput->common); mFrameCount = mInputBytes / mFrameSize; mRsmpInBuffer = new int16_t[mFrameCount * mChannelCount]; @@ -4170,7 +4208,7 @@ void AudioFlinger::RecordThread::readInputParameters() unsigned int AudioFlinger::RecordThread::getInputFramesLost() { - return mInput->getInputFramesLost(); + return mInput->get_input_frames_lost(mInput); } // ---------------------------------------------------------------------------- @@ -4189,6 +4227,7 @@ int AudioFlinger::openOutput(uint32_t *pDevices, uint32_t format = pFormat ? *pFormat : 0; uint32_t channels = pChannels ? *pChannels : 0; uint32_t latency = pLatencyMs ? *pLatencyMs : 0; + struct audio_stream_out *output; LOGV("openOutput(), Device %x, SamplingRate %d, Format %d, Channels %x, flags %x", pDevices ? *pDevices : 0, @@ -4202,11 +4241,11 @@ int AudioFlinger::openOutput(uint32_t *pDevices, } Mutex::Autolock _l(mLock); - AudioStreamOut *output = mAudioHardware->openOutputStream(*pDevices, - (int *)&format, - &channels, - &samplingRate, - &status); + status = mAudioHardwareDev->open_output_stream(mAudioHardwareDev, *pDevices, + (int *)&format, + &channels, + &samplingRate, + &output); LOGV("openOutput() openOutputStream returned output %p, SamplingRate %d, Format %d, Channels %x, status %d", output, samplingRate, @@ -4217,9 +4256,9 @@ int AudioFlinger::openOutput(uint32_t *pDevices, mHardwareStatus = AUDIO_HW_IDLE; if (output != 0) { int id = nextUniqueId_l(); - if ((flags & AudioSystem::OUTPUT_FLAG_DIRECT) || - (format != AudioSystem::PCM_16_BIT) || - (channels != AudioSystem::CHANNEL_OUT_STEREO)) { + if ((flags & AUDIO_POLICY_OUTPUT_FLAG_DIRECT) || + (format != AUDIO_FORMAT_PCM_16_BIT) || + (channels != AUDIO_CHANNEL_OUT_STEREO)) { thread = new DirectOutputThread(this, output, id, *pDevices); LOGV("openOutput() created direct output: ID %d thread %p", id, thread); } else { @@ -4290,7 +4329,7 @@ status_t AudioFlinger::closeOutput(int output) thread->exit(); if (thread->type() != PlaybackThread::DUPLICATING) { - mAudioHardware->closeOutputStream(thread->getOutput()); + mAudioHardwareDev->close_output_stream(mAudioHardwareDev, thread->getOutput()); } return NO_ERROR; } @@ -4340,18 +4379,20 @@ int AudioFlinger::openInput(uint32_t *pDevices, uint32_t reqSamplingRate = samplingRate; uint32_t reqFormat = format; uint32_t reqChannels = channels; + struct audio_stream_in *input; if (pDevices == NULL || *pDevices == 0) { return 0; } Mutex::Autolock _l(mLock); - AudioStreamIn *input = mAudioHardware->openInputStream(*pDevices, - (int *)&format, - &channels, - &samplingRate, - &status, - (AudioSystem::audio_in_acoustics)acoustics); + status = mAudioHardwareDev->open_input_stream(mAudioHardwareDev, + *pDevices, + (int *)&format, + &channels, + &samplingRate, + (audio_in_acoustics_t)acoustics, + &input); LOGV("openInput() openInputStream returned input %p, SamplingRate %d, Format %d, Channels %x, acoustics %x, status %d", input, samplingRate, @@ -4364,16 +4405,17 @@ int AudioFlinger::openInput(uint32_t *pDevices, // try to open again with the proposed parameters. The AudioFlinger can resample the input and do mono to stereo // or stereo to mono conversions on 16 bit PCM inputs. if (input == 0 && status == BAD_VALUE && - reqFormat == format && format == AudioSystem::PCM_16_BIT && + reqFormat == format && format == AUDIO_FORMAT_PCM_16_BIT && (samplingRate <= 2 * reqSamplingRate) && - (AudioSystem::popCount(channels) < 3) && (AudioSystem::popCount(reqChannels) < 3)) { + (popcount(channels) < 3) && (popcount(reqChannels) < 3)) { LOGV("openInput() reopening with proposed sampling rate and channels"); - input = mAudioHardware->openInputStream(*pDevices, - (int *)&format, - &channels, - &samplingRate, - &status, - (AudioSystem::audio_in_acoustics)acoustics); + status = mAudioHardwareDev->open_input_stream(mAudioHardwareDev, + *pDevices, + (int *)&format, + &channels, + &samplingRate, + (audio_in_acoustics_t)acoustics, + &input); } if (input != 0) { @@ -4386,7 +4428,7 @@ int AudioFlinger::openInput(uint32_t *pDevices, if (pFormat) *pFormat = format; if (pChannels) *pChannels = reqChannels; - input->standby(); + input->common.standby(&input->common); // notify client processes of the new input creation thread->audioConfigChanged_l(AudioSystem::INPUT_OPENED); @@ -4415,7 +4457,7 @@ status_t AudioFlinger::closeInput(int input) } thread->exit(); - mAudioHardware->closeInputStream(thread->getInput()); + mAudioHardwareDev->close_input_stream(mAudioHardwareDev, thread->getInput()); return NO_ERROR; } @@ -4569,14 +4611,14 @@ sp<IEffect> AudioFlinger::createEffect(pid_t pid, } // check audio settings permission for global effects - if (sessionId == AudioSystem::SESSION_OUTPUT_MIX && !settingsAllowed()) { + if (sessionId == AUDIO_SESSION_OUTPUT_MIX && !settingsAllowed()) { lStatus = PERMISSION_DENIED; goto Exit; } - // Session AudioSystem::SESSION_OUTPUT_STAGE is reserved for output stage effects + // Session AUDIO_SESSION_OUTPUT_STAGE is reserved for output stage effects // that can only be created by audio policy manager (running in same process) - if (sessionId == AudioSystem::SESSION_OUTPUT_STAGE && getpid() != pid) { + if (sessionId == AUDIO_SESSION_OUTPUT_STAGE && getpid() != pid) { lStatus = PERMISSION_DENIED; goto Exit; } @@ -4590,12 +4632,12 @@ sp<IEffect> AudioFlinger::createEffect(pid_t pid, } if (output == 0) { - if (sessionId == AudioSystem::SESSION_OUTPUT_STAGE) { + if (sessionId == AUDIO_SESSION_OUTPUT_STAGE) { // output must be specified by AudioPolicyManager when using session - // AudioSystem::SESSION_OUTPUT_STAGE + // AUDIO_SESSION_OUTPUT_STAGE lStatus = BAD_VALUE; goto Exit; - } else if (sessionId == AudioSystem::SESSION_OUTPUT_MIX) { + } else if (sessionId == AUDIO_SESSION_OUTPUT_MIX) { // if the output returned by getOutputForEffect() is removed before we lock the // mutex below, the call to checkPlaybackThread_l(output) below will detect it // and we will exit safely @@ -4643,7 +4685,7 @@ sp<IEffect> AudioFlinger::createEffect(pid_t pid, // an auxiliary version of this effect type is available found = true; memcpy(&d, &desc, sizeof(effect_descriptor_t)); - if (sessionId != AudioSystem::SESSION_OUTPUT_MIX || + if (sessionId != AUDIO_SESSION_OUTPUT_MIX || (desc.flags & EFFECT_FLAG_TYPE_MASK) == EFFECT_FLAG_TYPE_AUXILIARY) { break; } @@ -4656,14 +4698,14 @@ sp<IEffect> AudioFlinger::createEffect(pid_t pid, } // For same effect type, chose auxiliary version over insert version if // connect to output mix (Compliance to OpenSL ES) - if (sessionId == AudioSystem::SESSION_OUTPUT_MIX && + if (sessionId == AUDIO_SESSION_OUTPUT_MIX && (d.flags & EFFECT_FLAG_TYPE_MASK) != EFFECT_FLAG_TYPE_AUXILIARY) { memcpy(&desc, &d, sizeof(effect_descriptor_t)); } } // Do not allow auxiliary effects on a session different from 0 (output mix) - if (sessionId != AudioSystem::SESSION_OUTPUT_MIX && + if (sessionId != AUDIO_SESSION_OUTPUT_MIX && (desc.flags & EFFECT_FLAG_TYPE_MASK) == EFFECT_FLAG_TYPE_AUXILIARY) { lStatus = INVALID_OPERATION; goto Exit; @@ -4836,7 +4878,7 @@ sp<AudioFlinger::EffectHandle> AudioFlinger::PlaybackThread::createEffect_l( // Do not allow auxiliary effect on session other than 0 if ((desc->flags & EFFECT_FLAG_TYPE_MASK) == EFFECT_FLAG_TYPE_AUXILIARY && - sessionId != AudioSystem::SESSION_OUTPUT_MIX) { + sessionId != AUDIO_SESSION_OUTPUT_MIX) { LOGW("createEffect_l() Cannot add auxiliary effect %s to session %d", desc->name, sessionId); lStatus = BAD_VALUE; @@ -4845,7 +4887,7 @@ sp<AudioFlinger::EffectHandle> AudioFlinger::PlaybackThread::createEffect_l( // Do not allow effects with session ID 0 on direct output or duplicating threads // TODO: add rule for hw accelerated effects on direct outputs with non PCM format - if (sessionId == AudioSystem::SESSION_OUTPUT_MIX && mType != MIXER) { + if (sessionId == AUDIO_SESSION_OUTPUT_MIX && mType != MIXER) { LOGW("createEffect_l() Cannot add auxiliary effect %s to session %d", desc->name, sessionId); lStatus = BAD_VALUE; @@ -5032,13 +5074,13 @@ status_t AudioFlinger::PlaybackThread::addEffectChain_l(const sp<EffectChain>& c chain->setInBuffer(buffer, ownsBuffer); chain->setOutBuffer(mMixBuffer); - // Effect chain for session AudioSystem::SESSION_OUTPUT_STAGE is inserted at end of effect + // Effect chain for session AUDIO_SESSION_OUTPUT_STAGE is inserted at end of effect // chains list in order to be processed last as it contains output stage effects - // Effect chain for session AudioSystem::SESSION_OUTPUT_MIX is inserted before - // session AudioSystem::SESSION_OUTPUT_STAGE to be processed + // Effect chain for session AUDIO_SESSION_OUTPUT_MIX is inserted before + // session AUDIO_SESSION_OUTPUT_STAGE to be processed // after track specific effects and before output stage - // It is therefore mandatory that AudioSystem::SESSION_OUTPUT_MIX == 0 and - // that AudioSystem::SESSION_OUTPUT_STAGE < AudioSystem::SESSION_OUTPUT_MIX + // It is therefore mandatory that AUDIO_SESSION_OUTPUT_MIX == 0 and + // that AUDIO_SESSION_OUTPUT_STAGE < AUDIO_SESSION_OUTPUT_MIX // Effect chain for other sessions are inserted at beginning of effect // chains list to be processed before output mix effects. Relative order between other // sessions is not important @@ -5118,8 +5160,8 @@ status_t AudioFlinger::PlaybackThread::attachAuxEffect_l( if (EffectId == 0) { track->setAuxBuffer(0, NULL); } else { - // Auxiliary effects are always in audio session AudioSystem::SESSION_OUTPUT_MIX - sp<EffectModule> effect = getEffect_l(AudioSystem::SESSION_OUTPUT_MIX, EffectId); + // Auxiliary effects are always in audio session AUDIO_SESSION_OUTPUT_MIX + sp<EffectModule> effect = getEffect_l(AUDIO_SESSION_OUTPUT_MIX, EffectId); if (effect != 0) { if ((effect->desc().flags & EFFECT_FLAG_TYPE_MASK) == EFFECT_FLAG_TYPE_AUXILIARY) { track->setAuxBuffer(EffectId, (int32_t *)effect->inBuffer()); @@ -5403,7 +5445,7 @@ status_t AudioFlinger::EffectModule::configure() mConfig.outputCfg.bufferProvider.releaseBuffer = NULL; mConfig.inputCfg.accessMode = EFFECT_BUFFER_ACCESS_READ; // Insert effect: - // - in session AudioSystem::SESSION_OUTPUT_MIX or AudioSystem::SESSION_OUTPUT_STAGE, + // - in session AUDIO_SESSION_OUTPUT_MIX or AUDIO_SESSION_OUTPUT_STAGE, // always overwrites output buffer: input buffer == output buffer // - in other sessions: // last effect in the chain accumulates in output buffer: input buffer != output buffer @@ -5684,17 +5726,17 @@ status_t AudioFlinger::EffectModule::setMode(uint32_t mode) // update this table when AudioSystem::audio_devices or audio_device_e (in EffectApi.h) are modified const uint32_t AudioFlinger::EffectModule::sDeviceConvTable[] = { - DEVICE_EARPIECE, // AudioSystem::DEVICE_OUT_EARPIECE - DEVICE_SPEAKER, // AudioSystem::DEVICE_OUT_SPEAKER - DEVICE_WIRED_HEADSET, // case AudioSystem::DEVICE_OUT_WIRED_HEADSET - DEVICE_WIRED_HEADPHONE, // AudioSystem::DEVICE_OUT_WIRED_HEADPHONE - DEVICE_BLUETOOTH_SCO, // AudioSystem::DEVICE_OUT_BLUETOOTH_SCO - DEVICE_BLUETOOTH_SCO_HEADSET, // AudioSystem::DEVICE_OUT_BLUETOOTH_SCO_HEADSET - DEVICE_BLUETOOTH_SCO_CARKIT, // AudioSystem::DEVICE_OUT_BLUETOOTH_SCO_CARKIT - DEVICE_BLUETOOTH_A2DP, // AudioSystem::DEVICE_OUT_BLUETOOTH_A2DP - DEVICE_BLUETOOTH_A2DP_HEADPHONES, // AudioSystem::DEVICE_OUT_BLUETOOTH_A2DP_HEADPHONES - DEVICE_BLUETOOTH_A2DP_SPEAKER, // AudioSystem::DEVICE_OUT_BLUETOOTH_A2DP_SPEAKER - DEVICE_AUX_DIGITAL // AudioSystem::DEVICE_OUT_AUX_DIGITAL + DEVICE_EARPIECE, // AUDIO_DEVICE_OUT_EARPIECE + DEVICE_SPEAKER, // AUDIO_DEVICE_OUT_SPEAKER + DEVICE_WIRED_HEADSET, // case AUDIO_DEVICE_OUT_WIRED_HEADSET + DEVICE_WIRED_HEADPHONE, // AUDIO_DEVICE_OUT_WIRED_HEADPHONE + DEVICE_BLUETOOTH_SCO, // AUDIO_DEVICE_OUT_BLUETOOTH_SCO + DEVICE_BLUETOOTH_SCO_HEADSET, // AUDIO_DEVICE_OUT_BLUETOOTH_SCO_HEADSET + DEVICE_BLUETOOTH_SCO_CARKIT, // AUDIO_DEVICE_OUT_BLUETOOTH_SCO_CARKIT + DEVICE_BLUETOOTH_A2DP, // AUDIO_DEVICE_OUT_BLUETOOTH_A2DP + DEVICE_BLUETOOTH_A2DP_HEADPHONES, // AUDIO_DEVICE_OUT_BLUETOOTH_A2DP_HEADPHONES + DEVICE_BLUETOOTH_A2DP_SPEAKER, // AUDIO_DEVICE_OUT_BLUETOOTH_A2DP_SPEAKER + DEVICE_AUX_DIGITAL // AUDIO_DEVICE_OUT_AUX_DIGITAL }; uint32_t AudioFlinger::EffectModule::deviceAudioSystemToEffectApi(uint32_t device) @@ -5714,10 +5756,10 @@ uint32_t AudioFlinger::EffectModule::deviceAudioSystemToEffectApi(uint32_t devic // update this table when AudioSystem::audio_mode or audio_mode_e (in EffectApi.h) are modified const uint32_t AudioFlinger::EffectModule::sModeConvTable[] = { - AUDIO_MODE_NORMAL, // AudioSystem::MODE_NORMAL - AUDIO_MODE_RINGTONE, // AudioSystem::MODE_RINGTONE - AUDIO_MODE_IN_CALL, // AudioSystem::MODE_IN_CALL - AUDIO_MODE_IN_CALL // AudioSystem::MODE_IN_COMMUNICATION, same conversion as for MODE_IN_CALL + AUDIO_EFFECT_MODE_NORMAL, // AUDIO_MODE_NORMAL + AUDIO_EFFECT_MODE_RINGTONE, // AUDIO_MODE_RINGTONE + AUDIO_EFFECT_MODE_IN_CALL, // AUDIO_MODE_IN_CALL + AUDIO_EFFECT_MODE_IN_CALL // AUDIO_MODE_IN_COMMUNICATION, same conversion as for AUDIO_MODE_IN_CALL }; int AudioFlinger::EffectModule::modeAudioSystemToEffectApi(uint32_t mode) @@ -6027,7 +6069,7 @@ AudioFlinger::EffectChain::EffectChain(const wp<ThreadBase>& wThread, mVolumeCtrlIdx(-1), mLeftVolume(UINT_MAX), mRightVolume(UINT_MAX), mNewLeftVolume(UINT_MAX), mNewRightVolume(UINT_MAX) { - mStrategy = AudioSystem::getStrategyForStream(AudioSystem::MUSIC); + mStrategy = AudioSystem::getStrategyForStream(AUDIO_STREAM_MUSIC); } AudioFlinger::EffectChain::~EffectChain() @@ -6078,8 +6120,8 @@ void AudioFlinger::EffectChain::process_l() return; } PlaybackThread *playbackThread = (PlaybackThread *)thread.get(); - bool isGlobalSession = (mSessionId == AudioSystem::SESSION_OUTPUT_MIX) || - (mSessionId == AudioSystem::SESSION_OUTPUT_STAGE); + bool isGlobalSession = (mSessionId == AUDIO_SESSION_OUTPUT_MIX) || + (mSessionId == AUDIO_SESSION_OUTPUT_STAGE); bool tracksOnSession = false; if (!isGlobalSession) { tracksOnSession = |