Merge "Camera2: Fix potential deadlock" into jb-mr1-dev
diff --git a/media/libeffects/lvm/lib/Bass/src/LVDBE_Init.c b/media/libeffects/lvm/lib/Bass/src/LVDBE_Init.c
index 3b3c07c..32c4ce0 100644
--- a/media/libeffects/lvm/lib/Bass/src/LVDBE_Init.c
+++ b/media/libeffects/lvm/lib/Bass/src/LVDBE_Init.c
@@ -232,6 +232,10 @@
pInstance->pData->AGCInstance.AGC_Gain = pInstance->pData->AGCInstance.AGC_MaxGain;
/* Default to the bass boost setting */
+ // initialize the mixer with some fixes values since otherwise LVDBE_SetVolume ends up
+ // reading uninitialized data
+ pMixer_Instance = &pInstance->pData->BypassVolume;
+ LVC_Mixer_Init(&pMixer_Instance->MixerStream[0],0x00007FFF,0x00007FFF);
/*
* Initialise the volume
@@ -242,7 +246,6 @@
pInstance->pData->AGCInstance.Volume = pInstance->pData->AGCInstance.Target;
/* Initialise as the target */
- pMixer_Instance = &pInstance->pData->BypassVolume;
MixGain = LVC_Mixer_GetTarget(&pMixer_Instance->MixerStream[0]);
LVC_Mixer_Init(&pMixer_Instance->MixerStream[0],MixGain,MixGain);
diff --git a/media/libeffects/lvm/lib/Eq/src/LVEQNB_Init.c b/media/libeffects/lvm/lib/Eq/src/LVEQNB_Init.c
index e83e515..c4767a8 100644
--- a/media/libeffects/lvm/lib/Eq/src/LVEQNB_Init.c
+++ b/media/libeffects/lvm/lib/Eq/src/LVEQNB_Init.c
@@ -264,6 +264,9 @@
MemSize = (pCapabilities->MaxBands * sizeof(LVEQNB_BandDef_t));
pInstance->pBandDefinitions = (LVEQNB_BandDef_t *)InstAlloc_AddMember(&AllocMem,
MemSize);
+ // clear all the bands, setting their gain to 0, otherwise when applying new params,
+ // it will compare against uninitialized values
+ memset(pInstance->pBandDefinitions, 0, MemSize);
MemSize = (pCapabilities->MaxBands * sizeof(LVEQNB_BiquadType_en));
pInstance->pBiquadType = (LVEQNB_BiquadType_en *)InstAlloc_AddMember(&AllocMem,
MemSize);
diff --git a/media/libeffects/lvm/wrapper/Bundle/EffectBundle.cpp b/media/libeffects/lvm/wrapper/Bundle/EffectBundle.cpp
index 2eae7df..d706c2d 100644
--- a/media/libeffects/lvm/wrapper/Bundle/EffectBundle.cpp
+++ b/media/libeffects/lvm/wrapper/Bundle/EffectBundle.cpp
@@ -2737,7 +2737,7 @@
outBuffer->s16[i] =
clamp16((LVM_INT32)outBuffer->s16[i] + (LVM_INT32)inBuffer->s16[i]);
}
- } else {
+ } else if (outBuffer->raw != inBuffer->raw) {
memcpy(outBuffer->raw, inBuffer->raw, outBuffer->frameCount*sizeof(LVM_INT16)*2);
}
}
diff --git a/media/libstagefright/AwesomePlayer.cpp b/media/libstagefright/AwesomePlayer.cpp
index 0cb378d..685e676 100644
--- a/media/libstagefright/AwesomePlayer.cpp
+++ b/media/libstagefright/AwesomePlayer.cpp
@@ -1504,6 +1504,7 @@
status_t err = mVideoSource->start();
if (err != OK) {
+ ALOGE("failed to start video source");
mVideoSource.clear();
return err;
}
diff --git a/media/libstagefright/OMXCodec.cpp b/media/libstagefright/OMXCodec.cpp
index 07f92c7..70de174 100755
--- a/media/libstagefright/OMXCodec.cpp
+++ b/media/libstagefright/OMXCodec.cpp
@@ -1689,6 +1689,8 @@
if (transform) {
err = native_window_set_buffers_transform(
mNativeWindow.get(), transform);
+ ALOGE("native_window_set_buffers_transform failed: %s (%d)",
+ strerror(-err), -err);
}
return err;
@@ -1703,6 +1705,7 @@
status_t err = mOMX->getParameter(
mNode, OMX_IndexParamPortDefinition, &def, sizeof(def));
if (err != OK) {
+ CODEC_LOGE("getParameter failed: %d", err);
return err;
}
@@ -3606,6 +3609,7 @@
Mutex::Autolock autoLock(mLock);
if (mState != LOADED) {
+ CODEC_LOGE("called start in the unexpected state: %d", mState);
return UNKNOWN_ERROR;
}
@@ -3639,12 +3643,14 @@
// if supported, the source to use exactly the same number of input
// buffers as requested by the encoder.
if ((err = init()) != OK) {
+ CODEC_LOGE("init failed: %d", err);
return err;
}
params->setInt32(kKeyNumBuffers, mPortBuffers[kPortIndexInput].size());
err = mSource->start(params.get());
if (err != OK) {
+ CODEC_LOGE("source failed to start: %d", err);
stopOmxComponent_l();
}
return err;
@@ -3652,6 +3658,7 @@
// Decoder case
if ((err = mSource->start(params.get())) != OK) {
+ CODEC_LOGE("source failed to start: %d", err);
return err;
}
return init();
diff --git a/services/audioflinger/AudioFlinger.cpp b/services/audioflinger/AudioFlinger.cpp
index 6a35053..76d6447 100644
--- a/services/audioflinger/AudioFlinger.cpp
+++ b/services/audioflinger/AudioFlinger.cpp
@@ -3033,7 +3033,7 @@
(mOutput->stream->get_latency(mOutput->stream)*mSampleRate) / 1000;
size_t framesWritten =
mBytesWritten / audio_stream_frame_size(&mOutput->stream->common);
- if (!track->presentationComplete(framesWritten, audioHALFrames)) {
+ if (!(mStandby || track->presentationComplete(framesWritten, audioHALFrames))) {
// track stays in active list until presentation is complete
break;
}
@@ -3278,7 +3278,7 @@
size_t audioHALFrames = (latency_l() * mSampleRate) / 1000;
size_t framesWritten =
mBytesWritten / audio_stream_frame_size(&mOutput->stream->common);
- if (track->presentationComplete(framesWritten, audioHALFrames)) {
+ if (mStandby || track->presentationComplete(framesWritten, audioHALFrames)) {
if (track->isStopped()) {
track->reset();
}
@@ -3801,7 +3801,7 @@
size_t audioHALFrames = (latency_l() * mSampleRate) / 1000;
size_t framesWritten =
mBytesWritten / audio_stream_frame_size(&mOutput->stream->common);
- if (track->presentationComplete(framesWritten, audioHALFrames)) {
+ if (mStandby || track->presentationComplete(framesWritten, audioHALFrames)) {
if (track->isStopped()) {
track->reset();
}