Loading media/libmediaplayerservice/nuplayer/NuPlayer.cpp +87 −86 Original line number Diff line number Diff line Loading @@ -306,10 +306,6 @@ void NuPlayer::pause() { (new AMessage(kWhatPause, id()))->post(); } void NuPlayer::resume() { (new AMessage(kWhatResume, id()))->post(); } void NuPlayer::resetAsync() { if (mSource != NULL) { // During a reset, the data source might be unresponsive already, we need to Loading Loading @@ -574,69 +570,11 @@ void NuPlayer::onMessageReceived(const sp<AMessage> &msg) { case kWhatStart: { ALOGV("kWhatStart"); mVideoIsAVC = false; mOffloadAudio = false; mAudioEOS = false; mVideoEOS = false; mSkipRenderingAudioUntilMediaTimeUs = -1; mSkipRenderingVideoUntilMediaTimeUs = -1; mNumFramesTotal = 0; mNumFramesDropped = 0; mStarted = true; /* instantiate decoders now for secure playback */ if (mSourceFlags & Source::FLAG_SECURE) { if (mNativeWindow != NULL) { instantiateDecoder(false, &mVideoDecoder); } if (mAudioSink != NULL) { instantiateDecoder(true, &mAudioDecoder); } } mSource->start(); uint32_t flags = 0; if (mSource->isRealTime()) { flags |= Renderer::FLAG_REAL_TIME; } sp<MetaData> audioMeta = mSource->getFormatMeta(true /* audio */); audio_stream_type_t streamType = AUDIO_STREAM_MUSIC; if (mAudioSink != NULL) { streamType = mAudioSink->getAudioStreamType(); } sp<AMessage> videoFormat = mSource->getFormat(false /* audio */); mOffloadAudio = canOffloadStream(audioMeta, (videoFormat != NULL), true /* is_streaming */, streamType); if (mOffloadAudio) { flags |= Renderer::FLAG_OFFLOAD_AUDIO; } sp<AMessage> notify = new AMessage(kWhatRendererNotify, id()); ++mRendererGeneration; notify->setInt32("generation", mRendererGeneration); mRenderer = new Renderer(mAudioSink, notify, flags); mRendererLooper = new ALooper; mRendererLooper->setName("NuPlayerRenderer"); mRendererLooper->start(false, false, ANDROID_PRIORITY_AUDIO); mRendererLooper->registerHandler(mRenderer); sp<MetaData> meta = getFileMeta(); int32_t rate; if (meta != NULL && meta->findInt32(kKeyFrameRate, &rate) && rate > 0) { mRenderer->setVideoFrameRate(rate); if (mStarted) { onResume(); } else { onStart(); } postScanSources(); break; } Loading Loading @@ -979,8 +917,25 @@ void NuPlayer::onMessageReceived(const sp<AMessage> &msg) { break; } case kWhatResume: case kWhatSourceNotify: { onSourceNotify(msg); break; } case kWhatClosedCaptionNotify: { onClosedCaptionNotify(msg); break; } default: TRESPASS(); break; } } void NuPlayer::onResume() { if (mSource != NULL) { mSource->resume(); } else { Loading @@ -996,25 +951,71 @@ void NuPlayer::onMessageReceived(const sp<AMessage> &msg) { } else { ALOGW("resume called when renderer is gone or not set"); } break; } case kWhatSourceNotify: { onSourceNotify(msg); break; void NuPlayer::onStart() { mVideoIsAVC = false; mOffloadAudio = false; mAudioEOS = false; mVideoEOS = false; mSkipRenderingAudioUntilMediaTimeUs = -1; mSkipRenderingVideoUntilMediaTimeUs = -1; mNumFramesTotal = 0; mNumFramesDropped = 0; mStarted = true; /* instantiate decoders now for secure playback */ if (mSourceFlags & Source::FLAG_SECURE) { if (mNativeWindow != NULL) { instantiateDecoder(false, &mVideoDecoder); } case kWhatClosedCaptionNotify: { onClosedCaptionNotify(msg); break; if (mAudioSink != NULL) { instantiateDecoder(true, &mAudioDecoder); } } default: TRESPASS(); break; mSource->start(); uint32_t flags = 0; if (mSource->isRealTime()) { flags |= Renderer::FLAG_REAL_TIME; } sp<MetaData> audioMeta = mSource->getFormatMeta(true /* audio */); audio_stream_type_t streamType = AUDIO_STREAM_MUSIC; if (mAudioSink != NULL) { streamType = mAudioSink->getAudioStreamType(); } sp<AMessage> videoFormat = mSource->getFormat(false /* audio */); mOffloadAudio = canOffloadStream(audioMeta, (videoFormat != NULL), true /* is_streaming */, streamType); if (mOffloadAudio) { flags |= Renderer::FLAG_OFFLOAD_AUDIO; } sp<AMessage> notify = new AMessage(kWhatRendererNotify, id()); ++mRendererGeneration; notify->setInt32("generation", mRendererGeneration); mRenderer = new Renderer(mAudioSink, notify, flags); mRendererLooper = new ALooper; mRendererLooper->setName("NuPlayerRenderer"); mRendererLooper->start(false, false, ANDROID_PRIORITY_AUDIO); mRendererLooper->registerHandler(mRenderer); sp<MetaData> meta = getFileMeta(); int32_t rate; if (meta != NULL && meta->findInt32(kKeyFrameRate, &rate) && rate > 0) { mRenderer->setVideoFrameRate(rate); } postScanSources(); } bool NuPlayer::audioDecoderStillNeeded() { Loading media/libmediaplayerservice/nuplayer/NuPlayer.h +3 −1 Original line number Diff line number Diff line Loading @@ -54,7 +54,6 @@ struct NuPlayer : public AHandler { void start(); void pause(); void resume(); // Will notify the driver through "notifyResetComplete" once finished. void resetAsync(); Loading Loading @@ -213,6 +212,9 @@ private: void handleFlushComplete(bool audio, bool isDecoder); void finishFlushIfPossible(); void onStart(); void onResume(); bool audioDecoderStillNeeded(); void flushDecoder( Loading media/libmediaplayerservice/nuplayer/NuPlayerDriver.cpp +13 −18 Original line number Diff line number Diff line Loading @@ -239,16 +239,24 @@ status_t NuPlayerDriver::start() { // fall through } case STATE_PAUSED: case STATE_STOPPED_AND_PREPARED: { if (mAtEOS && mStartupSeekTimeUs < 0) { mStartupSeekTimeUs = 0; mPositionUs = -1; } // fall through } case STATE_PREPARED: { mAtEOS = false; mPlayer->start(); if (mStartupSeekTimeUs >= 0) { if (mStartupSeekTimeUs > 0) { mPlayer->seekToAsync(mStartupSeekTimeUs); } mStartupSeekTimeUs = -1; } break; Loading @@ -264,20 +272,6 @@ status_t NuPlayerDriver::start() { break; } case STATE_PAUSED: case STATE_STOPPED_AND_PREPARED: { if (mAtEOS) { mPlayer->seekToAsync(0); mAtEOS = false; mPlayer->resume(); mPositionUs = -1; } else { mPlayer->resume(); } break; } default: return INVALID_OPERATION; } Loading Loading @@ -348,6 +342,7 @@ status_t NuPlayerDriver::seekTo(int msec) { switch (mState) { case STATE_PREPARED: case STATE_STOPPED_AND_PREPARED: { mStartupSeekTimeUs = seekTimeUs; // pretend that the seek completed. It will actually happen when starting playback. Loading Loading
media/libmediaplayerservice/nuplayer/NuPlayer.cpp +87 −86 Original line number Diff line number Diff line Loading @@ -306,10 +306,6 @@ void NuPlayer::pause() { (new AMessage(kWhatPause, id()))->post(); } void NuPlayer::resume() { (new AMessage(kWhatResume, id()))->post(); } void NuPlayer::resetAsync() { if (mSource != NULL) { // During a reset, the data source might be unresponsive already, we need to Loading Loading @@ -574,69 +570,11 @@ void NuPlayer::onMessageReceived(const sp<AMessage> &msg) { case kWhatStart: { ALOGV("kWhatStart"); mVideoIsAVC = false; mOffloadAudio = false; mAudioEOS = false; mVideoEOS = false; mSkipRenderingAudioUntilMediaTimeUs = -1; mSkipRenderingVideoUntilMediaTimeUs = -1; mNumFramesTotal = 0; mNumFramesDropped = 0; mStarted = true; /* instantiate decoders now for secure playback */ if (mSourceFlags & Source::FLAG_SECURE) { if (mNativeWindow != NULL) { instantiateDecoder(false, &mVideoDecoder); } if (mAudioSink != NULL) { instantiateDecoder(true, &mAudioDecoder); } } mSource->start(); uint32_t flags = 0; if (mSource->isRealTime()) { flags |= Renderer::FLAG_REAL_TIME; } sp<MetaData> audioMeta = mSource->getFormatMeta(true /* audio */); audio_stream_type_t streamType = AUDIO_STREAM_MUSIC; if (mAudioSink != NULL) { streamType = mAudioSink->getAudioStreamType(); } sp<AMessage> videoFormat = mSource->getFormat(false /* audio */); mOffloadAudio = canOffloadStream(audioMeta, (videoFormat != NULL), true /* is_streaming */, streamType); if (mOffloadAudio) { flags |= Renderer::FLAG_OFFLOAD_AUDIO; } sp<AMessage> notify = new AMessage(kWhatRendererNotify, id()); ++mRendererGeneration; notify->setInt32("generation", mRendererGeneration); mRenderer = new Renderer(mAudioSink, notify, flags); mRendererLooper = new ALooper; mRendererLooper->setName("NuPlayerRenderer"); mRendererLooper->start(false, false, ANDROID_PRIORITY_AUDIO); mRendererLooper->registerHandler(mRenderer); sp<MetaData> meta = getFileMeta(); int32_t rate; if (meta != NULL && meta->findInt32(kKeyFrameRate, &rate) && rate > 0) { mRenderer->setVideoFrameRate(rate); if (mStarted) { onResume(); } else { onStart(); } postScanSources(); break; } Loading Loading @@ -979,8 +917,25 @@ void NuPlayer::onMessageReceived(const sp<AMessage> &msg) { break; } case kWhatResume: case kWhatSourceNotify: { onSourceNotify(msg); break; } case kWhatClosedCaptionNotify: { onClosedCaptionNotify(msg); break; } default: TRESPASS(); break; } } void NuPlayer::onResume() { if (mSource != NULL) { mSource->resume(); } else { Loading @@ -996,25 +951,71 @@ void NuPlayer::onMessageReceived(const sp<AMessage> &msg) { } else { ALOGW("resume called when renderer is gone or not set"); } break; } case kWhatSourceNotify: { onSourceNotify(msg); break; void NuPlayer::onStart() { mVideoIsAVC = false; mOffloadAudio = false; mAudioEOS = false; mVideoEOS = false; mSkipRenderingAudioUntilMediaTimeUs = -1; mSkipRenderingVideoUntilMediaTimeUs = -1; mNumFramesTotal = 0; mNumFramesDropped = 0; mStarted = true; /* instantiate decoders now for secure playback */ if (mSourceFlags & Source::FLAG_SECURE) { if (mNativeWindow != NULL) { instantiateDecoder(false, &mVideoDecoder); } case kWhatClosedCaptionNotify: { onClosedCaptionNotify(msg); break; if (mAudioSink != NULL) { instantiateDecoder(true, &mAudioDecoder); } } default: TRESPASS(); break; mSource->start(); uint32_t flags = 0; if (mSource->isRealTime()) { flags |= Renderer::FLAG_REAL_TIME; } sp<MetaData> audioMeta = mSource->getFormatMeta(true /* audio */); audio_stream_type_t streamType = AUDIO_STREAM_MUSIC; if (mAudioSink != NULL) { streamType = mAudioSink->getAudioStreamType(); } sp<AMessage> videoFormat = mSource->getFormat(false /* audio */); mOffloadAudio = canOffloadStream(audioMeta, (videoFormat != NULL), true /* is_streaming */, streamType); if (mOffloadAudio) { flags |= Renderer::FLAG_OFFLOAD_AUDIO; } sp<AMessage> notify = new AMessage(kWhatRendererNotify, id()); ++mRendererGeneration; notify->setInt32("generation", mRendererGeneration); mRenderer = new Renderer(mAudioSink, notify, flags); mRendererLooper = new ALooper; mRendererLooper->setName("NuPlayerRenderer"); mRendererLooper->start(false, false, ANDROID_PRIORITY_AUDIO); mRendererLooper->registerHandler(mRenderer); sp<MetaData> meta = getFileMeta(); int32_t rate; if (meta != NULL && meta->findInt32(kKeyFrameRate, &rate) && rate > 0) { mRenderer->setVideoFrameRate(rate); } postScanSources(); } bool NuPlayer::audioDecoderStillNeeded() { Loading
media/libmediaplayerservice/nuplayer/NuPlayer.h +3 −1 Original line number Diff line number Diff line Loading @@ -54,7 +54,6 @@ struct NuPlayer : public AHandler { void start(); void pause(); void resume(); // Will notify the driver through "notifyResetComplete" once finished. void resetAsync(); Loading Loading @@ -213,6 +212,9 @@ private: void handleFlushComplete(bool audio, bool isDecoder); void finishFlushIfPossible(); void onStart(); void onResume(); bool audioDecoderStillNeeded(); void flushDecoder( Loading
media/libmediaplayerservice/nuplayer/NuPlayerDriver.cpp +13 −18 Original line number Diff line number Diff line Loading @@ -239,16 +239,24 @@ status_t NuPlayerDriver::start() { // fall through } case STATE_PAUSED: case STATE_STOPPED_AND_PREPARED: { if (mAtEOS && mStartupSeekTimeUs < 0) { mStartupSeekTimeUs = 0; mPositionUs = -1; } // fall through } case STATE_PREPARED: { mAtEOS = false; mPlayer->start(); if (mStartupSeekTimeUs >= 0) { if (mStartupSeekTimeUs > 0) { mPlayer->seekToAsync(mStartupSeekTimeUs); } mStartupSeekTimeUs = -1; } break; Loading @@ -264,20 +272,6 @@ status_t NuPlayerDriver::start() { break; } case STATE_PAUSED: case STATE_STOPPED_AND_PREPARED: { if (mAtEOS) { mPlayer->seekToAsync(0); mAtEOS = false; mPlayer->resume(); mPositionUs = -1; } else { mPlayer->resume(); } break; } default: return INVALID_OPERATION; } Loading Loading @@ -348,6 +342,7 @@ status_t NuPlayerDriver::seekTo(int msec) { switch (mState) { case STATE_PREPARED: case STATE_STOPPED_AND_PREPARED: { mStartupSeekTimeUs = seekTimeUs; // pretend that the seek completed. It will actually happen when starting playback. Loading