From 0f33feef678c3c1f6304cb116ffcd5ab849dc3df Mon Sep 17 00:00:00 2001 From: Eric Laurent Date: Thu, 28 Jul 2011 13:59:02 -0700 Subject: Fix issue 5090721: audio record broken Commit 6dbdc40 introduced a deadlock when exiting the AudioFlinger RecordThread. Change-Id: I1f63e54c5aeff05da4e4d028b53f734c62c78677 --- services/audioflinger/AudioFlinger.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/services/audioflinger/AudioFlinger.cpp b/services/audioflinger/AudioFlinger.cpp index 4e068b2..ec45530 100644 --- a/services/audioflinger/AudioFlinger.cpp +++ b/services/audioflinger/AudioFlinger.cpp @@ -1100,7 +1100,7 @@ void AudioFlinger::ThreadBase::acquireWakeLock_l() void AudioFlinger::ThreadBase::releaseWakeLock() { Mutex::Autolock _l(mLock); - releaseWakeLock(); + releaseWakeLock_l(); } void AudioFlinger::ThreadBase::releaseWakeLock_l() -- cgit v1.1 From 514166986238c99e32995af204160b9d58805dc6 Mon Sep 17 00:00:00 2001 From: The Android Automerger Date: Tue, 30 Aug 2011 12:45:34 -0700 Subject: merge in ics-release history after reset to master --- media/libmediaplayerservice/StagefrightPlayer.cpp | 6 ++- media/libmediaplayerservice/nuplayer/NuPlayer.cpp | 6 +-- .../nuplayer/NuPlayerRenderer.cpp | 45 ++++++++-------------- media/libstagefright/ACodec.cpp | 26 ++----------- media/libstagefright/AwesomePlayer.cpp | 27 ++++--------- media/libstagefright/include/AwesomePlayer.h | 6 +-- services/audioflinger/AudioFlinger.cpp | 14 +++---- services/audioflinger/AudioFlinger.h | 4 +- 8 files changed, 46 insertions(+), 88 deletions(-) diff --git a/media/libmediaplayerservice/StagefrightPlayer.cpp b/media/libmediaplayerservice/StagefrightPlayer.cpp index cd4b1ef..40e055c 100644 --- a/media/libmediaplayerservice/StagefrightPlayer.cpp +++ b/media/libmediaplayerservice/StagefrightPlayer.cpp @@ -72,14 +72,16 @@ status_t StagefrightPlayer::setDataSource(const sp &source) { status_t StagefrightPlayer::setVideoSurface(const sp &surface) { LOGV("setVideoSurface"); - return mPlayer->setSurface(surface); + mPlayer->setSurface(surface); + return OK; } status_t StagefrightPlayer::setVideoSurfaceTexture( const sp &surfaceTexture) { LOGV("setVideoSurfaceTexture"); - return mPlayer->setSurfaceTexture(surfaceTexture); + mPlayer->setSurfaceTexture(surfaceTexture); + return OK; } status_t StagefrightPlayer::prepare() { diff --git a/media/libmediaplayerservice/nuplayer/NuPlayer.cpp b/media/libmediaplayerservice/nuplayer/NuPlayer.cpp index 1f08a91..7fb141a 100644 --- a/media/libmediaplayerservice/nuplayer/NuPlayer.cpp +++ b/media/libmediaplayerservice/nuplayer/NuPlayer.cpp @@ -316,11 +316,9 @@ void NuPlayer::onMessageReceived(const sp &msg) { &cropLeft, &cropTop, &cropRight, &cropBottom)); LOGV("Video output format changed to %d x %d " - "(crop: %d x %d @ (%d, %d))", + "(crop: %d, %d, %d, %d)", width, height, - (cropRight - cropLeft + 1), - (cropBottom - cropTop + 1), - cropLeft, cropTop); + cropLeft, cropTop, cropRight, cropBottom); notifyListener( MEDIA_SET_VIDEO_SIZE, diff --git a/media/libmediaplayerservice/nuplayer/NuPlayerRenderer.cpp b/media/libmediaplayerservice/nuplayer/NuPlayerRenderer.cpp index 8f213da..35ed43f 100644 --- a/media/libmediaplayerservice/nuplayer/NuPlayerRenderer.cpp +++ b/media/libmediaplayerservice/nuplayer/NuPlayerRenderer.cpp @@ -395,40 +395,29 @@ void NuPlayer::Renderer::onQueueBuffer(const sp &msg) { postDrainVideoQueue(); } - if (!mSyncQueues || mAudioQueue.empty() || mVideoQueue.empty()) { - return; - } - - sp firstAudioBuffer = (*mAudioQueue.begin()).mBuffer; - sp firstVideoBuffer = (*mVideoQueue.begin()).mBuffer; - - if (firstAudioBuffer == NULL || firstVideoBuffer == NULL) { - // EOS signalled on either queue. - syncQueuesDone(); - return; - } + if (mSyncQueues && !mAudioQueue.empty() && !mVideoQueue.empty()) { + int64_t firstAudioTimeUs; + int64_t firstVideoTimeUs; + CHECK((*mAudioQueue.begin()).mBuffer->meta() + ->findInt64("timeUs", &firstAudioTimeUs)); + CHECK((*mVideoQueue.begin()).mBuffer->meta() + ->findInt64("timeUs", &firstVideoTimeUs)); - int64_t firstAudioTimeUs; - int64_t firstVideoTimeUs; - CHECK(firstAudioBuffer->meta() - ->findInt64("timeUs", &firstAudioTimeUs)); - CHECK(firstVideoBuffer->meta() - ->findInt64("timeUs", &firstVideoTimeUs)); + int64_t diff = firstVideoTimeUs - firstAudioTimeUs; - int64_t diff = firstVideoTimeUs - firstAudioTimeUs; + LOGV("queueDiff = %.2f secs", diff / 1E6); - LOGV("queueDiff = %.2f secs", diff / 1E6); + if (diff > 100000ll) { + // Audio data starts More than 0.1 secs before video. + // Drop some audio. - if (diff > 100000ll) { - // Audio data starts More than 0.1 secs before video. - // Drop some audio. + (*mAudioQueue.begin()).mNotifyConsumed->post(); + mAudioQueue.erase(mAudioQueue.begin()); + return; + } - (*mAudioQueue.begin()).mNotifyConsumed->post(); - mAudioQueue.erase(mAudioQueue.begin()); - return; + syncQueuesDone(); } - - syncQueuesDone(); } void NuPlayer::Renderer::syncQueuesDone() { diff --git a/media/libstagefright/ACodec.cpp b/media/libstagefright/ACodec.cpp index e9dc61c..5d91f6a 100644 --- a/media/libstagefright/ACodec.cpp +++ b/media/libstagefright/ACodec.cpp @@ -1738,17 +1738,7 @@ ACodec::LoadedToIdleState::LoadedToIdleState(ACodec *codec) void ACodec::LoadedToIdleState::stateEntered() { LOGV("[%s] Now Loaded->Idle", mCodec->mComponentName.c_str()); - status_t err; - if ((err = allocateBuffers()) != OK) { - LOGE("Failed to allocate buffers after transitioning to IDLE state " - "(error 0x%08x)", - err); - - sp notify = mCodec->mNotify->dup(); - notify->setInt32("what", ACodec::kWhatError); - notify->setInt32("omx-error", OMX_ErrorUndefined); - notify->post(); - } + CHECK_EQ(allocateBuffers(), (status_t)OK); } status_t ACodec::LoadedToIdleState::allocateBuffers() { @@ -2056,18 +2046,8 @@ bool ACodec::OutputPortSettingsChangedState::onOMXEvent( mCodec->mNode, OMX_CommandPortEnable, kPortIndexOutput), (status_t)OK); - status_t err; - if ((err = mCodec->allocateBuffersOnPort( - kPortIndexOutput)) != OK) { - LOGE("Failed to allocate output port buffers after " - "port reconfiguration (error 0x%08x)", - err); - - sp notify = mCodec->mNotify->dup(); - notify->setInt32("what", ACodec::kWhatError); - notify->setInt32("omx-error", OMX_ErrorUndefined); - notify->post(); - } + CHECK_EQ(mCodec->allocateBuffersOnPort(kPortIndexOutput), + (status_t)OK); return true; } else if (data1 == (OMX_U32)OMX_CommandPortEnable) { diff --git a/media/libstagefright/AwesomePlayer.cpp b/media/libstagefright/AwesomePlayer.cpp index 142dda0..bc42a42 100644 --- a/media/libstagefright/AwesomePlayer.cpp +++ b/media/libstagefright/AwesomePlayer.cpp @@ -1152,26 +1152,22 @@ bool AwesomePlayer::isPlaying() const { return (mFlags & PLAYING) || (mFlags & CACHE_UNDERRUN); } -status_t AwesomePlayer::setSurface(const sp &surface) { +void AwesomePlayer::setSurface(const sp &surface) { Mutex::Autolock autoLock(mLock); mSurface = surface; - return setNativeWindow_l(surface); + setNativeWindow_l(surface); } -status_t AwesomePlayer::setSurfaceTexture(const sp &surfaceTexture) { +void AwesomePlayer::setSurfaceTexture(const sp &surfaceTexture) { Mutex::Autolock autoLock(mLock); mSurface.clear(); - - status_t err; if (surfaceTexture != NULL) { - err = setNativeWindow_l(new SurfaceTextureClient(surfaceTexture)); + setNativeWindow_l(new SurfaceTextureClient(surfaceTexture)); } else { - err = setNativeWindow_l(NULL); + setNativeWindow_l(NULL); } - - return err; } void AwesomePlayer::shutdownVideoDecoder_l() { @@ -1194,11 +1190,11 @@ void AwesomePlayer::shutdownVideoDecoder_l() { LOGI("video decoder shutdown completed"); } -status_t AwesomePlayer::setNativeWindow_l(const sp &native) { +void AwesomePlayer::setNativeWindow_l(const sp &native) { mNativeWindow = native; if (mVideoSource == NULL) { - return OK; + return; } LOGI("attempting to reconfigure to use new surface"); @@ -1210,12 +1206,7 @@ status_t AwesomePlayer::setNativeWindow_l(const sp &native) { shutdownVideoDecoder_l(); - status_t err = initVideoDecoder(); - - if (err != OK) { - LOGE("failed to reinstantiate video decoder after surface change."); - return err; - } + CHECK_EQ(initVideoDecoder(), (status_t)OK); if (mLastVideoTimeUs >= 0) { mSeeking = SEEK; @@ -1226,8 +1217,6 @@ status_t AwesomePlayer::setNativeWindow_l(const sp &native) { if (wasPlaying) { play_l(); } - - return OK; } void AwesomePlayer::setAudioSink( diff --git a/media/libstagefright/include/AwesomePlayer.h b/media/libstagefright/include/AwesomePlayer.h index 24cf77c..14476d3 100644 --- a/media/libstagefright/include/AwesomePlayer.h +++ b/media/libstagefright/include/AwesomePlayer.h @@ -84,8 +84,8 @@ struct AwesomePlayer { bool isPlaying() const; - status_t setSurface(const sp &surface); - status_t setSurfaceTexture(const sp &surfaceTexture); + void setSurface(const sp &surface); + void setSurfaceTexture(const sp &surfaceTexture); void setAudioSink(const sp &audioSink); status_t setLooping(bool shouldLoop); @@ -298,7 +298,7 @@ private: void postAudioSeekComplete_l(); void shutdownVideoDecoder_l(); - status_t setNativeWindow_l(const sp &native); + void setNativeWindow_l(const sp &native); bool isStreamingHTTP() const; void sendCacheStats(); diff --git a/services/audioflinger/AudioFlinger.cpp b/services/audioflinger/AudioFlinger.cpp index d617af8..744fa50 100644 --- a/services/audioflinger/AudioFlinger.cpp +++ b/services/audioflinger/AudioFlinger.cpp @@ -151,7 +151,7 @@ static const char *audio_interfaces[] = { AudioFlinger::AudioFlinger() : BnAudioFlinger(), mPrimaryHardwareDev(0), mMasterVolume(1.0f), mMasterMute(false), mNextUniqueId(1), - mBtNrecIsOff(false) + mBtNrec(false) { } @@ -751,15 +751,15 @@ status_t AudioFlinger::setParameters(int ioHandle, const String8& keyValuePairs) String8 value; if (param.get(String8(AUDIO_PARAMETER_KEY_BT_NREC), value) == NO_ERROR) { Mutex::Autolock _l(mLock); - bool btNrecIsOff = (value == AUDIO_PARAMETER_VALUE_OFF); - if (mBtNrecIsOff != btNrecIsOff) { + bool btNrec = (value == AUDIO_PARAMETER_VALUE_ON); + if (mBtNrec != btNrec) { for (size_t i = 0; i < mRecordThreads.size(); i++) { sp thread = mRecordThreads.valueAt(i); RecordThread::RecordTrack *track = thread->track(); if (track != NULL) { audio_devices_t device = (audio_devices_t)( thread->device() & AUDIO_DEVICE_IN_ALL); - bool suspend = audio_is_bluetooth_sco_device(device) && btNrecIsOff; + bool suspend = audio_is_bluetooth_sco_device(device) && btNrec; thread->setEffectSuspended(FX_IID_AEC, suspend, track->sessionId()); @@ -768,7 +768,7 @@ status_t AudioFlinger::setParameters(int ioHandle, const String8& keyValuePairs) track->sessionId()); } } - mBtNrecIsOff = btNrecIsOff; + mBtNrec = btNrec; } } return final_result; @@ -4394,7 +4394,7 @@ sp AudioFlinger::RecordThread::createR mTrack = track.get(); // disable AEC and NS if the device is a BT SCO headset supporting those pre processings bool suspend = audio_is_bluetooth_sco_device( - (audio_devices_t)(mDevice & AUDIO_DEVICE_IN_ALL)) && mAudioFlinger->btNrecIsOff(); + (audio_devices_t)(mDevice & AUDIO_DEVICE_IN_ALL)) && mAudioFlinger->btNrec(); setEffectSuspended_l(FX_IID_AEC, suspend, sessionId); setEffectSuspended_l(FX_IID_NS, suspend, sessionId); } @@ -4619,7 +4619,7 @@ bool AudioFlinger::RecordThread::checkForNewParameters_l() // disable AEC and NS if the device is a BT SCO headset supporting those pre processings if (mTrack != NULL) { bool suspend = audio_is_bluetooth_sco_device( - (audio_devices_t)value) && mAudioFlinger->btNrecIsOff(); + (audio_devices_t)value) && mAudioFlinger->btNrec(); setEffectSuspended_l(FX_IID_AEC, suspend, mTrack->sessionId()); setEffectSuspended_l(FX_IID_NS, suspend, mTrack->sessionId()); } diff --git a/services/audioflinger/AudioFlinger.h b/services/audioflinger/AudioFlinger.h index 1ceb0ec..1141f6c 100644 --- a/services/audioflinger/AudioFlinger.h +++ b/services/audioflinger/AudioFlinger.h @@ -210,7 +210,7 @@ public: uint32_t getMode() { return mMode; } - bool btNrecIsOff() { return mBtNrecIsOff; } + bool btNrec() { return mBtNrec; } private: AudioFlinger(); @@ -1389,7 +1389,7 @@ private: DefaultKeyedVector< pid_t, sp > mNotificationClients; volatile int32_t mNextUniqueId; uint32_t mMode; - bool mBtNrecIsOff; + bool mBtNrec; Vector mAudioSessionRefs; }; -- cgit v1.1 From 9641158ef2bafc1de350218e0ec902f55f664dd3 Mon Sep 17 00:00:00 2001 From: The Android Automerger Date: Tue, 30 Aug 2011 13:42:46 -0700 Subject: merge in ics-release history after reset to master --- media/libmediaplayerservice/StagefrightPlayer.cpp | 6 +-- media/libmediaplayerservice/nuplayer/NuPlayer.cpp | 6 ++- .../nuplayer/NuPlayerRenderer.cpp | 45 ++++++++++++++-------- media/libstagefright/ACodec.cpp | 26 +++++++++++-- media/libstagefright/AwesomePlayer.cpp | 27 +++++++++---- media/libstagefright/include/AwesomePlayer.h | 6 +-- services/audioflinger/AudioFlinger.cpp | 14 +++---- services/audioflinger/AudioFlinger.h | 4 +- 8 files changed, 88 insertions(+), 46 deletions(-) diff --git a/media/libmediaplayerservice/StagefrightPlayer.cpp b/media/libmediaplayerservice/StagefrightPlayer.cpp index 40e055c..cd4b1ef 100644 --- a/media/libmediaplayerservice/StagefrightPlayer.cpp +++ b/media/libmediaplayerservice/StagefrightPlayer.cpp @@ -72,16 +72,14 @@ status_t StagefrightPlayer::setDataSource(const sp &source) { status_t StagefrightPlayer::setVideoSurface(const sp &surface) { LOGV("setVideoSurface"); - mPlayer->setSurface(surface); - return OK; + return mPlayer->setSurface(surface); } status_t StagefrightPlayer::setVideoSurfaceTexture( const sp &surfaceTexture) { LOGV("setVideoSurfaceTexture"); - mPlayer->setSurfaceTexture(surfaceTexture); - return OK; + return mPlayer->setSurfaceTexture(surfaceTexture); } status_t StagefrightPlayer::prepare() { diff --git a/media/libmediaplayerservice/nuplayer/NuPlayer.cpp b/media/libmediaplayerservice/nuplayer/NuPlayer.cpp index 7fb141a..1f08a91 100644 --- a/media/libmediaplayerservice/nuplayer/NuPlayer.cpp +++ b/media/libmediaplayerservice/nuplayer/NuPlayer.cpp @@ -316,9 +316,11 @@ void NuPlayer::onMessageReceived(const sp &msg) { &cropLeft, &cropTop, &cropRight, &cropBottom)); LOGV("Video output format changed to %d x %d " - "(crop: %d, %d, %d, %d)", + "(crop: %d x %d @ (%d, %d))", width, height, - cropLeft, cropTop, cropRight, cropBottom); + (cropRight - cropLeft + 1), + (cropBottom - cropTop + 1), + cropLeft, cropTop); notifyListener( MEDIA_SET_VIDEO_SIZE, diff --git a/media/libmediaplayerservice/nuplayer/NuPlayerRenderer.cpp b/media/libmediaplayerservice/nuplayer/NuPlayerRenderer.cpp index 35ed43f..8f213da 100644 --- a/media/libmediaplayerservice/nuplayer/NuPlayerRenderer.cpp +++ b/media/libmediaplayerservice/nuplayer/NuPlayerRenderer.cpp @@ -395,29 +395,40 @@ void NuPlayer::Renderer::onQueueBuffer(const sp &msg) { postDrainVideoQueue(); } - if (mSyncQueues && !mAudioQueue.empty() && !mVideoQueue.empty()) { - int64_t firstAudioTimeUs; - int64_t firstVideoTimeUs; - CHECK((*mAudioQueue.begin()).mBuffer->meta() - ->findInt64("timeUs", &firstAudioTimeUs)); - CHECK((*mVideoQueue.begin()).mBuffer->meta() - ->findInt64("timeUs", &firstVideoTimeUs)); + if (!mSyncQueues || mAudioQueue.empty() || mVideoQueue.empty()) { + return; + } - int64_t diff = firstVideoTimeUs - firstAudioTimeUs; + sp firstAudioBuffer = (*mAudioQueue.begin()).mBuffer; + sp firstVideoBuffer = (*mVideoQueue.begin()).mBuffer; - LOGV("queueDiff = %.2f secs", diff / 1E6); + if (firstAudioBuffer == NULL || firstVideoBuffer == NULL) { + // EOS signalled on either queue. + syncQueuesDone(); + return; + } - if (diff > 100000ll) { - // Audio data starts More than 0.1 secs before video. - // Drop some audio. + int64_t firstAudioTimeUs; + int64_t firstVideoTimeUs; + CHECK(firstAudioBuffer->meta() + ->findInt64("timeUs", &firstAudioTimeUs)); + CHECK(firstVideoBuffer->meta() + ->findInt64("timeUs", &firstVideoTimeUs)); - (*mAudioQueue.begin()).mNotifyConsumed->post(); - mAudioQueue.erase(mAudioQueue.begin()); - return; - } + int64_t diff = firstVideoTimeUs - firstAudioTimeUs; - syncQueuesDone(); + LOGV("queueDiff = %.2f secs", diff / 1E6); + + if (diff > 100000ll) { + // Audio data starts More than 0.1 secs before video. + // Drop some audio. + + (*mAudioQueue.begin()).mNotifyConsumed->post(); + mAudioQueue.erase(mAudioQueue.begin()); + return; } + + syncQueuesDone(); } void NuPlayer::Renderer::syncQueuesDone() { diff --git a/media/libstagefright/ACodec.cpp b/media/libstagefright/ACodec.cpp index 5d91f6a..e9dc61c 100644 --- a/media/libstagefright/ACodec.cpp +++ b/media/libstagefright/ACodec.cpp @@ -1738,7 +1738,17 @@ ACodec::LoadedToIdleState::LoadedToIdleState(ACodec *codec) void ACodec::LoadedToIdleState::stateEntered() { LOGV("[%s] Now Loaded->Idle", mCodec->mComponentName.c_str()); - CHECK_EQ(allocateBuffers(), (status_t)OK); + status_t err; + if ((err = allocateBuffers()) != OK) { + LOGE("Failed to allocate buffers after transitioning to IDLE state " + "(error 0x%08x)", + err); + + sp notify = mCodec->mNotify->dup(); + notify->setInt32("what", ACodec::kWhatError); + notify->setInt32("omx-error", OMX_ErrorUndefined); + notify->post(); + } } status_t ACodec::LoadedToIdleState::allocateBuffers() { @@ -2046,8 +2056,18 @@ bool ACodec::OutputPortSettingsChangedState::onOMXEvent( mCodec->mNode, OMX_CommandPortEnable, kPortIndexOutput), (status_t)OK); - CHECK_EQ(mCodec->allocateBuffersOnPort(kPortIndexOutput), - (status_t)OK); + status_t err; + if ((err = mCodec->allocateBuffersOnPort( + kPortIndexOutput)) != OK) { + LOGE("Failed to allocate output port buffers after " + "port reconfiguration (error 0x%08x)", + err); + + sp notify = mCodec->mNotify->dup(); + notify->setInt32("what", ACodec::kWhatError); + notify->setInt32("omx-error", OMX_ErrorUndefined); + notify->post(); + } return true; } else if (data1 == (OMX_U32)OMX_CommandPortEnable) { diff --git a/media/libstagefright/AwesomePlayer.cpp b/media/libstagefright/AwesomePlayer.cpp index bc42a42..142dda0 100644 --- a/media/libstagefright/AwesomePlayer.cpp +++ b/media/libstagefright/AwesomePlayer.cpp @@ -1152,22 +1152,26 @@ bool AwesomePlayer::isPlaying() const { return (mFlags & PLAYING) || (mFlags & CACHE_UNDERRUN); } -void AwesomePlayer::setSurface(const sp &surface) { +status_t AwesomePlayer::setSurface(const sp &surface) { Mutex::Autolock autoLock(mLock); mSurface = surface; - setNativeWindow_l(surface); + return setNativeWindow_l(surface); } -void AwesomePlayer::setSurfaceTexture(const sp &surfaceTexture) { +status_t AwesomePlayer::setSurfaceTexture(const sp &surfaceTexture) { Mutex::Autolock autoLock(mLock); mSurface.clear(); + + status_t err; if (surfaceTexture != NULL) { - setNativeWindow_l(new SurfaceTextureClient(surfaceTexture)); + err = setNativeWindow_l(new SurfaceTextureClient(surfaceTexture)); } else { - setNativeWindow_l(NULL); + err = setNativeWindow_l(NULL); } + + return err; } void AwesomePlayer::shutdownVideoDecoder_l() { @@ -1190,11 +1194,11 @@ void AwesomePlayer::shutdownVideoDecoder_l() { LOGI("video decoder shutdown completed"); } -void AwesomePlayer::setNativeWindow_l(const sp &native) { +status_t AwesomePlayer::setNativeWindow_l(const sp &native) { mNativeWindow = native; if (mVideoSource == NULL) { - return; + return OK; } LOGI("attempting to reconfigure to use new surface"); @@ -1206,7 +1210,12 @@ void AwesomePlayer::setNativeWindow_l(const sp &native) { shutdownVideoDecoder_l(); - CHECK_EQ(initVideoDecoder(), (status_t)OK); + status_t err = initVideoDecoder(); + + if (err != OK) { + LOGE("failed to reinstantiate video decoder after surface change."); + return err; + } if (mLastVideoTimeUs >= 0) { mSeeking = SEEK; @@ -1217,6 +1226,8 @@ void AwesomePlayer::setNativeWindow_l(const sp &native) { if (wasPlaying) { play_l(); } + + return OK; } void AwesomePlayer::setAudioSink( diff --git a/media/libstagefright/include/AwesomePlayer.h b/media/libstagefright/include/AwesomePlayer.h index 14476d3..24cf77c 100644 --- a/media/libstagefright/include/AwesomePlayer.h +++ b/media/libstagefright/include/AwesomePlayer.h @@ -84,8 +84,8 @@ struct AwesomePlayer { bool isPlaying() const; - void setSurface(const sp &surface); - void setSurfaceTexture(const sp &surfaceTexture); + status_t setSurface(const sp &surface); + status_t setSurfaceTexture(const sp &surfaceTexture); void setAudioSink(const sp &audioSink); status_t setLooping(bool shouldLoop); @@ -298,7 +298,7 @@ private: void postAudioSeekComplete_l(); void shutdownVideoDecoder_l(); - void setNativeWindow_l(const sp &native); + status_t setNativeWindow_l(const sp &native); bool isStreamingHTTP() const; void sendCacheStats(); diff --git a/services/audioflinger/AudioFlinger.cpp b/services/audioflinger/AudioFlinger.cpp index 744fa50..d617af8 100644 --- a/services/audioflinger/AudioFlinger.cpp +++ b/services/audioflinger/AudioFlinger.cpp @@ -151,7 +151,7 @@ static const char *audio_interfaces[] = { AudioFlinger::AudioFlinger() : BnAudioFlinger(), mPrimaryHardwareDev(0), mMasterVolume(1.0f), mMasterMute(false), mNextUniqueId(1), - mBtNrec(false) + mBtNrecIsOff(false) { } @@ -751,15 +751,15 @@ status_t AudioFlinger::setParameters(int ioHandle, const String8& keyValuePairs) String8 value; if (param.get(String8(AUDIO_PARAMETER_KEY_BT_NREC), value) == NO_ERROR) { Mutex::Autolock _l(mLock); - bool btNrec = (value == AUDIO_PARAMETER_VALUE_ON); - if (mBtNrec != btNrec) { + bool btNrecIsOff = (value == AUDIO_PARAMETER_VALUE_OFF); + if (mBtNrecIsOff != btNrecIsOff) { for (size_t i = 0; i < mRecordThreads.size(); i++) { sp thread = mRecordThreads.valueAt(i); RecordThread::RecordTrack *track = thread->track(); if (track != NULL) { audio_devices_t device = (audio_devices_t)( thread->device() & AUDIO_DEVICE_IN_ALL); - bool suspend = audio_is_bluetooth_sco_device(device) && btNrec; + bool suspend = audio_is_bluetooth_sco_device(device) && btNrecIsOff; thread->setEffectSuspended(FX_IID_AEC, suspend, track->sessionId()); @@ -768,7 +768,7 @@ status_t AudioFlinger::setParameters(int ioHandle, const String8& keyValuePairs) track->sessionId()); } } - mBtNrec = btNrec; + mBtNrecIsOff = btNrecIsOff; } } return final_result; @@ -4394,7 +4394,7 @@ sp AudioFlinger::RecordThread::createR mTrack = track.get(); // disable AEC and NS if the device is a BT SCO headset supporting those pre processings bool suspend = audio_is_bluetooth_sco_device( - (audio_devices_t)(mDevice & AUDIO_DEVICE_IN_ALL)) && mAudioFlinger->btNrec(); + (audio_devices_t)(mDevice & AUDIO_DEVICE_IN_ALL)) && mAudioFlinger->btNrecIsOff(); setEffectSuspended_l(FX_IID_AEC, suspend, sessionId); setEffectSuspended_l(FX_IID_NS, suspend, sessionId); } @@ -4619,7 +4619,7 @@ bool AudioFlinger::RecordThread::checkForNewParameters_l() // disable AEC and NS if the device is a BT SCO headset supporting those pre processings if (mTrack != NULL) { bool suspend = audio_is_bluetooth_sco_device( - (audio_devices_t)value) && mAudioFlinger->btNrec(); + (audio_devices_t)value) && mAudioFlinger->btNrecIsOff(); setEffectSuspended_l(FX_IID_AEC, suspend, mTrack->sessionId()); setEffectSuspended_l(FX_IID_NS, suspend, mTrack->sessionId()); } diff --git a/services/audioflinger/AudioFlinger.h b/services/audioflinger/AudioFlinger.h index 1141f6c..1ceb0ec 100644 --- a/services/audioflinger/AudioFlinger.h +++ b/services/audioflinger/AudioFlinger.h @@ -210,7 +210,7 @@ public: uint32_t getMode() { return mMode; } - bool btNrec() { return mBtNrec; } + bool btNrecIsOff() { return mBtNrecIsOff; } private: AudioFlinger(); @@ -1389,7 +1389,7 @@ private: DefaultKeyedVector< pid_t, sp > mNotificationClients; volatile int32_t mNextUniqueId; uint32_t mMode; - bool mBtNrec; + bool mBtNrecIsOff; Vector mAudioSessionRefs; }; -- cgit v1.1 From 1be9f48546785878c42fd7d750f9c8bdd9b9cd84 Mon Sep 17 00:00:00 2001 From: Dave Burke Date: Tue, 6 Sep 2011 20:39:47 +0100 Subject: Handle setDataSource failures properly. #5261671 Change-Id: Iea0aa474d1939db23da9aabdfae2081e834f30d9 --- media/libmedia/mediaplayer.cpp | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/media/libmedia/mediaplayer.cpp b/media/libmedia/mediaplayer.cpp index 0fc6a8a..37a82e9 100644 --- a/media/libmedia/mediaplayer.cpp +++ b/media/libmedia/mediaplayer.cpp @@ -148,10 +148,10 @@ status_t MediaPlayer::setDataSource( const sp& service(getMediaPlayerService()); if (service != 0) { sp player(service->create(getpid(), this, mAudioSessionId)); - err = attachNewPlayer(player); - if (err == NO_ERROR) { - err = mPlayer->setDataSource(url, headers); + if (NO_ERROR != player->setDataSource(url, headers)) { + player.clear(); } + err = attachNewPlayer(player); } } return err; @@ -164,10 +164,10 @@ status_t MediaPlayer::setDataSource(int fd, int64_t offset, int64_t length) const sp& service(getMediaPlayerService()); if (service != 0) { sp player(service->create(getpid(), this, mAudioSessionId)); - err = attachNewPlayer(player); - if (err == NO_ERROR) { - err = mPlayer->setDataSource(fd, offset, length); + if (NO_ERROR != player->setDataSource(fd, offset, length)) { + player.clear(); } + err = attachNewPlayer(player); } return err; } @@ -179,10 +179,10 @@ status_t MediaPlayer::setDataSource(const sp &source) const sp& service(getMediaPlayerService()); if (service != 0) { sp player(service->create(getpid(), this, mAudioSessionId)); - err = attachNewPlayer(player); - if (err == NO_ERROR) { - err = mPlayer->setDataSource(source); + if (NO_ERROR != player->setDataSource(source)) { + player.clear(); } + err = attachNewPlayer(player); } return err; } -- cgit v1.1 From 2bff975a172e452462c95c25cc5f16ae5040c02f Mon Sep 17 00:00:00 2001 From: Glenn Kasten Date: Wed, 7 Sep 2011 14:40:23 -0700 Subject: Bug 5270905 fix MediaPlayer with IStreamSource Change-Id: Ia8a6381a6c88b4a0a1378aab03f5275f0fa1125a --- media/libmedia/IMediaPlayer.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/media/libmedia/IMediaPlayer.cpp b/media/libmedia/IMediaPlayer.cpp index bd89ad8..50a41ca 100644 --- a/media/libmedia/IMediaPlayer.cpp +++ b/media/libmedia/IMediaPlayer.cpp @@ -108,6 +108,7 @@ public: Parcel data, reply; data.writeInterfaceToken(IMediaPlayer::getInterfaceDescriptor()); data.writeStrongBinder(source->asBinder()); + remote()->transact(SET_DATA_SOURCE_STREAM, data, &reply); return reply.readInt32(); } -- cgit v1.1