Title: [243014] trunk
Revision
243014
Author
jer.no...@apple.com
Date
2019-03-15 15:02:02 -0700 (Fri, 15 Mar 2019)

Log Message

Add a "supportedConfiguration" dictionary to MediaCapabilitiesDecodingInfo and MediaCapabilitiesEncodingInfo
https://bugs.webkit.org/show_bug.cgi?id=195763

Reviewed by Jon Lee.

Source/WebCore:

Test: media/mediacapabilities/mock-decodingInfo-supportedConfiguration.html

Add support for a proposed addition to the Media Capabilities spec that would future-proof additional changes
to Media Capabilities by allowing sites to check exactly what properties were queried by the browser when
answering a decodeInfo() or enocdeInfo() query.

* CMakeLists.txt:
* DerivedSources-input.xcfilelist:
* DerivedSources-output.xcfilelist:
* DerivedSources.make:
* Modules/mediacapabilities/AudioConfiguration.idl:
* Modules/mediacapabilities/MediaCapabilities.cpp:
(WebCore::MediaCapabilities::decodingInfo):
(WebCore::MediaCapabilities::encodingInfo):
* Modules/mediacapabilities/MediaCapabilities.idl:
* Modules/mediacapabilities/MediaCapabilitiesDecodingInfo.idl:
* Modules/mediacapabilities/MediaCapabilitiesEncodingInfo.idl:
* Modules/mediacapabilities/MediaCapabilitiesInfo.idl:
* Modules/mediacapabilities/MediaDecodingConfiguration.idl:
* Modules/mediacapabilities/MediaEncodingConfiguration.idl:
* Modules/mediacapabilities/VideoConfiguration.idl:
* Sources.txt:
* WebCore.xcodeproj/project.pbxproj:
* platform/MediaCapabilitiesDecodingInfo.h: Copied from Source/WebCore/platform/graphics/cocoa/MediaEngineConfigurationFactoryCocoa.h.
(WebCore::MediaCapabilitiesDecodingInfo::MediaCapabilitiesDecodingInfo):
* platform/MediaCapabilitiesEncodingInfo.h: Copied from Source/WebCore/platform/graphics/cocoa/MediaEngineConfigurationFactoryCocoa.h.
(WebCore::MediaCapabilitiesEncodingInfo::MediaCapabilitiesEncodingInfo):
* platform/graphics/cocoa/MediaEngineConfigurationFactoryCocoa.cpp:
(WebCore::createMediaPlayerDecodingConfigurationCocoa):
* platform/graphics/cocoa/MediaEngineConfigurationFactoryCocoa.h:
* platform/graphics/gstreamer/MediaEngineConfigurationFactoryGStreamer.cpp:
(WebCore::createMediaPlayerDecodingConfigurationGStreamer):
* platform/graphics/gstreamer/MediaEngineConfigurationFactoryGStreamer.h:
* platform/mediacapabilities/MediaEngineConfigurationFactory.cpp:
(WebCore::MediaEngineConfigurationFactory::createDecodingConfiguration):
(WebCore::MediaEngineConfigurationFactory::createEncodingConfiguration):
* platform/mediacapabilities/MediaEngineConfigurationFactory.h:
* platform/mock/MediaEngineConfigurationFactoryMock.cpp:
(WebCore::MediaEngineConfigurationFactoryMock::createDecodingConfiguration):
(WebCore::MediaEngineConfigurationFactoryMock::createEncodingConfiguration):
* platform/mock/MediaEngineConfigurationFactoryMock.h:

LayoutTests:

* media/mediacapabilities/mock-decodingInfo-supportedConfiguration-expected.txt: Added.
* media/mediacapabilities/mock-decodingInfo-supportedConfiguration.html: Added.

Modified Paths

Added Paths

Diff

Modified: trunk/LayoutTests/ChangeLog (243013 => 243014)


--- trunk/LayoutTests/ChangeLog	2019-03-15 21:45:41 UTC (rev 243013)
+++ trunk/LayoutTests/ChangeLog	2019-03-15 22:02:02 UTC (rev 243014)
@@ -1,3 +1,13 @@
+2019-03-15  Jer Noble  <jer.no...@apple.com>
+
+        Add a "supportedConfiguration" dictionary to MediaCapabilitiesDecodingInfo and MediaCapabilitiesEncodingInfo
+        https://bugs.webkit.org/show_bug.cgi?id=195763
+
+        Reviewed by Jon Lee.
+
+        * media/mediacapabilities/mock-decodingInfo-supportedConfiguration-expected.txt: Added.
+        * media/mediacapabilities/mock-decodingInfo-supportedConfiguration.html: Added.
+
 2019-03-15  Simon Fraser  <simon.fra...@apple.com>
 
         [Async overflow Scrolling] Update positioned node layers when overflows are scrolled

Added: trunk/LayoutTests/media/mediacapabilities/mock-decodingInfo-supportedConfiguration-expected.txt (0 => 243014)


--- trunk/LayoutTests/media/mediacapabilities/mock-decodingInfo-supportedConfiguration-expected.txt	                        (rev 0)
+++ trunk/LayoutTests/media/mediacapabilities/mock-decodingInfo-supportedConfiguration-expected.txt	2019-03-15 22:02:02 UTC (rev 243014)
@@ -0,0 +1,16 @@
+RUN(internals.enableMockMediaCapabilities())
+RUN(promise = navigator.mediaCapabilities.decodingInfo({ type: 'file', video: { contentType: 'video/mp4; codecs="avc1"', height: 720, bitrate: 1000, width: 1280, framerate: 24.5 }, unsupportedProperty: true });)
+Promise resolved OK
+EXPECTED (info.supported == 'true') OK
+EXPECTED (info.smooth == 'true') OK
+EXPECTED (info.powerEfficient == 'true') OK
+EXPECTED (typeof info.supportedConfiguration != 'undefined') OK
+EXPECTED (info.supportedConfiguration.type == 'file') OK
+EXPECTED (info.supportedConfiguration.video.contentType == 'video/mp4; codecs="avc1"') OK
+EXPECTED (info.supportedConfiguration.video.height == '720') OK
+EXPECTED (info.supportedConfiguration.video.bitrate == '1000') OK
+EXPECTED (info.supportedConfiguration.video.width == '1280') OK
+EXPECTED (info.supportedConfiguration.video.framerate == '24.5') OK
+EXPECTED (typeof info.supportedConfiguration.unsupportedProperty == 'undefined') OK
+END OF TEST
+

Added: trunk/LayoutTests/media/mediacapabilities/mock-decodingInfo-supportedConfiguration.html (0 => 243014)


