Loading media/libstagefright/LPAPlayer.cpp +25 −9 Original line number Original line Diff line number Diff line Loading @@ -402,6 +402,7 @@ status_t LPAPlayer::start(bool sourceAlreadyStarted) { } } status_t LPAPlayer::seekTo(int64_t time_us) { status_t LPAPlayer::seekTo(int64_t time_us) { Mutex::Autolock autoLock1(mSeekLock); Mutex::Autolock autoLock(mLock); Mutex::Autolock autoLock(mLock); LOGV("seekTo: time_us %ld", time_us); LOGV("seekTo: time_us %ld", time_us); if ( mReachedEOS ) { if ( mReachedEOS ) { Loading @@ -425,6 +426,21 @@ status_t LPAPlayer::seekTo(int64_t time_us) { } } } } #endif #endif pthread_mutex_lock(&mem_response_mutex); pthread_mutex_lock(&mem_request_mutex); LOGV("Response queue size %d:", memBuffersResponseQueue.size()); LOGV("Request queue size %d:", memBuffersRequestQueue.size()); while (!memBuffersResponseQueue.empty()) { List<BuffersAllocated>::iterator it = memBuffersResponseQueue.begin(); BuffersAllocated buf = *it; buf.bytesToWrite = 0; memBuffersRequestQueue.push_back(buf); memBuffersResponseQueue.erase(it); } LOGV("Response queue size %d:", memBuffersResponseQueue.size()); LOGV("Request queue size %d:", memBuffersRequestQueue.size()); pthread_mutex_unlock(&mem_request_mutex); pthread_mutex_unlock(&mem_response_mutex); if (ioctl(afd, AUDIO_FLUSH, 0) < 0) { if (ioctl(afd, AUDIO_FLUSH, 0) < 0) { LOGE("Audio Flush failed"); LOGE("Audio Flush failed"); } } Loading Loading @@ -791,6 +807,7 @@ void LPAPlayer::decoderThreadEntry() { //Queue up the buffers for writing either for A2DP or LPA Driver //Queue up the buffers for writing either for A2DP or LPA Driver else { else { struct msm_audio_aio_buf aio_buf_local; struct msm_audio_aio_buf aio_buf_local; Mutex::Autolock autoLock(mSeekLock); if(bIsA2DPEnabled && isPaused){ if(bIsA2DPEnabled && isPaused){ pthread_mutex_lock(&mem_response_mutex); pthread_mutex_lock(&mem_response_mutex); buf.bytesToWrite = 0; buf.bytesToWrite = 0; Loading Loading @@ -951,6 +968,14 @@ void LPAPlayer::eventThreadEntry() { if (it->memBuf == cur_pcmdec_event.event_payload.aio_buf.buf_addr) { if (it->memBuf == cur_pcmdec_event.event_payload.aio_buf.buf_addr) { buf = *it; buf = *it; memBuffersResponseQueue.erase(it); memBuffersResponseQueue.erase(it); // Post buffer to request Q LOGV("mem_request_mutex locking: %d", __LINE__); pthread_mutex_lock(&mem_request_mutex); LOGV("mem_request_mutex locked: %d", __LINE__); memBuffersRequestQueue.push_back(buf); LOGV("mem_request_mutex unlocking: %d", __LINE__); pthread_mutex_unlock(&mem_request_mutex); LOGV("mem_request_mutex unlocked: %d", __LINE__); break; break; } } } } Loading Loading @@ -989,15 +1014,6 @@ void LPAPlayer::eventThreadEntry() { pthread_mutex_unlock(&mem_response_mutex); pthread_mutex_unlock(&mem_response_mutex); // Post buffer to request Q LOGV("mem_request_mutex locking: %d", __LINE__); pthread_mutex_lock(&mem_request_mutex); LOGV("mem_request_mutex locked: %d", __LINE__); memBuffersRequestQueue.push_back(buf); LOGV("mem_request_mutex unlocking: %d", __LINE__); pthread_mutex_unlock(&mem_request_mutex); LOGV("mem_request_mutex unlocked: %d", __LINE__); pthread_cond_signal(&decoder_cv); pthread_cond_signal(&decoder_cv); } } break; break; Loading Loading
media/libstagefright/LPAPlayer.cpp +25 −9 Original line number Original line Diff line number Diff line Loading @@ -402,6 +402,7 @@ status_t LPAPlayer::start(bool sourceAlreadyStarted) { } } status_t LPAPlayer::seekTo(int64_t time_us) { status_t LPAPlayer::seekTo(int64_t time_us) { Mutex::Autolock autoLock1(mSeekLock); Mutex::Autolock autoLock(mLock); Mutex::Autolock autoLock(mLock); LOGV("seekTo: time_us %ld", time_us); LOGV("seekTo: time_us %ld", time_us); if ( mReachedEOS ) { if ( mReachedEOS ) { Loading @@ -425,6 +426,21 @@ status_t LPAPlayer::seekTo(int64_t time_us) { } } } } #endif #endif pthread_mutex_lock(&mem_response_mutex); pthread_mutex_lock(&mem_request_mutex); LOGV("Response queue size %d:", memBuffersResponseQueue.size()); LOGV("Request queue size %d:", memBuffersRequestQueue.size()); while (!memBuffersResponseQueue.empty()) { List<BuffersAllocated>::iterator it = memBuffersResponseQueue.begin(); BuffersAllocated buf = *it; buf.bytesToWrite = 0; memBuffersRequestQueue.push_back(buf); memBuffersResponseQueue.erase(it); } LOGV("Response queue size %d:", memBuffersResponseQueue.size()); LOGV("Request queue size %d:", memBuffersRequestQueue.size()); pthread_mutex_unlock(&mem_request_mutex); pthread_mutex_unlock(&mem_response_mutex); if (ioctl(afd, AUDIO_FLUSH, 0) < 0) { if (ioctl(afd, AUDIO_FLUSH, 0) < 0) { LOGE("Audio Flush failed"); LOGE("Audio Flush failed"); } } Loading Loading @@ -791,6 +807,7 @@ void LPAPlayer::decoderThreadEntry() { //Queue up the buffers for writing either for A2DP or LPA Driver //Queue up the buffers for writing either for A2DP or LPA Driver else { else { struct msm_audio_aio_buf aio_buf_local; struct msm_audio_aio_buf aio_buf_local; Mutex::Autolock autoLock(mSeekLock); if(bIsA2DPEnabled && isPaused){ if(bIsA2DPEnabled && isPaused){ pthread_mutex_lock(&mem_response_mutex); pthread_mutex_lock(&mem_response_mutex); buf.bytesToWrite = 0; buf.bytesToWrite = 0; Loading Loading @@ -951,6 +968,14 @@ void LPAPlayer::eventThreadEntry() { if (it->memBuf == cur_pcmdec_event.event_payload.aio_buf.buf_addr) { if (it->memBuf == cur_pcmdec_event.event_payload.aio_buf.buf_addr) { buf = *it; buf = *it; memBuffersResponseQueue.erase(it); memBuffersResponseQueue.erase(it); // Post buffer to request Q LOGV("mem_request_mutex locking: %d", __LINE__); pthread_mutex_lock(&mem_request_mutex); LOGV("mem_request_mutex locked: %d", __LINE__); memBuffersRequestQueue.push_back(buf); LOGV("mem_request_mutex unlocking: %d", __LINE__); pthread_mutex_unlock(&mem_request_mutex); LOGV("mem_request_mutex unlocked: %d", __LINE__); break; break; } } } } Loading Loading @@ -989,15 +1014,6 @@ void LPAPlayer::eventThreadEntry() { pthread_mutex_unlock(&mem_response_mutex); pthread_mutex_unlock(&mem_response_mutex); // Post buffer to request Q LOGV("mem_request_mutex locking: %d", __LINE__); pthread_mutex_lock(&mem_request_mutex); LOGV("mem_request_mutex locked: %d", __LINE__); memBuffersRequestQueue.push_back(buf); LOGV("mem_request_mutex unlocking: %d", __LINE__); pthread_mutex_unlock(&mem_request_mutex); LOGV("mem_request_mutex unlocked: %d", __LINE__); pthread_cond_signal(&decoder_cv); pthread_cond_signal(&decoder_cv); } } break; break; Loading