Loading media/libmediaplayerservice/nuplayer/NuPlayer.cpp +87 −86 Original line number Original line Diff line number Diff line Loading @@ -306,10 +306,6 @@ void NuPlayer::pause() { (new AMessage(kWhatPause, id()))->post(); (new AMessage(kWhatPause, id()))->post(); } } void NuPlayer::resume() { (new AMessage(kWhatResume, id()))->post(); } void NuPlayer::resetAsync() { void NuPlayer::resetAsync() { if (mSource != NULL) { if (mSource != NULL) { // During a reset, the data source might be unresponsive already, we need to // 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: case kWhatStart: { { ALOGV("kWhatStart"); ALOGV("kWhatStart"); if (mStarted) { mVideoIsAVC = false; onResume(); mOffloadAudio = false; } else { mAudioEOS = false; onStart(); 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); } } postScanSources(); break; break; } } Loading Loading @@ -979,8 +917,25 @@ void NuPlayer::onMessageReceived(const sp<AMessage> &msg) { break; break; } } case kWhatResume: case kWhatSourceNotify: { { onSourceNotify(msg); break; } case kWhatClosedCaptionNotify: { onClosedCaptionNotify(msg); break; } default: TRESPASS(); break; } } void NuPlayer::onResume() { if (mSource != NULL) { if (mSource != NULL) { mSource->resume(); mSource->resume(); } else { } else { Loading @@ -996,25 +951,71 @@ void NuPlayer::onMessageReceived(const sp<AMessage> &msg) { } else { } else { ALOGW("resume called when renderer is gone or not set"); ALOGW("resume called when renderer is gone or not set"); } } break; } } case kWhatSourceNotify: void NuPlayer::onStart() { { mVideoIsAVC = false; onSourceNotify(msg); mOffloadAudio = false; break; 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: if (mAudioSink != NULL) { { instantiateDecoder(true, &mAudioDecoder); onClosedCaptionNotify(msg); } break; } } default: mSource->start(); TRESPASS(); break; 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() { bool NuPlayer::audioDecoderStillNeeded() { Loading media/libmediaplayerservice/nuplayer/NuPlayer.h +3 −1 Original line number Original line Diff line number Diff line Loading @@ -54,7 +54,6 @@ struct NuPlayer : public AHandler { void start(); void start(); void pause(); void pause(); void resume(); // Will notify the driver through "notifyResetComplete" once finished. // Will notify the driver through "notifyResetComplete" once finished. void resetAsync(); void resetAsync(); Loading Loading @@ -213,6 +212,9 @@ private: void handleFlushComplete(bool audio, bool isDecoder); void handleFlushComplete(bool audio, bool isDecoder); void finishFlushIfPossible(); void finishFlushIfPossible(); void onStart(); void onResume(); bool audioDecoderStillNeeded(); bool audioDecoderStillNeeded(); void flushDecoder( void flushDecoder( Loading media/libmediaplayerservice/nuplayer/NuPlayerDriver.cpp +13 −18 Original line number Original line Diff line number Diff line Loading @@ -239,16 +239,24 @@ status_t NuPlayerDriver::start() { // fall through // fall through } } case STATE_PAUSED: case STATE_STOPPED_AND_PREPARED: { if (mAtEOS && mStartupSeekTimeUs < 0) { mStartupSeekTimeUs = 0; mPositionUs = -1; } // fall through } case STATE_PREPARED: case STATE_PREPARED: { { mAtEOS = false; mAtEOS = false; mPlayer->start(); mPlayer->start(); if (mStartupSeekTimeUs >= 0) { if (mStartupSeekTimeUs >= 0) { if (mStartupSeekTimeUs > 0) { mPlayer->seekToAsync(mStartupSeekTimeUs); mPlayer->seekToAsync(mStartupSeekTimeUs); } mStartupSeekTimeUs = -1; mStartupSeekTimeUs = -1; } } break; break; Loading @@ -264,20 +272,6 @@ status_t NuPlayerDriver::start() { break; 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: default: return INVALID_OPERATION; return INVALID_OPERATION; } } Loading Loading @@ -348,6 +342,7 @@ status_t NuPlayerDriver::seekTo(int msec) { switch (mState) { switch (mState) { case STATE_PREPARED: case STATE_PREPARED: case STATE_STOPPED_AND_PREPARED: { { mStartupSeekTimeUs = seekTimeUs; mStartupSeekTimeUs = seekTimeUs; // pretend that the seek completed. It will actually happen when starting playback. // pretend that the seek completed. It will actually happen when starting playback. Loading Loading
media/libmediaplayerservice/nuplayer/NuPlayer.cpp +87 −86 Original line number Original line Diff line number Diff line Loading @@ -306,10 +306,6 @@ void NuPlayer::pause() { (new AMessage(kWhatPause, id()))->post(); (new AMessage(kWhatPause, id()))->post(); } } void NuPlayer::resume() { (new AMessage(kWhatResume, id()))->post(); } void NuPlayer::resetAsync() { void NuPlayer::resetAsync() { if (mSource != NULL) { if (mSource != NULL) { // During a reset, the data source might be unresponsive already, we need to // 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: case kWhatStart: { { ALOGV("kWhatStart"); ALOGV("kWhatStart"); if (mStarted) { mVideoIsAVC = false; onResume(); mOffloadAudio = false; } else { mAudioEOS = false; onStart(); 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); } } postScanSources(); break; break; } } Loading Loading @@ -979,8 +917,25 @@ void NuPlayer::onMessageReceived(const sp<AMessage> &msg) { break; break; } } case kWhatResume: case kWhatSourceNotify: { { onSourceNotify(msg); break; } case kWhatClosedCaptionNotify: { onClosedCaptionNotify(msg); break; } default: TRESPASS(); break; } } void NuPlayer::onResume() { if (mSource != NULL) { if (mSource != NULL) { mSource->resume(); mSource->resume(); } else { } else { Loading @@ -996,25 +951,71 @@ void NuPlayer::onMessageReceived(const sp<AMessage> &msg) { } else { } else { ALOGW("resume called when renderer is gone or not set"); ALOGW("resume called when renderer is gone or not set"); } } break; } } case kWhatSourceNotify: void NuPlayer::onStart() { { mVideoIsAVC = false; onSourceNotify(msg); mOffloadAudio = false; break; 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: if (mAudioSink != NULL) { { instantiateDecoder(true, &mAudioDecoder); onClosedCaptionNotify(msg); } break; } } default: mSource->start(); TRESPASS(); break; 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() { bool NuPlayer::audioDecoderStillNeeded() { Loading
media/libmediaplayerservice/nuplayer/NuPlayer.h +3 −1 Original line number Original line Diff line number Diff line Loading @@ -54,7 +54,6 @@ struct NuPlayer : public AHandler { void start(); void start(); void pause(); void pause(); void resume(); // Will notify the driver through "notifyResetComplete" once finished. // Will notify the driver through "notifyResetComplete" once finished. void resetAsync(); void resetAsync(); Loading Loading @@ -213,6 +212,9 @@ private: void handleFlushComplete(bool audio, bool isDecoder); void handleFlushComplete(bool audio, bool isDecoder); void finishFlushIfPossible(); void finishFlushIfPossible(); void onStart(); void onResume(); bool audioDecoderStillNeeded(); bool audioDecoderStillNeeded(); void flushDecoder( void flushDecoder( Loading
media/libmediaplayerservice/nuplayer/NuPlayerDriver.cpp +13 −18 Original line number Original line Diff line number Diff line Loading @@ -239,16 +239,24 @@ status_t NuPlayerDriver::start() { // fall through // fall through } } case STATE_PAUSED: case STATE_STOPPED_AND_PREPARED: { if (mAtEOS && mStartupSeekTimeUs < 0) { mStartupSeekTimeUs = 0; mPositionUs = -1; } // fall through } case STATE_PREPARED: case STATE_PREPARED: { { mAtEOS = false; mAtEOS = false; mPlayer->start(); mPlayer->start(); if (mStartupSeekTimeUs >= 0) { if (mStartupSeekTimeUs >= 0) { if (mStartupSeekTimeUs > 0) { mPlayer->seekToAsync(mStartupSeekTimeUs); mPlayer->seekToAsync(mStartupSeekTimeUs); } mStartupSeekTimeUs = -1; mStartupSeekTimeUs = -1; } } break; break; Loading @@ -264,20 +272,6 @@ status_t NuPlayerDriver::start() { break; 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: default: return INVALID_OPERATION; return INVALID_OPERATION; } } Loading Loading @@ -348,6 +342,7 @@ status_t NuPlayerDriver::seekTo(int msec) { switch (mState) { switch (mState) { case STATE_PREPARED: case STATE_PREPARED: case STATE_STOPPED_AND_PREPARED: { { mStartupSeekTimeUs = seekTimeUs; mStartupSeekTimeUs = seekTimeUs; // pretend that the seek completed. It will actually happen when starting playback. // pretend that the seek completed. It will actually happen when starting playback. Loading