Bug 1237809: P3. Ensure element dimensions are up to date. r=jwwang a=sylvestre
The VideoContainer contains more up to date video size information than the MediaInfo received by MediaDecoder::MetadataLoaded
--- a/dom/media/MediaDecoder.cpp
+++ b/dom/media/MediaDecoder.cpp
@@ -867,21 +867,26 @@ MediaDecoder::MetadataLoaded(nsAutoPtr<M
aInfo->HasAudio(), aInfo->HasVideo());
SetMediaSeekable(aInfo->mMediaSeekable);
mInfo = aInfo.forget();
ConstructMediaTracks();
// Make sure the element and the frame (if any) are told about
// our new size.
- Invalidate();
if (aEventVisibility != MediaDecoderEventVisibility::Suppressed) {
mFiredMetadataLoaded = true;
mOwner->MetadataLoaded(mInfo, nsAutoPtr<const MetadataTags>(aTags.forget()));
}
+ // Invalidate() will end up calling mOwner->UpdateMediaSize with the last
+ // dimensions retrieved from the video frame container. The video frame
+ // container contains more up to date dimensions than aInfo.
+ // So we call Invalidate() after calling mOwner->MetadataLoaded to ensure
+ // the media element has the latest dimensions.
+ Invalidate();
EnsureTelemetryReported();
}
void
MediaDecoder::EnsureTelemetryReported()
{
MOZ_ASSERT(NS_IsMainThread());