diff options
Diffstat (limited to 'media/libmediaplayerservice/nuplayer/NuPlayerRenderer.cpp')
| -rw-r--r-- | media/libmediaplayerservice/nuplayer/NuPlayerRenderer.cpp | 45 | 
1 files changed, 28 insertions, 17 deletions
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<AMessage> &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<ABuffer> firstAudioBuffer = (*mAudioQueue.begin()).mBuffer; +    sp<ABuffer> 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() {  | 