--- trunk/LayoutTests/media/mediacapabilities/mock-decodingInfo-supportedConfiguration.html	                        (rev 0)
+++ trunk/LayoutTests/media/mediacapabilities/mock-decodingInfo-supportedConfiguration.html	2019-03-15 22:02:02 UTC (rev 243014)
@@ -0,0 +1,36 @@
+<!DOCTYPE html>
+<html>
+<head>
+    <script src=""
+    <script type="text/_javascript_">
+    var promise;
+    var info;
+
+    async function doTest()
+    {
+        if (!window.internals) {
+            failTest("Internals is required for this test.")
+            return;
+        }
+
+        run('internals.enableMockMediaCapabilities()');
+
+        run("promise = navigator.mediaCapabilities.decodingInfo({ type: 'file', video: { contentType: 'video/mp4; codecs=\"avc1\"', height: 720, bitrate: 1000, width: 1280, framerate: 24.5 }, unsupportedProperty: true });");
+        info = await shouldResolve(promise);
+        testExpected('info.supported', true);
+        testExpected('info.smooth', true);
+        testExpected('info.powerEfficient', true);
+        testExpected('typeof info.supportedConfiguration', 'undefined', '!=');
+        testExpected('info.supportedConfiguration.type', 'file');
+        testExpected('info.supportedConfiguration.video.contentType', 'video/mp4; codecs="avc1"');
+        testExpected('info.supportedConfiguration.video.height', 720);
+        testExpected('info.supportedConfiguration.video.bitrate', 1000);
+        testExpected('info.supportedConfiguration.video.width', 1280);
+        testExpected('info.supportedConfiguration.video.framerate', 24.5);
+        testExpected('typeof info.supportedConfiguration.unsupportedProperty', 'undefined');
+        endTest();
+    }
+    </script>
+</head>
+<body _onload_="doTest()" />
+</html>

Modified: trunk/Source/WebCore/CMakeLists.txt (243013 => 243014)


--- trunk/Source/WebCore/CMakeLists.txt	2019-03-15 21:45:41 UTC (rev 243013)
+++ trunk/Source/WebCore/CMakeLists.txt	2019-03-15 22:02:02 UTC (rev 243014)
@@ -282,6 +282,8 @@
 
     Modules/mediacapabilities/AudioConfiguration.idl
     Modules/mediacapabilities/MediaCapabilities.idl
+    Modules/mediacapabilities/MediaCapabilitiesDecodingInfo.idl
+    Modules/mediacapabilities/MediaCapabilitiesEncodingInfo.idl
     Modules/mediacapabilities/MediaCapabilitiesInfo.idl
     Modules/mediacapabilities/MediaConfiguration.idl
     Modules/mediacapabilities/MediaDecodingConfiguration.idl

Modified: trunk/Source/WebCore/ChangeLog (243013 => 243014)


--- trunk/Source/WebCore/ChangeLog	2019-03-15 21:45:41 UTC (rev 243013)
+++ trunk/Source/WebCore/ChangeLog	2019-03-15 22:02:02 UTC (rev 243014)
@@ -1,3 +1,52 @@
+2019-03-15  Jer Noble  <jer.no...@apple.com>
+
+        Add a "supportedConfiguration" dictionary to MediaCapabilitiesDecodingInfo and MediaCapabilitiesEncodingInfo
+        https://bugs.webkit.org/show_bug.cgi?id=195763
+
+        Reviewed by Jon Lee.
+
+        Test: media/mediacapabilities/mock-decodingInfo-supportedConfiguration.html
+
+        Add support for a proposed addition to the Media Capabilities spec that would future-proof additional changes
+        to Media Capabilities by allowing sites to check exactly what properties were queried by the browser when
+        answering a decodeInfo() or enocdeInfo() query.
+
+        * CMakeLists.txt:
+        * DerivedSources-input.xcfilelist:
+        * DerivedSources-output.xcfilelist:
+        * DerivedSources.make:
+        * Modules/mediacapabilities/AudioConfiguration.idl:
+        * Modules/mediacapabilities/MediaCapabilities.cpp:
+        (WebCore::MediaCapabilities::decodingInfo):
+        (WebCore::MediaCapabilities::encodingInfo):
+        * Modules/mediacapabilities/MediaCapabilities.idl:
+        * Modules/mediacapabilities/MediaCapabilitiesDecodingInfo.idl:
+        * Modules/mediacapabilities/MediaCapabilitiesEncodingInfo.idl:
+        * Modules/mediacapabilities/MediaCapabilitiesInfo.idl:
+        * Modules/mediacapabilities/MediaDecodingConfiguration.idl:
+        * Modules/mediacapabilities/MediaEncodingConfiguration.idl:
+        * Modules/mediacapabilities/VideoConfiguration.idl:
+        * Sources.txt:
+        * WebCore.xcodeproj/project.pbxproj:
+        * platform/MediaCapabilitiesDecodingInfo.h: Copied from Source/WebCore/platform/graphics/cocoa/MediaEngineConfigurationFactoryCocoa.h.
+        (WebCore::MediaCapabilitiesDecodingInfo::MediaCapabilitiesDecodingInfo):
+        * platform/MediaCapabilitiesEncodingInfo.h: Copied from Source/WebCore/platform/graphics/cocoa/MediaEngineConfigurationFactoryCocoa.h.
+        (WebCore::MediaCapabilitiesEncodingInfo::MediaCapabilitiesEncodingInfo):
+        * platform/graphics/cocoa/MediaEngineConfigurationFactoryCocoa.cpp:
+        (WebCore::createMediaPlayerDecodingConfigurationCocoa):
+        * platform/graphics/cocoa/MediaEngineConfigurationFactoryCocoa.h:
+        * platform/graphics/gstreamer/MediaEngineConfigurationFactoryGStreamer.cpp:
+        (WebCore::createMediaPlayerDecodingConfigurationGStreamer):
+        * platform/graphics/gstreamer/MediaEngineConfigurationFactoryGStreamer.h:
+        * platform/mediacapabilities/MediaEngineConfigurationFactory.cpp:
+        (WebCore::MediaEngineConfigurationFactory::createDecodingConfiguration):
+        (WebCore::MediaEngineConfigurationFactory::createEncodingConfiguration):
+        * platform/mediacapabilities/MediaEngineConfigurationFactory.h:
+        * platform/mock/MediaEngineConfigurationFactoryMock.cpp:
+        (WebCore::MediaEngineConfigurationFactoryMock::createDecodingConfiguration):
+        (WebCore::MediaEngineConfigurationFactoryMock::createEncodingConfiguration):
+        * platform/mock/MediaEngineConfigurationFactoryMock.h:
+
 2019-03-15  Antti Koivisto  <an...@apple.com>
 
         Use Region for event region even when it is a rectangle

Modified: trunk/Source/WebCore/DerivedSources-input.xcfilelist (243013 => 243014)


--- trunk/Source/WebCore/DerivedSources-input.xcfilelist	2019-03-15 21:45:41 UTC (rev 243013)
+++ trunk/Source/WebCore/DerivedSources-input.xcfilelist	2019-03-15 22:02:02 UTC (rev 243014)
@@ -132,6 +132,8 @@
 $(PROJECT_DIR)/Modules/indexeddb/WorkerGlobalScopeIndexedDatabase.idl
 $(PROJECT_DIR)/Modules/mediacapabilities/AudioConfiguration.idl
 $(PROJECT_DIR)/Modules/mediacapabilities/MediaCapabilities.idl
