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