Title: [168979] trunk
Revision
168979
Author
jer.no...@apple.com
Date
2014-05-16 14:32:11 -0700 (Fri, 16 May 2014)

Log Message

[Mac] naturalSize not updated when preload=metadata
https://bugs.webkit.org/show_bug.cgi?id=132994

Reviewed by Eric Carlson.

Source/WebCore:
Test: media/video-load-preload-metadata-naturalsize.html

When preload=metadata, we never create an AVPlayerItem, and therefore never receive a
presentationSize KVO. When an AVAsset informs us that its tracks have changed, and there
is no AVPlayerItem, recalculate presentation size based on the first video track's natural
size.

* platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:
(WebCore::MediaPlayerPrivateAVFoundationObjC::tracksChanged):
* platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaSourceAVFObjC.mm:
(WebCore::MediaPlayerPrivateMediaSourceAVFObjC::seekInternal):

LayoutTests:
* media/video-load-preload-metadata-naturalsize-expected.txt: Added.
* media/video-load-preload-metadata-naturalsize.html: Added.

Modified Paths

Added Paths

Diff

Modified: trunk/LayoutTests/ChangeLog (168978 => 168979)


--- trunk/LayoutTests/ChangeLog	2014-05-16 21:16:29 UTC (rev 168978)
+++ trunk/LayoutTests/ChangeLog	2014-05-16 21:32:11 UTC (rev 168979)
@@ -1,3 +1,13 @@
+2014-05-16  Jer Noble  <jer.no...@apple.com>
+
+        [Mac] naturalSize not updated when preload=metadata
+        https://bugs.webkit.org/show_bug.cgi?id=132994
+
+        Reviewed by Eric Carlson.
+
+        * media/video-load-preload-metadata-naturalsize-expected.txt: Added.
+        * media/video-load-preload-metadata-naturalsize.html: Added.
+
 2014-05-16  Enrique Ocaña González  <eoca...@igalia.com>
 
         Unreviewed GTK gardening.

Added: trunk/LayoutTests/media/video-load-preload-metadata-naturalsize-expected.txt (0 => 168979)


--- trunk/LayoutTests/media/video-load-preload-metadata-naturalsize-expected.txt	                        (rev 0)
+++ trunk/LayoutTests/media/video-load-preload-metadata-naturalsize-expected.txt	2014-05-16 21:32:11 UTC (rev 168979)
@@ -0,0 +1,9 @@
+
+Test that preload="metadata" results in the correct naturalSize.
+
+EXPECTED (video.preload == 'metadata') OK
+EVENT(loadedmetadata)
+EXPECTED (video.videoWidth == '320') OK
+EXPECTED (video.videoHeight == '240') OK
+END OF TEST
+

Added: trunk/LayoutTests/media/video-load-preload-metadata-naturalsize.html (0 => 168979)


--- trunk/LayoutTests/media/video-load-preload-metadata-naturalsize.html	                        (rev 0)
+++ trunk/LayoutTests/media/video-load-preload-metadata-naturalsize.html	2014-05-16 21:32:11 UTC (rev 168979)
@@ -0,0 +1,29 @@
+<html>
+    <head>
+        <script src=""
+        <script src=""
+        <script>
+            var playbackStarted = false;
+            function start()
+            {
+                findMediaElement();
+                video.src = "" "content/test");
+
+                testExpected("video.preload", "metadata");
+                waitForEvent('loadedmetadata', onLoadedMetadata);
+                failTestIn(2000);
+            }
+            function onLoadedMetadata()
+            {
+                testExpected("video.videoWidth", 320);
+                testExpected("video.videoHeight", 240);
+                endTest();
+            }
+        </script>
+    </head>
+
+    <body _onload_="start()">
+        <video controls preload="metadata"></video>
+        <p>Test that preload="metadata" results in the correct naturalSize.</p>
+    </body>
+</html>

Modified: trunk/Source/WebCore/ChangeLog (168978 => 168979)


--- trunk/Source/WebCore/ChangeLog	2014-05-16 21:16:29 UTC (rev 168978)
+++ trunk/Source/WebCore/ChangeLog	2014-05-16 21:32:11 UTC (rev 168979)
@@ -1,3 +1,22 @@
+2014-05-16  Jer Noble  <jer.no...@apple.com>
+
+        [Mac] naturalSize not updated when preload=metadata
+        https://bugs.webkit.org/show_bug.cgi?id=132994
+
+        Reviewed by Eric Carlson.
+
+        Test: media/video-load-preload-metadata-naturalsize.html
+
+        When preload=metadata, we never create an AVPlayerItem, and therefore never receive a
+        presentationSize KVO. When an AVAsset informs us that its tracks have changed, and there
+        is no AVPlayerItem, recalculate presentation size based on the first video track's natural
+        size.
+
+        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:
+        (WebCore::MediaPlayerPrivateAVFoundationObjC::tracksChanged):
+        * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaSourceAVFObjC.mm:
+        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::seekInternal):
+
 2014-05-16  Simon Fraser  <simon.fra...@apple.com>
 
         Remove "region-based columns" prefs

Modified: trunk/Source/WebCore/platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm (168978 => 168979)


--- trunk/Source/WebCore/platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm	2014-05-16 21:16:29 UTC (rev 168978)
+++ trunk/Source/WebCore/platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm	2014-05-16 21:32:11 UTC (rev 168979)
@@ -1454,6 +1454,16 @@
     [CATransaction commit];
 }
 
+static AVAssetTrack* firstEnabledTrack(NSArray* tracks)
+{
+    NSUInteger index = [tracks indexOfObjectPassingTest:^(id obj, NSUInteger, BOOL *) {
+        return [static_cast<AVAssetTrack*>(obj) isEnabled];
+    }];
+    if (index == NSNotFound)
+        return nil;
+    return [tracks objectAtIndex:index];
+}
+
 void MediaPlayerPrivateAVFoundationObjC::tracksChanged()
 {
     String primaryAudioTrackLanguage = m_languageOfPrimaryAudioTrack;
@@ -1472,11 +1482,14 @@
     if (!m_avPlayerItem) {
         // We don't have a player item yet, so check with the asset because some assets support inspection
         // prior to becoming ready to play.
-        setHasVideo([[m_avAsset.get() tracksWithMediaCharacteristic:AVMediaCharacteristicVisual] count]);
-        setHasAudio([[m_avAsset.get() tracksWithMediaCharacteristic:AVMediaCharacteristicAudible] count]);
+        AVAssetTrack* firstEnabledVideoTrack = firstEnabledTrack([m_avAsset.get() tracksWithMediaCharacteristic:AVMediaCharacteristicVisual]);
+        setHasVideo(firstEnabledVideoTrack);
+        setHasAudio(firstEnabledTrack([m_avAsset.get() tracksWithMediaCharacteristic:AVMediaCharacteristicAudible]));
 #if !HAVE(AVFOUNDATION_MEDIA_SELECTION_GROUP)
         hasCaptions = [[m_avAsset.get() tracksWithMediaType:AVMediaTypeClosedCaption] count];
 #endif
+
+        presentationSizeDidChange(firstEnabledVideoTrack ? IntSize(CGSizeApplyAffineTransform([firstEnabledVideoTrack naturalSize], [firstEnabledVideoTrack preferredTransform])) : IntSize());
     } else {
         bool hasVideo = false;
         bool hasAudio = false;
_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to