+$(PROJECT_DIR)/Modules/mediacapabilities/MediaCapabilitiesDecodingInfo.idl
+$(PROJECT_DIR)/Modules/mediacapabilities/MediaCapabilitiesEncodingInfo.idl
 $(PROJECT_DIR)/Modules/mediacapabilities/MediaCapabilitiesInfo.idl
 $(PROJECT_DIR)/Modules/mediacapabilities/MediaConfiguration.idl
 $(PROJECT_DIR)/Modules/mediacapabilities/MediaDecodingConfiguration.idl

Modified: trunk/Source/WebCore/DerivedSources-output.xcfilelist (243013 => 243014)


--- trunk/Source/WebCore/DerivedSources-output.xcfilelist	2019-03-15 21:45:41 UTC (rev 243013)
+++ trunk/Source/WebCore/DerivedSources-output.xcfilelist	2019-03-15 22:02:02 UTC (rev 243014)
@@ -905,6 +905,10 @@
 $(BUILT_PRODUCTS_DIR)/DerivedSources/WebCore/JSMathMLElementWrapperFactory.h
 $(BUILT_PRODUCTS_DIR)/DerivedSources/WebCore/JSMediaCapabilities.cpp
 $(BUILT_PRODUCTS_DIR)/DerivedSources/WebCore/JSMediaCapabilities.h
+$(BUILT_PRODUCTS_DIR)/DerivedSources/WebCore/JSMediaCapabilitiesDecodingInfo.cpp
+$(BUILT_PRODUCTS_DIR)/DerivedSources/WebCore/JSMediaCapabilitiesDecodingInfo.h
+$(BUILT_PRODUCTS_DIR)/DerivedSources/WebCore/JSMediaCapabilitiesEncodingInfo.cpp
+$(BUILT_PRODUCTS_DIR)/DerivedSources/WebCore/JSMediaCapabilitiesEncodingInfo.h
 $(BUILT_PRODUCTS_DIR)/DerivedSources/WebCore/JSMediaCapabilitiesInfo.cpp
 $(BUILT_PRODUCTS_DIR)/DerivedSources/WebCore/JSMediaCapabilitiesInfo.h
 $(BUILT_PRODUCTS_DIR)/DerivedSources/WebCore/JSMediaConfiguration.cpp

Modified: trunk/Source/WebCore/DerivedSources.make (243013 => 243014)


--- trunk/Source/WebCore/DerivedSources.make	2019-03-15 21:45:41 UTC (rev 243013)
+++ trunk/Source/WebCore/DerivedSources.make	2019-03-15 22:02:02 UTC (rev 243014)
@@ -196,6 +196,8 @@
     $(WebCore)/Modules/indexeddb/WorkerGlobalScopeIndexedDatabase.idl \
     $(WebCore)/Modules/mediacapabilities/AudioConfiguration.idl \
     $(WebCore)/Modules/mediacapabilities/MediaCapabilities.idl \
+	$(WebCore)/Modules/mediacapabilities/MediaCapabilitiesDecodingInfo.idl \
+	$(WebCore)/Modules/mediacapabilities/MediaCapabilitiesEncodingInfo.idl \
     $(WebCore)/Modules/mediacapabilities/MediaCapabilitiesInfo.idl \
     $(WebCore)/Modules/mediacapabilities/MediaConfiguration.idl \
     $(WebCore)/Modules/mediacapabilities/MediaDecodingConfiguration.idl \

Modified: trunk/Source/WebCore/Modules/mediacapabilities/AudioConfiguration.idl (243013 => 243014)


--- trunk/Source/WebCore/Modules/mediacapabilities/AudioConfiguration.idl	2019-03-15 21:45:41 UTC (rev 243013)
+++ trunk/Source/WebCore/Modules/mediacapabilities/AudioConfiguration.idl	2019-03-15 22:02:02 UTC (rev 243014)
@@ -23,6 +23,10 @@
  * THE POSSIBILITY OF SUCH DAMAGE.
  */
 
+[
+    EnabledBySetting=MediaCapabilities,
+    JSGenerateToJSObject,
+]
 dictionary AudioConfiguration {
   required DOMString contentType;
   DOMString channels;

Modified: trunk/Source/WebCore/Modules/mediacapabilities/MediaCapabilities.cpp (243013 => 243014)


--- trunk/Source/WebCore/Modules/mediacapabilities/MediaCapabilities.cpp	2019-03-15 21:45:41 UTC (rev 243013)
+++ trunk/Source/WebCore/Modules/mediacapabilities/MediaCapabilities.cpp	2019-03-15 22:02:02 UTC (rev 243014)
@@ -27,7 +27,10 @@
 #include "MediaCapabilities.h"
 
 #include "ContentType.h"
-#include "JSMediaCapabilitiesInfo.h"
+#include "JSMediaCapabilitiesDecodingInfo.h"
+#include "JSMediaCapabilitiesEncodingInfo.h"
+#include "MediaCapabilitiesDecodingInfo.h"
+#include "MediaCapabilitiesEncodingInfo.h"
 #include "MediaDecodingConfiguration.h"
 #include "MediaEncodingConfiguration.h"
 #include "MediaEngineConfigurationFactory.h"
@@ -187,7 +190,7 @@
             // consideration the current power source in order to determine the
             // decoding power efficiency unless the device’s power source has side
             // effects such as enabling different decoding modules.
-            promise->resolve<IDLDictionary<MediaCapabilitiesInfo>>(WTFMove(info));
+            promise->resolve<IDLDictionary<MediaCapabilitiesDecodingInfo>>(WTFMove(info));
         };
 
         MediaEngineConfigurationFactory::createDecodingConfiguration(WTFMove(configuration), WTFMove(callback));
@@ -228,7 +231,7 @@
             // order to determine the encoding power efficiency unless the
             // device’s power source has side effects such as enabling different
             // encoding modules.
-            promise->resolve<IDLDictionary<MediaCapabilitiesInfo>>(WTFMove(info));
+            promise->resolve<IDLDictionary<MediaCapabilitiesEncodingInfo>>(WTFMove(info));
         };
 
         MediaEngineConfigurationFactory::createEncodingConfiguration(WTFMove(configuration), WTFMove(callback));

Modified: trunk/Source/WebCore/Modules/mediacapabilities/MediaCapabilities.idl (243013 => 243014)


--- trunk/Source/WebCore/Modules/mediacapabilities/MediaCapabilities.idl	2019-03-15 21:45:41 UTC (rev 243013)
+++ trunk/Source/WebCore/Modules/mediacapabilities/MediaCapabilities.idl	2019-03-15 22:02:02 UTC (rev 243014)
@@ -28,6 +28,6 @@
     ImplementationLacksVTable
 ]
 interface MediaCapabilities {
-  Promise<MediaCapabilitiesInfo> decodingInfo(MediaDecodingConfiguration configuration);
-  Promise<MediaCapabilitiesInfo> encodingInfo(MediaEncodingConfiguration configuration);
+  Promise<MediaCapabilitiesDecodingInfo> decodingInfo(MediaDecodingConfiguration configuration);
+  Promise<MediaCapabilitiesEncodingInfo> encodingInfo(MediaEncodingConfiguration configuration);
 };

