зеркало из https://github.com/mozilla/gecko-dev.git
Bug 1128417
- handle playback ended in a consistent way for both file and stream case. r=roc.
This commit is contained in:
Родитель
5adfdc7439
Коммит
321f48fe98
|
@ -328,14 +328,6 @@ MediaDecoder::DecodedStreamGraphListener::NotifyOutput(MediaStreamGraph* aGraph,
|
|||
void
|
||||
MediaDecoder::DecodedStreamGraphListener::DoNotifyFinished()
|
||||
{
|
||||
if (mData && mData->mDecoder) {
|
||||
if (mData->mDecoder->GetState() == PLAY_STATE_PLAYING) {
|
||||
nsCOMPtr<nsIRunnable> event =
|
||||
NS_NewRunnableMethod(mData->mDecoder, &MediaDecoder::PlaybackEnded);
|
||||
NS_DispatchToCurrentThread(event);
|
||||
}
|
||||
}
|
||||
|
||||
MutexAutoLock lock(mMutex);
|
||||
mStreamFinishedOnMainThread = true;
|
||||
}
|
||||
|
|
|
@ -2895,7 +2895,7 @@ nsresult MediaDecoderStateMachine::RunStateMachine()
|
|||
// end of the media, and so that we update the readyState.
|
||||
if (VideoQueue().GetSize() > 0 ||
|
||||
(HasAudio() && !mAudioCompleted) ||
|
||||
(mDecoder->GetDecodedStream() && !mDecoder->GetDecodedStream()->IsFinished()))
|
||||
(mAudioCaptured && !mDecoder->GetDecodedStream()->IsFinished()))
|
||||
{
|
||||
AdvanceFrame();
|
||||
NS_ASSERTION(mDecoder->GetState() != MediaDecoder::PLAY_STATE_PLAYING ||
|
||||
|
@ -2917,10 +2917,8 @@ nsresult MediaDecoderStateMachine::RunStateMachine()
|
|||
}
|
||||
|
||||
StopAudioThread();
|
||||
// When we're decoding to a stream, the stream's main-thread finish signal
|
||||
// will take care of calling MediaDecoder::PlaybackEnded.
|
||||
if (mDecoder->GetState() == MediaDecoder::PLAY_STATE_PLAYING &&
|
||||
!mDecoder->GetDecodedStream()) {
|
||||
|
||||
if (mDecoder->GetState() == MediaDecoder::PLAY_STATE_PLAYING) {
|
||||
int64_t clockTime = std::max(mAudioEndTime, mVideoFrameEndTime);
|
||||
clockTime = std::max(int64_t(0), std::max(clockTime, mEndTime));
|
||||
UpdatePlaybackPosition(clockTime);
|
||||
|
|
Загрузка…
Ссылка в новой задаче