Bug 1299369. Part 2 - except for BUFFERING or SEEKING, HaveNextFrameData() should be able to tell us whether next frames are available. r=kaku

MozReview-Commit-ID: HtVP2ncyxjv

--HG--
extra : rebase_source : d06ede67efb4f688993fb1175fee4b562caef1c5
This commit is contained in:
JW Wang 2016-08-31 13:06:19 +08:00
parent 07fce265fe
commit cefdb6ce18

View File

@ -2480,21 +2480,22 @@ void MediaDecoderStateMachine::UpdateNextFrameStatus()
MediaDecoderOwner::NextFrameStatus status;
const char* statusString;
if (mState < DECODER_STATE_DECODING || !mSentFirstFrameLoadedEvent) {
status = MediaDecoderOwner::NEXT_FRAME_UNAVAILABLE;
statusString = "NEXT_FRAME_UNAVAILABLE";
} else if (IsBuffering()) {
status = MediaDecoderOwner::NEXT_FRAME_UNAVAILABLE_BUFFERING;
statusString = "NEXT_FRAME_UNAVAILABLE_BUFFERING";
} else if (IsSeeking()) {
status = MediaDecoderOwner::NEXT_FRAME_UNAVAILABLE_SEEKING;
statusString = "NEXT_FRAME_UNAVAILABLE_SEEKING";
} else if (HaveNextFrameData()) {
status = MediaDecoderOwner::NEXT_FRAME_AVAILABLE;
statusString = "NEXT_FRAME_AVAILABLE";
} else {
status = MediaDecoderOwner::NEXT_FRAME_UNAVAILABLE;
statusString = "NEXT_FRAME_UNAVAILABLE";
switch (mState.Ref()) {
case DECODER_STATE_BUFFERING:
status = MediaDecoderOwner::NEXT_FRAME_UNAVAILABLE_BUFFERING;
statusString = "NEXT_FRAME_UNAVAILABLE_BUFFERING";
break;
case DECODER_STATE_SEEKING:
status = MediaDecoderOwner::NEXT_FRAME_UNAVAILABLE_SEEKING;
statusString = "NEXT_FRAME_UNAVAILABLE_SEEKING";
break;
default:
bool b = HaveNextFrameData();
status = b ? MediaDecoderOwner::NEXT_FRAME_AVAILABLE :
MediaDecoderOwner::NEXT_FRAME_UNAVAILABLE;
statusString = b ? "NEXT_FRAME_AVAILABLE" : "NEXT_FRAME_UNAVAILABLE";
break;
}
if (status != mNextFrameStatus) {