Copied: trunk/Source/WebCore/Modules/mediacapabilities/MediaCapabilitiesDecodingInfo.idl (from rev 243013, trunk/Source/WebCore/Modules/mediacapabilities/MediaEncodingConfiguration.idl) (0 => 243014)


--- trunk/Source/WebCore/Modules/mediacapabilities/MediaCapabilitiesDecodingInfo.idl	                        (rev 0)
+++ trunk/Source/WebCore/Modules/mediacapabilities/MediaCapabilitiesDecodingInfo.idl	2019-03-15 22:02:02 UTC (rev 243014)
@@ -0,0 +1,32 @@
+/*
+ * Copyright (C) 2019 Apple Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
+ * THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+[
+    EnabledBySetting=MediaCapabilities,
+    JSGenerateToJSObject,
+]
+dictionary MediaCapabilitiesDecodingInfo : MediaCapabilitiesInfo {
+    MediaDecodingConfiguration supportedConfiguration;
+};

Copied: trunk/Source/WebCore/Modules/mediacapabilities/MediaCapabilitiesEncodingInfo.idl (from rev 243013, trunk/Source/WebCore/Modules/mediacapabilities/AudioConfiguration.idl) (0 => 243014)


--- trunk/Source/WebCore/Modules/mediacapabilities/MediaCapabilitiesEncodingInfo.idl	                        (rev 0)
+++ trunk/Source/WebCore/Modules/mediacapabilities/MediaCapabilitiesEncodingInfo.idl	2019-03-15 22:02:02 UTC (rev 243014)
@@ -0,0 +1,32 @@
+/*
+ * Copyright (C) 2019 Apple Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
+ * THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+[
+    EnabledBySetting=MediaCapabilities,
+    JSGenerateToJSObject,
+]
+dictionary MediaCapabilitiesEncodingInfo : MediaCapabilitiesInfo {
+    MediaEncodingConfiguration supportedConfiguration;
+};

Modified: trunk/Source/WebCore/Modules/mediacapabilities/MediaDecodingConfiguration.idl (243013 => 243014)


--- trunk/Source/WebCore/Modules/mediacapabilities/MediaDecodingConfiguration.idl	2019-03-15 21:45:41 UTC (rev 243013)
+++ trunk/Source/WebCore/Modules/mediacapabilities/MediaDecodingConfiguration.idl	2019-03-15 22:02:02 UTC (rev 243014)
@@ -23,6 +23,10 @@
  * THE POSSIBILITY OF SUCH DAMAGE.
  */
 
+[
+    EnabledBySetting=MediaCapabilities,
+    JSGenerateToJSObject,
+]
 dictionary MediaDecodingConfiguration : MediaConfiguration {
   required MediaDecodingType type;
 };

Modified: trunk/Source/WebCore/Modules/mediacapabilities/MediaEncodingConfiguration.idl (243013 => 243014)


--- trunk/Source/WebCore/Modules/mediacapabilities/MediaEncodingConfiguration.idl	2019-03-15 21:45:41 UTC (rev 243013)
+++ trunk/Source/WebCore/Modules/mediacapabilities/MediaEncodingConfiguration.idl	2019-03-15 22:02:02 UTC (rev 243014)
@@ -23,6 +23,10 @@
  * THE POSSIBILITY OF SUCH DAMAGE.
  */
 
+[
+    EnabledBySetting=MediaCapabilities,
+    JSGenerateToJSObject,
+]
 dictionary MediaEncodingConfiguration : MediaConfiguration {
   required MediaEncodingType type;
 };

Modified: trunk/Source/WebCore/Modules/mediacapabilities/VideoConfiguration.idl (243013 => 243014)


--- trunk/Source/WebCore/Modules/mediacapabilities/VideoConfiguration.idl	2019-03-15 21:45:41 UTC (rev 243013)
+++ trunk/Source/WebCore/Modules/mediacapabilities/VideoConfiguration.idl	2019-03-15 22:02:02 UTC (rev 243014)
@@ -23,6 +23,10 @@
  * THE POSSIBILITY OF SUCH DAMAGE.
  */
 
+[
+    EnabledBySetting=MediaCapabilities,
+    JSGenerateToJSObject,
+]
 dictionary VideoConfiguration {
   required DOMString contentType;
   required unsigned long width;

Modified: trunk/Source/WebCore/Sources.txt (243013 => 243014)


--- trunk/Source/WebCore/Sources.txt	2019-03-15 21:45:41 UTC (rev 243013)
+++ trunk/Source/WebCore/Sources.txt	2019-03-15 22:02:02 UTC (rev 243014)
@@ -2929,6 +2929,8 @@
 JSLocation.cpp
 JSLongRange.cpp
 JSMediaCapabilities.cpp
+JSMediaCapabilitiesDecodingInfo.cpp
+JSMediaCapabilitiesEncodingInfo.cpp
 JSMediaCapabilitiesInfo.cpp
 JSMediaController.cpp
 JSMediaControlsHost.cpp

Modified: trunk/Source/WebCore/WebCore.xcodeproj/project.pbxproj (243013 => 243014)


--- trunk/Source/WebCore/WebCore.xcodeproj/project.pbxproj	2019-03-15 21:45:41 UTC (rev 243013)
+++ trunk/Source/WebCore/WebCore.xcodeproj/project.pbxproj	2019-03-15 22:02:02 UTC (rev 243014)
@@ -4181,6 +4181,8 @@
 		CDC939A81E9BDFB100BB768D /* VideoToolboxSoftLink.h in Headers */ = {isa = PBXBuildFile; fileRef = CDC939A61E9BDFB100BB768D /* VideoToolboxSoftLink.h */; };
 		CDC979F51C498C0900DB50D4 /* WebCoreNSErrorExtras.h in Headers */ = {isa = PBXBuildFile; fileRef = CDC979F31C498C0900DB50D4 /* WebCoreNSErrorExtras.h */; };
 		CDCA98EB18B2C8EB00C12FF9 /* LegacyCDMPrivateMediaPlayer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = CDCA98EA18B2C8EB00C12FF9 /* LegacyCDMPrivateMediaPlayer.cpp */; };
