Title: [170396] trunk/Source/WebCore
Revision
170396
Author
jer.no...@apple.com
Date
2014-06-24 15:33:38 -0700 (Tue, 24 Jun 2014)

Log Message

[MSE][Mac] Pass AVSampleBufferDisplayLayer HDCP status through to EME
https://bugs.webkit.org/show_bug.cgi?id=134221

Reviewed by Eric Carlson.

Pass the outputObscuredDueToInsufficientExternalProtection property of AVSampleBufferDisplayLayer
as an error to the associated MediaKeySession object.

* platform/graphics/avfoundation/objc/SourceBufferPrivateAVFObjC.mm:
(-[WebAVSampleBufferErrorListener invalidate]):
(-[WebAVSampleBufferErrorListener beginObservingLayer:]):
(-[WebAVSampleBufferErrorListener observeValueForKeyPath:ofObject:change:context:]):

Modified Paths

Diff

Modified: trunk/Source/WebCore/ChangeLog (170395 => 170396)


--- trunk/Source/WebCore/ChangeLog	2014-06-24 22:32:33 UTC (rev 170395)
+++ trunk/Source/WebCore/ChangeLog	2014-06-24 22:33:38 UTC (rev 170396)
@@ -1,3 +1,18 @@
+2014-06-24  Jer Noble  <jer.no...@apple.com>
+
+        [MSE][Mac] Pass AVSampleBufferDisplayLayer HDCP status through to EME
+        https://bugs.webkit.org/show_bug.cgi?id=134221
+
+        Reviewed by Eric Carlson.
+
+        Pass the outputObscuredDueToInsufficientExternalProtection property of AVSampleBufferDisplayLayer
+        as an error to the associated MediaKeySession object.
+
+        * platform/graphics/avfoundation/objc/SourceBufferPrivateAVFObjC.mm:
+        (-[WebAVSampleBufferErrorListener invalidate]):
+        (-[WebAVSampleBufferErrorListener beginObservingLayer:]):
+        (-[WebAVSampleBufferErrorListener observeValueForKeyPath:ofObject:change:context:]):
+
 2014-06-20  Myles C. Maxfield  <mmaxfi...@apple.com>
 
         Use unsigneds instead of ints for indexes into a string in text layout code

Modified: trunk/Source/WebCore/platform/graphics/avfoundation/objc/SourceBufferPrivateAVFObjC.mm (170395 => 170396)


--- trunk/Source/WebCore/platform/graphics/avfoundation/objc/SourceBufferPrivateAVFObjC.mm	2014-06-24 22:32:33 UTC (rev 170395)
+++ trunk/Source/WebCore/platform/graphics/avfoundation/objc/SourceBufferPrivateAVFObjC.mm	2014-06-24 22:33:38 UTC (rev 170396)
@@ -319,8 +319,10 @@
     if (!_parent && !_layers.size() && !_renderers.size())
         return;
 
-    for (auto& layer : _layers)
+    for (auto& layer : _layers) {
         [layer removeObserver:self forKeyPath:@"error"];
+        [layer removeObserver:self forKeyPath:@"outputObscuredDueToInsufficientExternalProtection"];
+    }
     _layers.clear();
 
     for (auto& renderer : _renderers)
@@ -339,6 +341,7 @@
 
     _layers.append(layer);
     [layer addObserver:self forKeyPath:@"error" options:NSKeyValueObservingOptionNew context:nullptr];
+    [layer addObserver:self forKeyPath:@"outputObscuredDueToInsufficientExternalProtection" options:NSKeyValueObservingOptionNew context:nullptr];
     [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(layerFailedToDecode:) name:AVSampleBufferDisplayLayerFailedToDecodeNotification object:layer];
 }
 
@@ -380,14 +383,23 @@
     RetainPtr<WebAVSampleBufferErrorListener> strongSelf = self;
     if ([object isKindOfClass:getAVSampleBufferDisplayLayerClass()]) {
         RetainPtr<AVSampleBufferDisplayLayer> layer = (AVSampleBufferDisplayLayer *)object;
-        RetainPtr<NSError> error = [change valueForKey:NSKeyValueChangeNewKey];
-
         ASSERT(_layers.contains(layer.get()));
-        ASSERT([keyPath isEqualTo:@"error"]);
 
-        callOnMainThread([strongSelf, layer, error] {
-            strongSelf->_parent->layerDidReceiveError(layer.get(), error.get());
-        });
+        if ([keyPath isEqualTo:@"error"]) {
+            RetainPtr<NSError> error = [change valueForKey:NSKeyValueChangeNewKey];
+            callOnMainThread([strongSelf, layer, error] {
+                strongSelf->_parent->layerDidReceiveError(layer.get(), error.get());
+            });
+        } else if ([keyPath isEqualTo:@"outputObscuredDueToInsufficientExternalProtection"]) {
+            if ([[change valueForKey:NSKeyValueChangeNewKey] boolValue]) {
+                RetainPtr<NSError> error = [NSError errorWithDomain:@"com.apple.WebKit" code:'HDCP' userInfo:nil];
+                callOnMainThread([strongSelf, layer, error] {
+                    strongSelf->_parent->layerDidReceiveError(layer.get(), error.get());
+                });
+            }
+        } else
+            ASSERT_NOT_REACHED();
+
     } else if ([object isKindOfClass:getAVSampleBufferAudioRendererClass()]) {
         RetainPtr<AVSampleBufferAudioRenderer> renderer = (AVSampleBufferAudioRenderer *)object;
         RetainPtr<NSError> error = [change valueForKey:NSKeyValueChangeNewKey];
_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to