Title: [151608] trunk/Source
- Revision
- 151608
- Author
- jer.no...@apple.com
- Date
- 2013-06-14 15:27:35 -0700 (Fri, 14 Jun 2013)
Log Message
Add support for AVFoundation-backed HTMLMediaElements in the WebVideoFullScreenController.
https://bugs.webkit.org/show_bug.cgi?id=117597
Reviewed by Eric Carlson.
Source/WebCore:
Check for media elements with AVFoundation media types and create a AVPlayerLayer
rather than a QTMovieLayer.
* platform/mac/WebVideoFullscreenController.h:
* platform/mac/WebVideoFullscreenController.mm:
(-[WebVideoFullscreenController setupVideoOverlay:]): Take a CALayer rather than a
QTMovieLayer. Move the code which connects the layer with it's media source into
setMediaElement.
(-[WebVideoFullscreenController windowDidLoad]): Give the window's contentView a generic
CALayer instaead of a QTMovieLayer.
(-[WebVideoFullscreenController setMediaElement:]): Test whether the incoming media
element is backed by a QTMovie or an AVPlayer, and create the appropriate layer.
(-[WebVideoFullscreenController windowDidExitFullscreen]): Remove the observer of
AVPlayer's rate property.
(-[WebVideoFullscreenController observeValueForKeyPath:ofObject:change:context:]):
If the keyPath is "rate", call rateChanged.
Source/WebKit/mac:
Allow AVFoundation to be enabled even when the FullScreen API is disabled.
* WebView/WebView.mm:
(-[WebView _preferencesChanged:]):
Modified Paths
Diff
Modified: trunk/Source/WebCore/ChangeLog (151607 => 151608)
--- trunk/Source/WebCore/ChangeLog 2013-06-14 22:21:13 UTC (rev 151607)
+++ trunk/Source/WebCore/ChangeLog 2013-06-14 22:27:35 UTC (rev 151608)
@@ -1,3 +1,27 @@
+2013-06-13 Jer Noble <jer.no...@apple.com>
+
+ Add support for AVFoundation-backed HTMLMediaElements in the WebVideoFullScreenController.
+ https://bugs.webkit.org/show_bug.cgi?id=117597
+
+ Reviewed by Eric Carlson.
+
+ Check for media elements with AVFoundation media types and create a AVPlayerLayer
+ rather than a QTMovieLayer.
+
+ * platform/mac/WebVideoFullscreenController.h:
+ * platform/mac/WebVideoFullscreenController.mm:
+ (-[WebVideoFullscreenController setupVideoOverlay:]): Take a CALayer rather than a
+ QTMovieLayer. Move the code which connects the layer with it's media source into
+ setMediaElement.
+ (-[WebVideoFullscreenController windowDidLoad]): Give the window's contentView a generic
+ CALayer instaead of a QTMovieLayer.
+ (-[WebVideoFullscreenController setMediaElement:]): Test whether the incoming media
+ element is backed by a QTMovie or an AVPlayer, and create the appropriate layer.
+ (-[WebVideoFullscreenController windowDidExitFullscreen]): Remove the observer of
+ AVPlayer's rate property.
+ (-[WebVideoFullscreenController observeValueForKeyPath:ofObject:change:context:]):
+ If the keyPath is "rate", call rateChanged.
+
2013-06-14 Enrica Casucci <enr...@apple.com>
WKPageFindStringMatches ignores the kWKFindOptionsBackwards option.
Modified: trunk/Source/WebCore/platform/mac/WebVideoFullscreenController.h (151607 => 151608)
--- trunk/Source/WebCore/platform/mac/WebVideoFullscreenController.h 2013-06-14 22:21:13 UTC (rev 151607)
+++ trunk/Source/WebCore/platform/mac/WebVideoFullscreenController.h 2013-06-14 22:27:35 UTC (rev 151608)
@@ -38,7 +38,7 @@
@protocol WebVideoFullscreenControllerDelegate;
@class WebVideoFullscreenHUDWindowController;
@class WebWindowFadeAnimation;
-@class QTMovieLayer;
+@class CALayer;
@interface WebVideoFullscreenController : NSWindowController {
@private
@@ -59,7 +59,7 @@
- (id <WebVideoFullscreenControllerDelegate>)delegate;
- (void)setDelegate:(id <WebVideoFullscreenControllerDelegate>)delegate;
-- (void)setupVideoOverlay:(QTMovieLayer*)layer;
+- (void)setupVideoOverlay:(CALayer*)layer;
- (void)setMediaElement:(WebCore::HTMLMediaElement*)mediaElement;
- (WebCore::HTMLMediaElement*)mediaElement;
Modified: trunk/Source/WebCore/platform/mac/WebVideoFullscreenController.mm (151607 => 151608)
--- trunk/Source/WebCore/platform/mac/WebVideoFullscreenController.mm 2013-06-14 22:21:13 UTC (rev 151607)
+++ trunk/Source/WebCore/platform/mac/WebVideoFullscreenController.mm 2013-06-14 22:27:35 UTC (rev 151608)
@@ -31,6 +31,7 @@
#import "WebVideoFullscreenHUDWindowController.h"
#import "WebWindowAnimation.h"
+#import <AVFoundation/AVFoundation.h>
#import <Carbon/Carbon.h>
#import <QTKit/QTKit.h>
#import <WebCore/DisplaySleepDisabler.h>
@@ -51,6 +52,9 @@
#define QTMovieRateDidChangeNotification getQTMovieRateDidChangeNotification()
+SOFT_LINK_FRAMEWORK(AVFoundation)
+SOFT_LINK_CLASS(AVFoundation, AVPlayerLayer)
+
@interface WebVideoFullscreenWindow : NSWindow<NSAnimationDelegate>
{
SEL _controllerActionOnAnimationEnd;
@@ -95,7 +99,7 @@
return (WebVideoFullscreenWindow *)[super window];
}
-- (void)setupVideoOverlay:(QTMovieLayer*)layer
+- (void)setupVideoOverlay:(CALayer *)layer
{
WebVideoFullscreenWindow *window = [self fullscreenWindow];
#if USE(GSTREAMER)
@@ -107,8 +111,6 @@
#else
[[window contentView] setLayer:layer];
[[window contentView] setWantsLayer:YES];
- if (_mediaElement && _mediaElement->platformMedia().type == PlatformMedia::QTMovieType)
- [layer setMovie:_mediaElement->platformMedia().media.qtMovie];
#endif
}
@@ -117,11 +119,9 @@
WebVideoFullscreenWindow *window = [self fullscreenWindow];
[window setHasShadow:YES]; // This is nicer with a shadow.
[window setLevel:NSPopUpMenuWindowLevel-1];
+ [[window contentView] setLayer:[CALayer layer]];
+ [[window contentView] setWantsLayer:YES];
- QTMovieLayer *layer = [[getQTMovieLayerClass() alloc] init];
- [self setupVideoOverlay:layer];
- [layer release];
-
#if !USE(GSTREAMER)
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(applicationDidResignActive:) name:NSApplicationDidResignActiveNotification object:NSApp];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(applicationDidChangeScreenParameters:) name:NSApplicationDidChangeScreenParametersNotification object:NSApp];
@@ -136,18 +136,32 @@
- (void)setMediaElement:(HTMLMediaElement*)mediaElement
{
_mediaElement = mediaElement;
+
+ if (!_mediaElement)
+ return;
+
if ([self isWindowLoaded]) {
- QTMovieLayer *movieLayer = (QTMovieLayer *)[[[self fullscreenWindow] contentView] layer];
+ if (_mediaElement->platformMedia().type == PlatformMedia::QTMovieType) {
+ QTMovie *movie = _mediaElement->platformMedia().media.qtMovie;
+ QTMovieLayer *layer = [[getQTMovieLayerClass() alloc] init];
+ [layer setMovie:movie];
+ [self setupVideoOverlay:layer];
- ASSERT(movieLayer && [movieLayer isKindOfClass:[getQTMovieLayerClass() class]]);
- [self setupVideoOverlay:movieLayer];
#if !USE(GSTREAMER)
- ASSERT([movieLayer movie]);
- [[NSNotificationCenter defaultCenter] addObserver:self
- selector:@selector(rateChanged:)
- name:QTMovieRateDidChangeNotification
- object:[movieLayer movie]];
+ [[NSNotificationCenter defaultCenter] addObserver:self
+ selector:@selector(rateChanged:)
+ name:QTMovieRateDidChangeNotification
+ object:movie];
#endif
+
+ } else if (_mediaElement->platformMedia().type == PlatformMedia::AVFoundationMediaPlayerType) {
+ AVPlayer *player = _mediaElement->platformMedia().media.avfMediaPlayer;
+ AVPlayerLayer *layer = [[getAVPlayerLayerClass() alloc] init];
+ [self setupVideoOverlay:layer];
+ [layer setPlayer:player];
+
+ [player addObserver:self forKeyPath:@"rate" options:nil context:NULL];
+ }
}
}
@@ -177,6 +191,10 @@
if (_mediaElement && _mediaElement->platformMedia().type == PlatformMedia::GStreamerGWorldType)
_mediaElement->platformMedia().media.gstreamerGWorld->exitFullscreen();
#endif
+ CALayer *layer = [[[self window] contentView] layer];
+ if ([layer isKindOfClass:getAVPlayerLayerClass()])
+ [[(AVPlayerLayer*)layer player] removeObserver:self forKeyPath:@"rate"];
+
[self clearFadeAnimation];
[[self window] close];
[self setWindow:nil];
@@ -400,9 +418,16 @@
[_hudController fadeWindowIn];
}
-// MARK: -
-// MARK: QTMovie callbacks
+- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context
+{
+ UNUSED_PARAM(object);
+ UNUSED_PARAM(change);
+ UNUSED_PARAM(context);
+ if ([keyPath isEqualTo:@"rate"])
+ [self rateChanged:nil];
+}
+
- (void)rateChanged:(NSNotification *)unusedNotification
{
UNUSED_PARAM(unusedNotification);
Modified: trunk/Source/WebKit/mac/ChangeLog (151607 => 151608)
--- trunk/Source/WebKit/mac/ChangeLog 2013-06-14 22:21:13 UTC (rev 151607)
+++ trunk/Source/WebKit/mac/ChangeLog 2013-06-14 22:27:35 UTC (rev 151608)
@@ -1,3 +1,15 @@
+2013-06-13 Jer Noble <jer.no...@apple.com>
+
+ Add support for AVFoundation-backed HTMLMediaElements in the WebVideoFullScreenController.
+ https://bugs.webkit.org/show_bug.cgi?id=117597
+
+ Reviewed by Eric Carlson.
+
+ Allow AVFoundation to be enabled even when the FullScreen API is disabled.
+
+ * WebView/WebView.mm:
+ (-[WebView _preferencesChanged:]):
+
2013-06-12 Anders Carlsson <ander...@apple.com>
Remove the notion of inactive plug-ins
Modified: trunk/Source/WebKit/mac/WebView/WebView.mm (151607 => 151608)
--- trunk/Source/WebKit/mac/WebView/WebView.mm 2013-06-14 22:21:13 UTC (rev 151607)
+++ trunk/Source/WebKit/mac/WebView/WebView.mm 2013-06-14 22:27:35 UTC (rev 151608)
@@ -1523,12 +1523,8 @@
settings->setInteractiveFormValidationEnabled([self interactiveFormValidationEnabled]);
settings->setValidationMessageTimerMagnification([self validationMessageTimerMagnification]);
#if USE(AVFOUNDATION)
-#if ENABLE(FULLSCREEN_API)
- settings->setAVFoundationEnabled([preferences isAVFoundationEnabled] && [preferences fullScreenEnabled]);
-#else
- settings->setAVFoundationEnabled(false);
+ settings->setAVFoundationEnabled([preferences isAVFoundationEnabled]);
#endif
-#endif
#if PLATFORM(MAC) || (PLATFORM(QT) && USE(QTKIT))
settings->setQTKitEnabled([preferences isQTKitEnabled]);
#endif
_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
https://lists.webkit.org/mailman/listinfo/webkit-changes