diff options
Diffstat (limited to 'services')
-rw-r--r-- | services/audioflinger/Android.mk | 2 | ||||
-rw-r--r-- | services/audioflinger/AudioFlinger.cpp | 45 | ||||
-rw-r--r-- | services/audioflinger/AudioMixer.cpp | 2 | ||||
-rw-r--r-- | services/camera/libcameraservice/Android.mk | 1 |
4 files changed, 24 insertions, 26 deletions
diff --git a/services/audioflinger/Android.mk b/services/audioflinger/Android.mk index 5164213..257f62c 100644 --- a/services/audioflinger/Android.mk +++ b/services/audioflinger/Android.mk @@ -15,6 +15,7 @@ LOCAL_C_INCLUDES := \ $(call include-path-for, audio-effects) \ $(call include-path-for, audio-utils) +# FIXME keep libmedia_native but remove libmedia after split LOCAL_SHARED_LIBRARIES := \ libaudioutils \ libcommon_time_client \ @@ -22,6 +23,7 @@ LOCAL_SHARED_LIBRARIES := \ libutils \ libbinder \ libmedia \ + libmedia_native \ libhardware \ libhardware_legacy \ libeffects \ diff --git a/services/audioflinger/AudioFlinger.cpp b/services/audioflinger/AudioFlinger.cpp index 85168ce..3ab4e34 100644 --- a/services/audioflinger/AudioFlinger.cpp +++ b/services/audioflinger/AudioFlinger.cpp @@ -894,7 +894,8 @@ status_t AudioFlinger::setParameters(audio_io_handle_t ioHandle, const String8& // indicate output device change to all input threads for pre processing AudioParameter param = AudioParameter(keyValuePairs); int value; - if (param.getInt(String8(AudioParameter::keyRouting), value) == NO_ERROR) { + if ((param.getInt(String8(AudioParameter::keyRouting), value) == NO_ERROR) && + (value != 0)) { for (size_t i = 0; i < mRecordThreads.size(); i++) { mRecordThreads.valueAt(i)->setParameters(keyValuePairs); } @@ -1588,7 +1589,7 @@ void AudioFlinger::PlaybackThread::onFirstRef() } // PlaybackThread::createTrack_l() must be called with AudioFlinger::mLock held -sp<AudioFlinger::PlaybackThread::Track> AudioFlinger::PlaybackThread::createTrack_l( +sp<AudioFlinger::PlaybackThread::Track> AudioFlinger::PlaybackThread::createTrack_l( const sp<AudioFlinger::Client>& client, audio_stream_type_t streamType, uint32_t sampleRate, @@ -2337,7 +2338,7 @@ AudioFlinger::PlaybackThread::mixer_state AudioFlinger::MixerThread::prepareTrac size_t tracksWithEffect = 0; float masterVolume = mMasterVolume; - bool masterMute = mMasterMute; + bool masterMute = mMasterMute; if (masterMute) { masterVolume = 0; @@ -2376,7 +2377,7 @@ AudioFlinger::PlaybackThread::mixer_state AudioFlinger::MixerThread::prepareTrac // +1 for rounding and +1 for additional sample needed for interpolation minFrames = (mFrameCount * t->sampleRate()) / mSampleRate + 1 + 1; // add frames already consumed but not yet released by the resampler - // because cblk->framesReady() will include these frames + // because cblk->framesReady() will include these frames minFrames += mAudioMixer->getUnreleasedFrames(track->name()); // the minimum track buffer size is normally twice the number of frames necessary // to fill one buffer and the resampler should not leave more than one buffer worth @@ -2514,6 +2515,7 @@ AudioFlinger::PlaybackThread::mixer_state AudioFlinger::MixerThread::prepareTrac // reset retry count track->mRetryCount = kMaxTrackRetries; + // If one track is ready, set the mixer ready if: // - the mixer was not ready during previous round OR // - no other track is not ready @@ -3372,19 +3374,19 @@ AudioFlinger::ThreadBase::TrackBase::TrackBase( } } else { mCblk = (audio_track_cblk_t *)(new uint8_t[size]); - // construct the shared structure in-place. - new(mCblk) audio_track_cblk_t(); - // clear all buffers - mCblk->frameCount = frameCount; - mCblk->sampleRate = sampleRate; - mChannelCount = channelCount; - mChannelMask = channelMask; - mBuffer = (char*)mCblk + sizeof(audio_track_cblk_t); - memset(mBuffer, 0, frameCount*channelCount*sizeof(int16_t)); - // Force underrun condition to avoid false underrun callback until first data is - // written to buffer (other flags are cleared) - mCblk->flags = CBLK_UNDERRUN_ON; - mBufferEnd = (uint8_t *)mBuffer + bufferSize; + // construct the shared structure in-place. + new(mCblk) audio_track_cblk_t(); + // clear all buffers + mCblk->frameCount = frameCount; + mCblk->sampleRate = sampleRate; + mChannelCount = channelCount; + mChannelMask = channelMask; + mBuffer = (char*)mCblk + sizeof(audio_track_cblk_t); + memset(mBuffer, 0, frameCount*channelCount*sizeof(int16_t)); + // Force underrun condition to avoid false underrun callback until first data is + // written to buffer (other flags are cleared) + mCblk->flags = CBLK_UNDERRUN_ON; + mBufferEnd = (uint8_t *)mBuffer + bufferSize; } } @@ -3792,16 +3794,9 @@ AudioFlinger::PlaybackThread::TimedTrack::create( if (!client->reserveTimedTrack()) return NULL; - sp<TimedTrack> track = new TimedTrack( + return new TimedTrack( thread, client, streamType, sampleRate, format, channelMask, frameCount, sharedBuffer, sessionId); - - if (track == NULL) { - client->releaseTimedTrack(); - return NULL; - } - - return track; } AudioFlinger::PlaybackThread::TimedTrack::TimedTrack( diff --git a/services/audioflinger/AudioMixer.cpp b/services/audioflinger/AudioMixer.cpp index bd4c939..98852fd 100644 --- a/services/audioflinger/AudioMixer.cpp +++ b/services/audioflinger/AudioMixer.cpp @@ -136,7 +136,7 @@ void AudioMixer::deleteTrackName(int name) invalidateState(1<<name); } if (track.resampler != NULL) { - // delete the resampler + // delete the resampler delete track.resampler; track.resampler = NULL; track.sampleRate = mSampleRate; diff --git a/services/camera/libcameraservice/Android.mk b/services/camera/libcameraservice/Android.mk index e35435e..3cae1f5 100644 --- a/services/camera/libcameraservice/Android.mk +++ b/services/camera/libcameraservice/Android.mk @@ -15,6 +15,7 @@ LOCAL_SHARED_LIBRARIES:= \ libbinder \ libcutils \ libmedia \ + libmedia_native \ libcamera_client \ libgui \ libhardware |