Loading include/media/mediaplayer.h +3 −0 Original line number Diff line number Diff line Loading @@ -42,6 +42,9 @@ enum media_event_type { MEDIA_BUFFERING_UPDATE = 3, MEDIA_SEEK_COMPLETE = 4, MEDIA_SET_VIDEO_SIZE = 5, MEDIA_STARTED = 6, MEDIA_PAUSED = 7, MEDIA_STOPPED = 8, MEDIA_TIMED_TEXT = 99, MEDIA_ERROR = 100, MEDIA_INFO = 200, Loading media/libmediaplayerservice/MidiFile.cpp +6 −0 Original line number Diff line number Diff line Loading @@ -220,6 +220,9 @@ status_t MidiFile::start() } mRender = true; if (mState == EAS_STATE_PLAY) { sendEvent(MEDIA_STARTED); } // wake up render thread ALOGV(" wakeup render thread"); Loading @@ -242,6 +245,7 @@ status_t MidiFile::stop() } } mPaused = false; sendEvent(MEDIA_STOPPED); return NO_ERROR; } Loading Loading @@ -279,6 +283,7 @@ status_t MidiFile::pause() return ERROR_EAS_FAILURE; } mPaused = true; sendEvent(MEDIA_PAUSED); return NO_ERROR; } Loading Loading @@ -382,6 +387,7 @@ status_t MidiFile::reset() status_t MidiFile::reset_nosync() { ALOGV("MidiFile::reset_nosync"); sendEvent(MEDIA_STOPPED); // close file if (mEasHandle) { EAS_CloseFile(mEasData, mEasHandle); Loading media/libmediaplayerservice/nuplayer/NuPlayer.cpp +3 −0 Original line number Diff line number Diff line Loading @@ -731,6 +731,9 @@ void NuPlayer::onMessageReceived(const sp<AMessage> &msg) { ALOGV("renderer %s flush completed.", audio ? "audio" : "video"); } else if (what == Renderer::kWhatVideoRenderingStart) { notifyListener(MEDIA_INFO, MEDIA_INFO_RENDERING_START, 0); } else if (what == Renderer::kWhatMediaRenderingStart) { ALOGV("media rendering started"); notifyListener(MEDIA_STARTED, 0, 0); } break; } Loading media/libmediaplayerservice/nuplayer/NuPlayerDriver.cpp +5 −0 Original line number Diff line number Diff line Loading @@ -255,6 +255,7 @@ status_t NuPlayerDriver::pause() { return OK; case STATE_RUNNING: notifyListener(MEDIA_PAUSED); mPlayer->pause(); break; Loading Loading @@ -287,6 +288,8 @@ status_t NuPlayerDriver::seekTo(int msec) { case STATE_PAUSED: { mAtEOS = false; // seeks can take a while, so we essentially paused notifyListener(MEDIA_PAUSED); mPlayer->seekToAsync(seekTimeUs); break; } Loading Loading @@ -345,6 +348,8 @@ status_t NuPlayerDriver::reset() { break; } notifyListener(MEDIA_STOPPED); mState = STATE_RESET_IN_PROGRESS; mPlayer->resetAsync(); Loading media/libmediaplayerservice/nuplayer/NuPlayerRenderer.cpp +30 −0 Original line number Diff line number Diff line Loading @@ -50,6 +50,8 @@ NuPlayer::Renderer::Renderer( mSyncQueues(false), mPaused(false), mVideoRenderingStarted(false), mVideoRenderingStartGeneration(0), mAudioRenderingStartGeneration(0), mLastPositionUpdateUs(-1ll), mVideoLateByUs(0ll) { } Loading Loading @@ -220,6 +222,23 @@ void NuPlayer::Renderer::signalAudioSinkChanged() { (new AMessage(kWhatAudioSinkChanged, id()))->post(); } void NuPlayer::Renderer::prepareForMediaRenderingStart() { mAudioRenderingStartGeneration = mAudioQueueGeneration; mVideoRenderingStartGeneration = mVideoQueueGeneration; } void NuPlayer::Renderer::notifyIfMediaRenderingStarted() { if (mVideoRenderingStartGeneration == mVideoQueueGeneration && mAudioRenderingStartGeneration == mAudioQueueGeneration) { mVideoRenderingStartGeneration = -1; mAudioRenderingStartGeneration = -1; sp<AMessage> notify = mNotify->dup(); notify->setInt32("what", kWhatMediaRenderingStart); notify->post(); } } bool NuPlayer::Renderer::onDrainAudioQueue() { uint32_t numFramesPlayed; if (mAudioSink->getPosition(&numFramesPlayed) != OK) { Loading Loading @@ -299,6 +318,8 @@ bool NuPlayer::Renderer::onDrainAudioQueue() { numBytesAvailableToWrite -= copy; size_t copiedFrames = copy / mAudioSink->frameSize(); mNumFramesWritten += copiedFrames; notifyIfMediaRenderingStarted(); } notifyPosition(); Loading Loading @@ -405,6 +426,8 @@ void NuPlayer::Renderer::onDrainVideoQueue() { notifyVideoRenderingStart(); } notifyIfMediaRenderingStarted(); notifyPosition(); } Loading Loading @@ -552,6 +575,7 @@ void NuPlayer::Renderer::onFlush(const sp<AMessage> &msg) { // is flushed. syncQueuesDone(); ALOGV("flushing %s", audio ? "audio" : "video"); if (audio) { flushQueue(&mAudioQueue); Loading @@ -560,6 +584,8 @@ void NuPlayer::Renderer::onFlush(const sp<AMessage> &msg) { mDrainAudioQueuePending = false; ++mAudioQueueGeneration; prepareForMediaRenderingStart(); } else { flushQueue(&mVideoQueue); Loading @@ -568,6 +594,8 @@ void NuPlayer::Renderer::onFlush(const sp<AMessage> &msg) { mDrainVideoQueuePending = false; ++mVideoQueueGeneration; prepareForMediaRenderingStart(); } notifyFlushComplete(audio); Loading Loading @@ -658,6 +686,8 @@ void NuPlayer::Renderer::onPause() { mDrainVideoQueuePending = false; ++mVideoQueueGeneration; prepareForMediaRenderingStart(); if (mHasAudio) { mAudioSink->pause(); } Loading Loading
include/media/mediaplayer.h +3 −0 Original line number Diff line number Diff line Loading @@ -42,6 +42,9 @@ enum media_event_type { MEDIA_BUFFERING_UPDATE = 3, MEDIA_SEEK_COMPLETE = 4, MEDIA_SET_VIDEO_SIZE = 5, MEDIA_STARTED = 6, MEDIA_PAUSED = 7, MEDIA_STOPPED = 8, MEDIA_TIMED_TEXT = 99, MEDIA_ERROR = 100, MEDIA_INFO = 200, Loading
media/libmediaplayerservice/MidiFile.cpp +6 −0 Original line number Diff line number Diff line Loading @@ -220,6 +220,9 @@ status_t MidiFile::start() } mRender = true; if (mState == EAS_STATE_PLAY) { sendEvent(MEDIA_STARTED); } // wake up render thread ALOGV(" wakeup render thread"); Loading @@ -242,6 +245,7 @@ status_t MidiFile::stop() } } mPaused = false; sendEvent(MEDIA_STOPPED); return NO_ERROR; } Loading Loading @@ -279,6 +283,7 @@ status_t MidiFile::pause() return ERROR_EAS_FAILURE; } mPaused = true; sendEvent(MEDIA_PAUSED); return NO_ERROR; } Loading Loading @@ -382,6 +387,7 @@ status_t MidiFile::reset() status_t MidiFile::reset_nosync() { ALOGV("MidiFile::reset_nosync"); sendEvent(MEDIA_STOPPED); // close file if (mEasHandle) { EAS_CloseFile(mEasData, mEasHandle); Loading
media/libmediaplayerservice/nuplayer/NuPlayer.cpp +3 −0 Original line number Diff line number Diff line Loading @@ -731,6 +731,9 @@ void NuPlayer::onMessageReceived(const sp<AMessage> &msg) { ALOGV("renderer %s flush completed.", audio ? "audio" : "video"); } else if (what == Renderer::kWhatVideoRenderingStart) { notifyListener(MEDIA_INFO, MEDIA_INFO_RENDERING_START, 0); } else if (what == Renderer::kWhatMediaRenderingStart) { ALOGV("media rendering started"); notifyListener(MEDIA_STARTED, 0, 0); } break; } Loading
media/libmediaplayerservice/nuplayer/NuPlayerDriver.cpp +5 −0 Original line number Diff line number Diff line Loading @@ -255,6 +255,7 @@ status_t NuPlayerDriver::pause() { return OK; case STATE_RUNNING: notifyListener(MEDIA_PAUSED); mPlayer->pause(); break; Loading Loading @@ -287,6 +288,8 @@ status_t NuPlayerDriver::seekTo(int msec) { case STATE_PAUSED: { mAtEOS = false; // seeks can take a while, so we essentially paused notifyListener(MEDIA_PAUSED); mPlayer->seekToAsync(seekTimeUs); break; } Loading Loading @@ -345,6 +348,8 @@ status_t NuPlayerDriver::reset() { break; } notifyListener(MEDIA_STOPPED); mState = STATE_RESET_IN_PROGRESS; mPlayer->resetAsync(); Loading
media/libmediaplayerservice/nuplayer/NuPlayerRenderer.cpp +30 −0 Original line number Diff line number Diff line Loading @@ -50,6 +50,8 @@ NuPlayer::Renderer::Renderer( mSyncQueues(false), mPaused(false), mVideoRenderingStarted(false), mVideoRenderingStartGeneration(0), mAudioRenderingStartGeneration(0), mLastPositionUpdateUs(-1ll), mVideoLateByUs(0ll) { } Loading Loading @@ -220,6 +222,23 @@ void NuPlayer::Renderer::signalAudioSinkChanged() { (new AMessage(kWhatAudioSinkChanged, id()))->post(); } void NuPlayer::Renderer::prepareForMediaRenderingStart() { mAudioRenderingStartGeneration = mAudioQueueGeneration; mVideoRenderingStartGeneration = mVideoQueueGeneration; } void NuPlayer::Renderer::notifyIfMediaRenderingStarted() { if (mVideoRenderingStartGeneration == mVideoQueueGeneration && mAudioRenderingStartGeneration == mAudioQueueGeneration) { mVideoRenderingStartGeneration = -1; mAudioRenderingStartGeneration = -1; sp<AMessage> notify = mNotify->dup(); notify->setInt32("what", kWhatMediaRenderingStart); notify->post(); } } bool NuPlayer::Renderer::onDrainAudioQueue() { uint32_t numFramesPlayed; if (mAudioSink->getPosition(&numFramesPlayed) != OK) { Loading Loading @@ -299,6 +318,8 @@ bool NuPlayer::Renderer::onDrainAudioQueue() { numBytesAvailableToWrite -= copy; size_t copiedFrames = copy / mAudioSink->frameSize(); mNumFramesWritten += copiedFrames; notifyIfMediaRenderingStarted(); } notifyPosition(); Loading Loading @@ -405,6 +426,8 @@ void NuPlayer::Renderer::onDrainVideoQueue() { notifyVideoRenderingStart(); } notifyIfMediaRenderingStarted(); notifyPosition(); } Loading Loading @@ -552,6 +575,7 @@ void NuPlayer::Renderer::onFlush(const sp<AMessage> &msg) { // is flushed. syncQueuesDone(); ALOGV("flushing %s", audio ? "audio" : "video"); if (audio) { flushQueue(&mAudioQueue); Loading @@ -560,6 +584,8 @@ void NuPlayer::Renderer::onFlush(const sp<AMessage> &msg) { mDrainAudioQueuePending = false; ++mAudioQueueGeneration; prepareForMediaRenderingStart(); } else { flushQueue(&mVideoQueue); Loading @@ -568,6 +594,8 @@ void NuPlayer::Renderer::onFlush(const sp<AMessage> &msg) { mDrainVideoQueuePending = false; ++mVideoQueueGeneration; prepareForMediaRenderingStart(); } notifyFlushComplete(audio); Loading Loading @@ -658,6 +686,8 @@ void NuPlayer::Renderer::onPause() { mDrainVideoQueuePending = false; ++mVideoQueueGeneration; prepareForMediaRenderingStart(); if (mHasAudio) { mAudioSink->pause(); } Loading