From dc5f0eb0bb08885f63a97a111b02e234efc5c413 Mon Sep 17 00:00:00 2001 From: Xiaoming Yang Date: Mon, 30 Mar 2015 18:05:45 +0800 Subject: nuplayer: Fix audio EOS notifiy on AudioSink not ready Audio EOS won't be notified by renderer if AudioSink is not ready and first buffer itself has EOS. Playback complete won't happen due to missing audio EOS. Hence, audio EOS needs to be handled and notified. Change-Id: I779c7034d1964485c2b064c0179d3cd341af5a5f CRs-Fixed: 801121 --- media/libmediaplayerservice/nuplayer/NuPlayerRenderer.cpp | 12 ++++++++++++ 1 file changed, 12 insertions(+) (limited to 'media/libmediaplayerservice/nuplayer') diff --git a/media/libmediaplayerservice/nuplayer/NuPlayerRenderer.cpp b/media/libmediaplayerservice/nuplayer/NuPlayerRenderer.cpp index 9cf6b62..4135426 100644 --- a/media/libmediaplayerservice/nuplayer/NuPlayerRenderer.cpp +++ b/media/libmediaplayerservice/nuplayer/NuPlayerRenderer.cpp @@ -850,6 +850,18 @@ bool NuPlayer::Renderer::onDrainAudioQueue() { // immediately after start. Investigate error message // "vorbis_dsp_synthesis returned -135", along with RTSP. uint32_t numFramesPlayed; + if(!mAudioSink->ready() && !mAudioQueue.empty()) { + while (!mAudioQueue.empty()) { + QueueEntry *entry = &*mAudioQueue.begin(); + if (entry->mBuffer == NULL) { + notifyEOS(true /* audio */, entry->mFinalResult); + } + mAudioQueue.erase(mAudioQueue.begin()); + entry = NULL; + } + return false; + } + if (mAudioSink->getPosition(&numFramesPlayed) != OK) { // When getPosition fails, renderer will not reschedule the draining // unless new samples are queued. -- cgit v1.1