+		CDCC9BCF22387E9A00FFB51C /* MediaCapabilitiesDecodingInfo.h in Headers */ = {isa = PBXBuildFile; fileRef = CDCC9BCE22387E9A00FFB51C /* MediaCapabilitiesDecodingInfo.h */; };
+		CDCC9BD122387EAA00FFB51C /* MediaCapabilitiesEncodingInfo.h in Headers */ = {isa = PBXBuildFile; fileRef = CDCC9BD022387EAA00FFB51C /* MediaCapabilitiesEncodingInfo.h */; };
 		CDCD41E81C3DDB0A00965D99 /* ParsedContentRange.h in Headers */ = {isa = PBXBuildFile; fileRef = CDCD41E61C3DDB0900965D99 /* ParsedContentRange.h */; settings = {ATTRIBUTES = (Private, ); }; };
 		CDCFABBD18C0AF78006F8450 /* SelectionRangeData.h in Headers */ = {isa = PBXBuildFile; fileRef = CDCFABBB18C0AE31006F8450 /* SelectionRangeData.h */; settings = {ATTRIBUTES = (Private, ); }; };
 		CDD7089718359F6F002B3DC6 /* SampleMap.h in Headers */ = {isa = PBXBuildFile; fileRef = CDD7089518359F6F002B3DC6 /* SampleMap.h */; settings = {ATTRIBUTES = (Private, ); }; };
@@ -13834,6 +13836,10 @@
 		CDC979F31C498C0900DB50D4 /* WebCoreNSErrorExtras.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WebCoreNSErrorExtras.h; sourceTree = "<group>"; };
 		CDCA98E918B2C8D000C12FF9 /* LegacyCDMPrivateMediaPlayer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = LegacyCDMPrivateMediaPlayer.h; sourceTree = "<group>"; };
 		CDCA98EA18B2C8EB00C12FF9 /* LegacyCDMPrivateMediaPlayer.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = LegacyCDMPrivateMediaPlayer.cpp; sourceTree = "<group>"; };
+		CDCC9BC522387DA300FFB51C /* MediaCapabilitiesDecodingInfo.idl */ = {isa = PBXFileReference; lastKnownFileType = text; path = MediaCapabilitiesDecodingInfo.idl; sourceTree = "<group>"; };
+		CDCC9BCA22387E2100FFB51C /* MediaCapabilitiesEncodingInfo.idl */ = {isa = PBXFileReference; lastKnownFileType = text; path = MediaCapabilitiesEncodingInfo.idl; sourceTree = "<group>"; };
+		CDCC9BCE22387E9A00FFB51C /* MediaCapabilitiesDecodingInfo.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MediaCapabilitiesDecodingInfo.h; sourceTree = "<group>"; };
+		CDCC9BD022387EAA00FFB51C /* MediaCapabilitiesEncodingInfo.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MediaCapabilitiesEncodingInfo.h; sourceTree = "<group>"; };
 		CDCD41E51C3DDB0900965D99 /* ParsedContentRange.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ParsedContentRange.cpp; sourceTree = "<group>"; };
 		CDCD41E61C3DDB0900965D99 /* ParsedContentRange.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ParsedContentRange.h; sourceTree = "<group>"; };
 		CDCE5CD014633BC900D47CCA /* EventTargetFactory.in */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = EventTargetFactory.in; sourceTree = "<group>"; };
@@ -22321,6 +22327,8 @@
 			isa = PBXGroup;
 			children = (
 				CDBD3D2B1FE85CBB0012C545 /* AudioConfiguration.h */,
+				CDCC9BCE22387E9A00FFB51C /* MediaCapabilitiesDecodingInfo.h */,
+				CDCC9BD022387EAA00FFB51C /* MediaCapabilitiesEncodingInfo.h */,
 				CD0C8B582141C8CA0062F59D /* MediaCapabilitiesInfo.h */,
 				CDBD3D351FE85CBF0012C545 /* MediaConfiguration.h */,
 				CDBD3D361FE85CC00012C545 /* MediaDecodingConfiguration.h */,
@@ -26024,6 +26032,8 @@
 				CDA130BD1FEB332D00F53254 /* MediaCapabilities.cpp */,
 				CDBD3D321FE85CBE0012C545 /* MediaCapabilities.h */,
 				CDBD3D2F1FE85CBC0012C545 /* MediaCapabilities.idl */,
+				CDCC9BC522387DA300FFB51C /* MediaCapabilitiesDecodingInfo.idl */,
+				CDCC9BCA22387E2100FFB51C /* MediaCapabilitiesEncodingInfo.idl */,
 				CDBD3D331FE85CBE0012C545 /* MediaCapabilitiesInfo.idl */,
 				CDBD3D291FE85CB90012C545 /* MediaConfiguration.idl */,
 				CDBD3D3B1FE85CC20012C545 /* MediaDecodingConfiguration.idl */,
@@ -32108,6 +32118,7 @@
 				C65046A9167BFB5500CC2A4D /* TemplateContentDocumentFragment.h in Headers */,
 				26E944DD1AC4B4EA007B85B5 /* Term.h in Headers */,
 				6550B6A6099DF0270090D781 /* Text.h in Headers */,
+				CDCC9BD122387EAA00FFB51C /* MediaCapabilitiesEncodingInfo.h in Headers */,
 				93309E17099E64920056E581 /* TextAffinity.h in Headers */,
 				CE7B2DB51586ABAD0098B3FA /* TextAlternativeWithRange.h in Headers */,
 				0F54DCE61881051D003EEDBB /* TextAutoSizing.h in Headers */,
@@ -32201,6 +32212,7 @@
 				49E911C40EF86D47009D0CAF /* TransformationMatrix.h in Headers */,
 				FB484F4D171F821E00040755 /* TransformFunctions.h in Headers */,
 				49E911CE0EF86D47009D0CAF /* TransformOperation.h in Headers */,
+				CDCC9BCF22387E9A00FFB51C /* MediaCapabilitiesDecodingInfo.h in Headers */,
 				49E911D00EF86D47009D0CAF /* TransformOperations.h in Headers */,
 				5DB1BC6A10715A6400EFAA49 /* TransformSource.h in Headers */,
 				4945BFD413CF809000CC3B38 /* TransformState.h in Headers */,

Copied: trunk/Source/WebCore/platform/MediaCapabilitiesDecodingInfo.h (from rev 243013, trunk/Source/WebCore/platform/graphics/cocoa/MediaEngineConfigurationFactoryCocoa.h) (0 => 243014)


--- trunk/Source/WebCore/platform/MediaCapabilitiesDecodingInfo.h	                        (rev 0)
+++ trunk/Source/WebCore/platform/MediaCapabilitiesDecodingInfo.h	2019-03-15 22:02:02 UTC (rev 243014)
@@ -0,0 +1,51 @@
+/*
+ * Copyright (C) 2019 Apple Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
+ * THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#pragma once
+
+#include "MediaCapabilitiesInfo.h"
+#include "MediaDecodingConfiguration.h"
+
+namespace WebCore {
+
+struct MediaCapabilitiesDecodingInfo : MediaCapabilitiesInfo {
+    // FIXME(C++17): remove the following constructors once all compilers support extended
+    // aggregate initialization:
+    // <http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2015/p0017r1.html>
+    MediaCapabilitiesDecodingInfo() = default;
+    MediaCapabilitiesDecodingInfo(MediaDecodingConfiguration&& supportedConfiguration)
+        : MediaCapabilitiesDecodingInfo({ }, WTFMove(supportedConfiguration))
+    {
+    }
+    MediaCapabilitiesDecodingInfo(MediaCapabilitiesInfo&& info, MediaDecodingConfiguration&& supportedConfiguration)
+        : MediaCapabilitiesInfo(WTFMove(info))
+        , supportedConfiguration(WTFMove(supportedConfiguration))
+    {
+    }
+
+    MediaDecodingConfiguration supportedConfiguration;
+};
+
+}

Copied: trunk/Source/WebCore/platform/MediaCapabilitiesEncodingInfo.h (from rev 243013, trunk/Source/WebCore/platform/graphics/cocoa/MediaEngineConfigurationFactoryCocoa.h) (0 => 243014)


--- trunk/Source/WebCore/platform/MediaCapabilitiesEncodingInfo.h	                        (rev 0)
+++ trunk/Source/WebCore/platform/MediaCapabilitiesEncodingInfo.h	2019-03-15 22:02:02 UTC (rev 243014)
@@ -0,0 +1,51 @@
+/*
+ * Copyright (C) 2019 Apple Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
+ * THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#pragma once
+
+#include "MediaCapabilitiesInfo.h"
+#include "MediaEncodingConfiguration.h"
+
+namespace WebCore {
+
+struct MediaCapabilitiesEncodingInfo : MediaCapabilitiesInfo {
+    // FIXME(C++17): remove the following constructors once all compilers support extended
+    // aggregate initialization:
+    // <http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2015/p0017r1.html>
+    MediaCapabilitiesEncodingInfo() = default;
+    MediaCapabilitiesEncodingInfo(MediaEncodingConfiguration&& supportedConfiguration)
+        : MediaCapabilitiesEncodingInfo({ }, WTFMove(supportedConfiguration))
+    {
+    }
+    MediaCapabilitiesEncodingInfo(MediaCapabilitiesInfo&& info, MediaEncodingConfiguration&& supportedConfiguration)
+        : MediaCapabilitiesInfo(WTFMove(info))
+        , supportedConfiguration(WTFMove(supportedConfiguration))
+    {
+    }
+
+    MediaEncodingConfiguration supportedConfiguration;
+};
+
+}

Modified: trunk/Source/WebCore/platform/graphics/cocoa/MediaEngineConfigurationFactoryCocoa.cpp (243013 => 243014)


--- trunk/Source/WebCore/platform/graphics/cocoa/MediaEngineConfigurationFactoryCocoa.cpp	2019-03-15 21:45:41 UTC (rev 243013)
+++ trunk/Source/WebCore/platform/graphics/cocoa/MediaEngineConfigurationFactoryCocoa.cpp	2019-03-15 22:02:02 UTC (rev 243014)
@@ -29,7 +29,7 @@
 #if PLATFORM(COCOA)
 
 #include "HEVCUtilitiesCocoa.h"
-#include "MediaCapabilitiesInfo.h"
+#include "MediaCapabilitiesDecodingInfo.h"
 #include "MediaDecodingConfiguration.h"
 #include "MediaPlayer.h"
 
@@ -48,9 +48,10 @@
     return 0;
 }
 
-void createMediaPlayerDecodingConfigurationCocoa(MediaDecodingConfiguration& configuration, WTF::Function<void(MediaCapabilitiesInfo&&)>&& callback)
+void createMediaPlayerDecodingConfigurationCocoa(MediaDecodingConfiguration&& configuration, WTF::Function<void(MediaCapabilitiesDecodingInfo&&)>&& callback)
 {
-    MediaCapabilitiesInfo info;
+    MediaCapabilitiesDecodingInfo info;
+
     if (configuration.video) {
         auto& videoConfiguration = configuration.video.value();
         MediaEngineSupportParameters parameters { };
@@ -57,14 +58,13 @@
         parameters.type = ContentType(videoConfiguration.contentType);
         parameters.isMediaSource = configuration.type == MediaDecodingType::MediaSource;
         if (MediaPlayer::supportsType(parameters) != MediaPlayer::IsSupported) {
-            callback({ });
+            callback({{ }, WTFMove(configuration)});
             return;
         }
-        info.supported = true;
 
         auto codecs = parameters.type.codecs();
         if (codecs.size() != 1) {
-            callback({ });
+            callback({{ }, WTFMove(configuration)});
             return;
         }
 
@@ -72,7 +72,7 @@
         auto& codec = codecs[0];
         auto videoCodecType = videoCodecTypeFromRFC4281Type(codec);
         if (!videoCodecType) {
-            callback({ });
+            callback({{ }, WTFMove(configuration)});
             return;
         }
 
@@ -79,11 +79,13 @@
         if (videoCodecType == kCMVideoCodecType_HEVC) {
             auto parameters = parseHEVCCodecParameters(codec);
             if (!parameters || !validateHEVCParameters(parameters.value(), info)) {
-                callback({ });
+                callback({{ }, WTFMove(configuration)});
                 return;
             }
-        } else if (canLoad_VideoToolbox_VTIsHardwareDecodeSupported())
+        } else if (canLoad_VideoToolbox_VTIsHardwareDecodeSupported()) {
             info.powerEfficient = VTIsHardwareDecodeSupported(videoCodecType);
+            info.smooth = true;
+        }
     }
 
     if (configuration.audio) {
@@ -91,12 +93,14 @@
         parameters.type = ContentType(configuration.audio.value().contentType);
         parameters.isMediaSource = configuration.type == MediaDecodingType::MediaSource;
         if (MediaPlayer::supportsType(parameters) != MediaPlayer::IsSupported) {
-            callback({ });
+            callback({{ }, WTFMove(configuration)});
             return;
         }
         info.supported = true;
     }
 
+    info.supportedConfiguration = WTFMove(configuration);
+
     callback(WTFMove(info));
 }
 

Modified: trunk/Source/WebCore/platform/graphics/cocoa/MediaEngineConfigurationFactoryCocoa.h (243013 => 243014)


--- trunk/Source/WebCore/platform/graphics/cocoa/MediaEngineConfigurationFactoryCocoa.h	2019-03-15 21:45:41 UTC (rev 243013)
+++ trunk/Source/WebCore/platform/graphics/cocoa/MediaEngineConfigurationFactoryCocoa.h	2019-03-15 22:02:02 UTC (rev 243014)
@@ -29,10 +29,10 @@
 
 namespace WebCore {
 
-struct MediaCapabilitiesInfo;
+struct MediaCapabilitiesDecodingInfo;
 struct MediaDecodingConfiguration;
 
-extern void createMediaPlayerDecodingConfigurationCocoa(MediaDecodingConfiguration&, WTF::Function<void(MediaCapabilitiesInfo&&)>&&);
+extern void createMediaPlayerDecodingConfigurationCocoa(MediaDecodingConfiguration&&, WTF::Function<void(MediaCapabilitiesDecodingInfo&&)>&&);
 
 }
 

Modified: trunk/Source/WebCore/platform/graphics/gstreamer/MediaEngineConfigurationFactoryGStreamer.cpp (243013 => 243014)


--- trunk/Source/WebCore/platform/graphics/gstreamer/MediaEngineConfigurationFactoryGStreamer.cpp	2019-03-15 21:45:41 UTC (rev 243013)
+++ trunk/Source/WebCore/platform/graphics/gstreamer/MediaEngineConfigurationFactoryGStreamer.cpp	2019-03-15 22:02:02 UTC (rev 243014)
@@ -31,7 +31,7 @@
 #if USE(GSTREAMER)
 
 #include "GStreamerRegistryScanner.h"
-#include "MediaCapabilitiesInfo.h"
+#include "MediaCapabilitiesDecodingInfo.h"
 #include "MediaDecodingConfiguration.h"
 #include "MediaPlayer.h"
 #include <wtf/Function.h>
@@ -42,7 +42,7 @@
 
 namespace WebCore {
 
-void createMediaPlayerDecodingConfigurationGStreamer(MediaDecodingConfiguration& configuration, WTF::Function<void(MediaCapabilitiesInfo&&)>&& callback)
+void createMediaPlayerDecodingConfigurationGStreamer(MediaDecodingConfiguration&& configuration, WTF::Function<void(MediaCapabilitiesDecodingInfo&&)>&& callback)
 {
     bool isMediaSource = configuration.type == MediaDecodingType::MediaSource;
 #if ENABLE(MEDIA_SOURCE)
@@ -49,15 +49,16 @@
     auto& scanner = isMediaSource ? GStreamerRegistryScannerMSE::singleton() : GStreamerRegistryScanner::singleton();
 #else
     if (isMediaSource) {
-        callback({ });
+        callback({{ }, WTFMove(configuration)});
         return;
     }
     auto& scanner = GStreamerRegistryScanner::singleton();
 #endif
     auto lookupResult = scanner.isDecodingSupported(configuration);
-    MediaCapabilitiesInfo info;
+    MediaCapabilitiesDecodingInfo info;
     info.supported = lookupResult.isSupported;
     info.powerEfficient = lookupResult.isUsingHardware;
+    info.supportedConfiguration = WTFMove(configuration);
 
     callback(WTFMove(info));
 }

Modified: trunk/Source/WebCore/platform/graphics/gstreamer/MediaEngineConfigurationFactoryGStreamer.h (243013 => 243014)


--- trunk/Source/WebCore/platform/graphics/gstreamer/MediaEngineConfigurationFactoryGStreamer.h	2019-03-15 21:45:41 UTC (rev 243013)
+++ trunk/Source/WebCore/platform/graphics/gstreamer/MediaEngineConfigurationFactoryGStreamer.h	2019-03-15 22:02:02 UTC (rev 243014)
@@ -33,10 +33,10 @@
 
 namespace WebCore {
 
-struct MediaCapabilitiesInfo;
+struct MediaCapabilitiesDecodingInfo;
 struct MediaDecodingConfiguration;
 
-extern void createMediaPlayerDecodingConfigurationGStreamer(MediaDecodingConfiguration&, WTF::Function<void(MediaCapabilitiesInfo&&)>&&);
+extern void createMediaPlayerDecodingConfigurationGStreamer(MediaDecodingConfiguration&&, WTF::Function<void(MediaCapabilitiesDecodingInfo&&)>&&);
 
 }
 

Modified: trunk/Source/WebCore/platform/mediacapabilities/MediaEngineConfigurationFactory.cpp (243013 => 243014)


--- trunk/Source/WebCore/platform/mediacapabilities/MediaEngineConfigurationFactory.cpp	2019-03-15 21:45:41 UTC (rev 243013)
+++ trunk/Source/WebCore/platform/mediacapabilities/MediaEngineConfigurationFactory.cpp	2019-03-15 22:02:02 UTC (rev 243014)
@@ -28,7 +28,8 @@
 #include "config.h"
 #include "MediaEngineConfigurationFactory.h"
 
-#include "MediaCapabilitiesInfo.h"
+#include "MediaCapabilitiesDecodingInfo.h"
+#include "MediaCapabilitiesEncodingInfo.h"
 #include "MediaDecodingConfiguration.h"
 #include "MediaEncodingConfiguration.h"
 #include "MediaEngineConfigurationFactoryMock.h"
@@ -52,8 +53,8 @@
 }
 
 struct MediaEngineFactory {
-    void(*createDecodingConfiguration)(MediaDecodingConfiguration&, MediaEngineConfigurationFactory::DecodingConfigurationCallback&&);
-    void(*createEncodingConfiguration)(MediaEncodingConfiguration&, MediaEngineConfigurationFactory::EncodingConfigurationCallback&&);
+    void(*createDecodingConfiguration)(MediaDecodingConfiguration&&, MediaEngineConfigurationFactory::DecodingConfigurationCallback&&);
+    void(*createEncodingConfiguration)(MediaEncodingConfiguration&&, MediaEngineConfigurationFactory::EncodingConfigurationCallback&&);
 };
 
 using FactoryVector = Vector<MediaEngineFactory>;
@@ -73,11 +74,11 @@
 void MediaEngineConfigurationFactory::createDecodingConfiguration(MediaDecodingConfiguration&& config, MediaEngineConfigurationFactory::DecodingConfigurationCallback&& callback)
 {
     if (mockEnabled()) {
-        MediaEngineConfigurationFactoryMock::createDecodingConfiguration(config, WTFMove(callback));
+        MediaEngineConfigurationFactoryMock::createDecodingConfiguration(WTFMove(config), WTFMove(callback));
         return;
     }
 
-    auto factoryCallback = [] (auto factoryCallback, auto nextFactory, auto config, auto&& callback) mutable {
+    auto factoryCallback = [] (auto factoryCallback, auto nextFactory, auto&& config, auto&& callback) mutable {
         if (nextFactory == factories().end()) {
             callback({ });
             return;
@@ -89,13 +90,13 @@
             return;
         }
 
-        factory.createDecodingConfiguration(config, [factoryCallback, nextFactory, config, callback = WTFMove(callback)] (auto&& info) mutable {
+        factory.createDecodingConfiguration(WTFMove(config), [factoryCallback, nextFactory, config, callback = WTFMove(callback)] (auto&& info) mutable {
             if (info.supported) {
                 callback(WTFMove(info));
                 return;
             }
 
-            factoryCallback(factoryCallback, ++nextFactory, config, WTFMove(callback));
+            factoryCallback(factoryCallback, ++nextFactory, WTFMove(info.supportedConfiguration), WTFMove(callback));
         });
     };
     factoryCallback(factoryCallback, factories().begin(), config, WTFMove(callback));
@@ -104,11 +105,11 @@
 void MediaEngineConfigurationFactory::createEncodingConfiguration(MediaEncodingConfiguration&& config, MediaEngineConfigurationFactory::EncodingConfigurationCallback&& callback)
 {
     if (mockEnabled()) {
-        MediaEngineConfigurationFactoryMock::createEncodingConfiguration(config, WTFMove(callback));
+        MediaEngineConfigurationFactoryMock::createEncodingConfiguration(WTFMove(config), WTFMove(callback));
         return;
     }
 
-    auto factoryCallback = [] (auto factoryCallback, auto nextFactory, auto config, auto&& callback) mutable {
+    auto factoryCallback = [] (auto factoryCallback, auto nextFactory, auto&& config, auto&& callback) mutable {
         if (nextFactory == factories().end()) {
             callback({ });
             return;
@@ -120,16 +121,16 @@
             return;
         }
 
-        factory.createEncodingConfiguration(config, [factoryCallback, nextFactory, config, callback = WTFMove(callback)] (auto&& info) mutable {
+        factory.createEncodingConfiguration(WTFMove(config), [factoryCallback, nextFactory, callback = WTFMove(callback)] (auto&& info) mutable {
             if (info.supported) {
                 callback(WTFMove(info));
                 return;
             }
 
-            factoryCallback(factoryCallback, ++nextFactory, config, WTFMove(callback));
+            factoryCallback(factoryCallback, ++nextFactory, WTFMove(info.supportedConfiguration), WTFMove(callback));
         });
     };
-    factoryCallback(factoryCallback, factories().begin(), config, WTFMove(callback));
+    factoryCallback(factoryCallback, factories().begin(), WTFMove(config), WTFMove(callback));
 }
 
 void MediaEngineConfigurationFactory::enableMock()

Modified: trunk/Source/WebCore/platform/mediacapabilities/MediaEngineConfigurationFactory.h (243013 => 243014)


--- trunk/Source/WebCore/platform/mediacapabilities/MediaEngineConfigurationFactory.h	2019-03-15 21:45:41 UTC (rev 243013)
+++ trunk/Source/WebCore/platform/mediacapabilities/MediaEngineConfigurationFactory.h	2019-03-15 22:02:02 UTC (rev 243014)
@@ -31,14 +31,15 @@
 
 namespace WebCore {
 
-struct MediaCapabilitiesInfo;
+struct MediaCapabilitiesDecodingInfo;
+struct MediaCapabilitiesEncodingInfo;
 struct MediaDecodingConfiguration;
 struct MediaEncodingConfiguration;
 
 class MediaEngineConfigurationFactory {
 public:
-    using DecodingConfigurationCallback = WTF::Function<void(MediaCapabilitiesInfo&&)>;
-    using EncodingConfigurationCallback = WTF::Function<void(MediaCapabilitiesInfo&&)>;
+    using DecodingConfigurationCallback = WTF::Function<void(MediaCapabilitiesDecodingInfo&&)>;
+    using EncodingConfigurationCallback = WTF::Function<void(MediaCapabilitiesEncodingInfo&&)>;
 
     static void createDecodingConfiguration(MediaDecodingConfiguration&&, DecodingConfigurationCallback&&);
     static void createEncodingConfiguration(MediaEncodingConfiguration&&, EncodingConfigurationCallback&&);

Modified: trunk/Source/WebCore/platform/mock/MediaEngineConfigurationFactoryMock.cpp (243013 => 243014)


--- trunk/Source/WebCore/platform/mock/MediaEngineConfigurationFactoryMock.cpp	2019-03-15 21:45:41 UTC (rev 243013)
+++ trunk/Source/WebCore/platform/mock/MediaEngineConfigurationFactoryMock.cpp	2019-03-15 22:02:02 UTC (rev 243014)
@@ -29,7 +29,8 @@
 #include "MediaEngineConfigurationFactoryMock.h"
 
 #include "ContentType.h"
-#include "MediaCapabilitiesInfo.h"
+#include "MediaCapabilitiesDecodingInfo.h"
+#include "MediaCapabilitiesEncodingInfo.h"
 #include "MediaDecodingConfiguration.h"
 #include "MediaEncodingConfiguration.h"
 
@@ -125,22 +126,23 @@
     return true;
 }
 
-void MediaEngineConfigurationFactoryMock::createDecodingConfiguration(MediaDecodingConfiguration& configuration, DecodingConfigurationCallback&& callback)
+void MediaEngineConfigurationFactoryMock::createDecodingConfiguration(MediaDecodingConfiguration&& configuration, DecodingConfigurationCallback&& callback)
 {
     if (!canDecodeMedia(configuration)) {
-        callback({ });
+        MediaCapabilitiesDecodingInfo info { WTFMove(configuration) };
+        callback(WTFMove(info));
         return;
     }
-    callback({ true, canSmoothlyDecodeMedia(configuration), canPowerEfficientlyDecodeMedia(configuration) });
+    callback({{ true, canSmoothlyDecodeMedia(configuration), canPowerEfficientlyDecodeMedia(configuration) }, WTFMove(configuration)});
 }
 
-void MediaEngineConfigurationFactoryMock::createEncodingConfiguration(MediaEncodingConfiguration& configuration, EncodingConfigurationCallback&& callback)
+void MediaEngineConfigurationFactoryMock::createEncodingConfiguration(MediaEncodingConfiguration&& configuration, EncodingConfigurationCallback&& callback)
 {
     if (!canEncodeMedia(configuration)) {
-        callback({ });
+        callback({{ }, WTFMove(configuration) });
         return;
     }
-    callback({ true, canSmoothlyEncodeMedia(configuration), canPowerEfficientlyEncodeMedia(configuration) });
+    callback({{ true, canSmoothlyEncodeMedia(configuration), canPowerEfficientlyEncodeMedia(configuration) }, WTFMove(configuration)});
 }
 
 } // namespace WebCore

Modified: trunk/Source/WebCore/platform/mock/MediaEngineConfigurationFactoryMock.h (243013 => 243014)


--- trunk/Source/WebCore/platform/mock/MediaEngineConfigurationFactoryMock.h	2019-03-15 21:45:41 UTC (rev 243013)
+++ trunk/Source/WebCore/platform/mock/MediaEngineConfigurationFactoryMock.h	2019-03-15 22:02:02 UTC (rev 243014)
@@ -31,16 +31,17 @@
 
 namespace WebCore {
 
-struct MediaCapabilitiesInfo;
+struct MediaCapabilitiesDecodingInfo;
+struct MediaCapabilitiesEncodingInfo;
 struct MediaDecodingConfiguration;
 struct MediaEncodingConfiguration;
 
 struct MediaEngineConfigurationFactoryMock {
-    using DecodingConfigurationCallback = WTF::Function<void(MediaCapabilitiesInfo&&)>;
-    using EncodingConfigurationCallback = WTF::Function<void(MediaCapabilitiesInfo&&)>;
+    using DecodingConfigurationCallback = WTF::Function<void(MediaCapabilitiesDecodingInfo&&)>;
+    using EncodingConfigurationCallback = WTF::Function<void(MediaCapabilitiesEncodingInfo&&)>;
 
-    static void createDecodingConfiguration(MediaDecodingConfiguration&, DecodingConfigurationCallback&&);
-    static void createEncodingConfiguration(MediaEncodingConfiguration&, EncodingConfigurationCallback&&);
+    static void createDecodingConfiguration(MediaDecodingConfiguration&&, DecodingConfigurationCallback&&);
+    static void createEncodingConfiguration(MediaEncodingConfiguration&&, EncodingConfigurationCallback&&);
 };
 
 }
_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to