Changeset 243014 in webkit


Ignore:
Timestamp:
Mar 15, 2019 3:02:02 PM (5 years ago)
Author:
jer.noble@apple.com
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.
Location:
trunk
Files:
2 added
22 edited
4 copied

Legend:

Unmodified
Added
Removed
  • trunk/LayoutTests/ChangeLog

    r242997 r243014  
     12019-03-15  Jer Noble  <jer.noble@apple.com>
     2
     3        Add a "supportedConfiguration" dictionary to MediaCapabilitiesDecodingInfo and MediaCapabilitiesEncodingInfo
     4        https://bugs.webkit.org/show_bug.cgi?id=195763
     5
     6        Reviewed by Jon Lee.
     7
     8        * media/mediacapabilities/mock-decodingInfo-supportedConfiguration-expected.txt: Added.
     9        * media/mediacapabilities/mock-decodingInfo-supportedConfiguration.html: Added.
     10
    1112019-03-15  Simon Fraser  <simon.fraser@apple.com>
    212
  • trunk/Source/WebCore/CMakeLists.txt

    r242974 r243014  
    283283    Modules/mediacapabilities/AudioConfiguration.idl
    284284    Modules/mediacapabilities/MediaCapabilities.idl
     285    Modules/mediacapabilities/MediaCapabilitiesDecodingInfo.idl
     286    Modules/mediacapabilities/MediaCapabilitiesEncodingInfo.idl
    285287    Modules/mediacapabilities/MediaCapabilitiesInfo.idl
    286288    Modules/mediacapabilities/MediaConfiguration.idl
  • trunk/Source/WebCore/ChangeLog

    r243007 r243014  
     12019-03-15  Jer Noble  <jer.noble@apple.com>
     2
     3        Add a "supportedConfiguration" dictionary to MediaCapabilitiesDecodingInfo and MediaCapabilitiesEncodingInfo
     4        https://bugs.webkit.org/show_bug.cgi?id=195763
     5
     6        Reviewed by Jon Lee.
     7
     8        Test: media/mediacapabilities/mock-decodingInfo-supportedConfiguration.html
     9
     10        Add support for a proposed addition to the Media Capabilities spec that would future-proof additional changes
     11        to Media Capabilities by allowing sites to check exactly what properties were queried by the browser when
     12        answering a decodeInfo() or enocdeInfo() query.
     13
     14        * CMakeLists.txt:
     15        * DerivedSources-input.xcfilelist:
     16        * DerivedSources-output.xcfilelist:
     17        * DerivedSources.make:
     18        * Modules/mediacapabilities/AudioConfiguration.idl:
     19        * Modules/mediacapabilities/MediaCapabilities.cpp:
     20        (WebCore::MediaCapabilities::decodingInfo):
     21        (WebCore::MediaCapabilities::encodingInfo):
     22        * Modules/mediacapabilities/MediaCapabilities.idl:
     23        * Modules/mediacapabilities/MediaCapabilitiesDecodingInfo.idl:
     24        * Modules/mediacapabilities/MediaCapabilitiesEncodingInfo.idl:
     25        * Modules/mediacapabilities/MediaCapabilitiesInfo.idl:
     26        * Modules/mediacapabilities/MediaDecodingConfiguration.idl:
     27        * Modules/mediacapabilities/MediaEncodingConfiguration.idl:
     28        * Modules/mediacapabilities/VideoConfiguration.idl:
     29        * Sources.txt:
     30        * WebCore.xcodeproj/project.pbxproj:
     31        * platform/MediaCapabilitiesDecodingInfo.h: Copied from Source/WebCore/platform/graphics/cocoa/MediaEngineConfigurationFactoryCocoa.h.
     32        (WebCore::MediaCapabilitiesDecodingInfo::MediaCapabilitiesDecodingInfo):
     33        * platform/MediaCapabilitiesEncodingInfo.h: Copied from Source/WebCore/platform/graphics/cocoa/MediaEngineConfigurationFactoryCocoa.h.
     34        (WebCore::MediaCapabilitiesEncodingInfo::MediaCapabilitiesEncodingInfo):
     35        * platform/graphics/cocoa/MediaEngineConfigurationFactoryCocoa.cpp:
     36        (WebCore::createMediaPlayerDecodingConfigurationCocoa):
     37        * platform/graphics/cocoa/MediaEngineConfigurationFactoryCocoa.h:
     38        * platform/graphics/gstreamer/MediaEngineConfigurationFactoryGStreamer.cpp:
     39        (WebCore::createMediaPlayerDecodingConfigurationGStreamer):
     40        * platform/graphics/gstreamer/MediaEngineConfigurationFactoryGStreamer.h:
     41        * platform/mediacapabilities/MediaEngineConfigurationFactory.cpp:
     42        (WebCore::MediaEngineConfigurationFactory::createDecodingConfiguration):
     43        (WebCore::MediaEngineConfigurationFactory::createEncodingConfiguration):
     44        * platform/mediacapabilities/MediaEngineConfigurationFactory.h:
     45        * platform/mock/MediaEngineConfigurationFactoryMock.cpp:
     46        (WebCore::MediaEngineConfigurationFactoryMock::createDecodingConfiguration):
     47        (WebCore::MediaEngineConfigurationFactoryMock::createEncodingConfiguration):
     48        * platform/mock/MediaEngineConfigurationFactoryMock.h:
     49
    1502019-03-15  Antti Koivisto  <antti@apple.com>
    251
  • trunk/Source/WebCore/DerivedSources-input.xcfilelist

    r242976 r243014  
    133133$(PROJECT_DIR)/Modules/mediacapabilities/AudioConfiguration.idl
    134134$(PROJECT_DIR)/Modules/mediacapabilities/MediaCapabilities.idl
     135$(PROJECT_DIR)/Modules/mediacapabilities/MediaCapabilitiesDecodingInfo.idl
     136$(PROJECT_DIR)/Modules/mediacapabilities/MediaCapabilitiesEncodingInfo.idl
    135137$(PROJECT_DIR)/Modules/mediacapabilities/MediaCapabilitiesInfo.idl
    136138$(PROJECT_DIR)/Modules/mediacapabilities/MediaConfiguration.idl
  • trunk/Source/WebCore/DerivedSources-output.xcfilelist

    r242976 r243014  
    906906$(BUILT_PRODUCTS_DIR)/DerivedSources/WebCore/JSMediaCapabilities.cpp
    907907$(BUILT_PRODUCTS_DIR)/DerivedSources/WebCore/JSMediaCapabilities.h
     908$(BUILT_PRODUCTS_DIR)/DerivedSources/WebCore/JSMediaCapabilitiesDecodingInfo.cpp
     909$(BUILT_PRODUCTS_DIR)/DerivedSources/WebCore/JSMediaCapabilitiesDecodingInfo.h
     910$(BUILT_PRODUCTS_DIR)/DerivedSources/WebCore/JSMediaCapabilitiesEncodingInfo.cpp
     911$(BUILT_PRODUCTS_DIR)/DerivedSources/WebCore/JSMediaCapabilitiesEncodingInfo.h
    908912$(BUILT_PRODUCTS_DIR)/DerivedSources/WebCore/JSMediaCapabilitiesInfo.cpp
    909913$(BUILT_PRODUCTS_DIR)/DerivedSources/WebCore/JSMediaCapabilitiesInfo.h
  • trunk/Source/WebCore/DerivedSources.make

    r242974 r243014  
    197197    $(WebCore)/Modules/mediacapabilities/AudioConfiguration.idl \
    198198    $(WebCore)/Modules/mediacapabilities/MediaCapabilities.idl \
     199        $(WebCore)/Modules/mediacapabilities/MediaCapabilitiesDecodingInfo.idl \
     200        $(WebCore)/Modules/mediacapabilities/MediaCapabilitiesEncodingInfo.idl \
    199201    $(WebCore)/Modules/mediacapabilities/MediaCapabilitiesInfo.idl \
    200202    $(WebCore)/Modules/mediacapabilities/MediaConfiguration.idl \
  • trunk/Source/WebCore/Modules/mediacapabilities/AudioConfiguration.idl

    r226228 r243014  
    2424 */
    2525
     26[
     27    EnabledBySetting=MediaCapabilities,
     28    JSGenerateToJSObject,
     29]
    2630dictionary AudioConfiguration {
    2731  required DOMString contentType;
  • trunk/Source/WebCore/Modules/mediacapabilities/MediaCapabilities.cpp

    r235919 r243014  
    2828
    2929#include "ContentType.h"
    30 #include "JSMediaCapabilitiesInfo.h"
     30#include "JSMediaCapabilitiesDecodingInfo.h"
     31#include "JSMediaCapabilitiesEncodingInfo.h"
     32#include "MediaCapabilitiesDecodingInfo.h"
     33#include "MediaCapabilitiesEncodingInfo.h"
    3134#include "MediaDecodingConfiguration.h"
    3235#include "MediaEncodingConfiguration.h"
     
    188191            // decoding power efficiency unless the device’s power source has side
    189192            // effects such as enabling different decoding modules.
    190             promise->resolve<IDLDictionary<MediaCapabilitiesInfo>>(WTFMove(info));
     193            promise->resolve<IDLDictionary<MediaCapabilitiesDecodingInfo>>(WTFMove(info));
    191194        };
    192195
     
    229232            // device’s power source has side effects such as enabling different
    230233            // encoding modules.
    231             promise->resolve<IDLDictionary<MediaCapabilitiesInfo>>(WTFMove(info));
     234            promise->resolve<IDLDictionary<MediaCapabilitiesEncodingInfo>>(WTFMove(info));
    232235        };
    233236
  • trunk/Source/WebCore/Modules/mediacapabilities/MediaCapabilities.idl

    r235675 r243014  
    2929]
    3030interface MediaCapabilities {
    31   Promise<MediaCapabilitiesInfo> decodingInfo(MediaDecodingConfiguration configuration);
    32   Promise<MediaCapabilitiesInfo> encodingInfo(MediaEncodingConfiguration configuration);
     31  Promise<MediaCapabilitiesDecodingInfo> decodingInfo(MediaDecodingConfiguration configuration);
     32  Promise<MediaCapabilitiesEncodingInfo> encodingInfo(MediaEncodingConfiguration configuration);
    3333};
  • trunk/Source/WebCore/Modules/mediacapabilities/MediaCapabilitiesDecodingInfo.idl

    r243013 r243014  
    11/*
    2  * Copyright (C) 2017 Apple Inc. All rights reserved.
     2 * Copyright (C) 2019 Apple Inc. All rights reserved.
    33 *
    44 * Redistribution and use in source and binary forms, with or without
     
    2424 */
    2525
    26 dictionary MediaEncodingConfiguration : MediaConfiguration {
    27   required MediaEncodingType type;
     26[
     27    EnabledBySetting=MediaCapabilities,
     28    JSGenerateToJSObject,
     29]
     30dictionary MediaCapabilitiesDecodingInfo : MediaCapabilitiesInfo {
     31    MediaDecodingConfiguration supportedConfiguration;
    2832};
  • trunk/Source/WebCore/Modules/mediacapabilities/MediaCapabilitiesEncodingInfo.idl

    r243013 r243014  
    11/*
    2  * Copyright (C) 2017 Apple Inc. All rights reserved.
     2 * Copyright (C) 2019 Apple Inc. All rights reserved.
    33 *
    44 * Redistribution and use in source and binary forms, with or without
     
    2424 */
    2525
    26 dictionary AudioConfiguration {
    27   required DOMString contentType;
    28   DOMString channels;
    29   unsigned long long bitrate;
    30   unsigned long samplerate;
     26[
     27    EnabledBySetting=MediaCapabilities,
     28    JSGenerateToJSObject,
     29]
     30dictionary MediaCapabilitiesEncodingInfo : MediaCapabilitiesInfo {
     31    MediaEncodingConfiguration supportedConfiguration;
    3132};
  • trunk/Source/WebCore/Modules/mediacapabilities/MediaDecodingConfiguration.idl

    r226228 r243014  
    2424 */
    2525
     26[
     27    EnabledBySetting=MediaCapabilities,
     28    JSGenerateToJSObject,
     29]
    2630dictionary MediaDecodingConfiguration : MediaConfiguration {
    2731  required MediaDecodingType type;
  • trunk/Source/WebCore/Modules/mediacapabilities/MediaEncodingConfiguration.idl

    r226228 r243014  
    2424 */
    2525
     26[
     27    EnabledBySetting=MediaCapabilities,
     28    JSGenerateToJSObject,
     29]
    2630dictionary MediaEncodingConfiguration : MediaConfiguration {
    2731  required MediaEncodingType type;
  • trunk/Source/WebCore/Modules/mediacapabilities/VideoConfiguration.idl

    r235919 r243014  
    2424 */
    2525
     26[
     27    EnabledBySetting=MediaCapabilities,
     28    JSGenerateToJSObject,
     29]
    2630dictionary VideoConfiguration {
    2731  required DOMString contentType;
  • trunk/Source/WebCore/Sources.txt

    r242978 r243014  
    29302930JSLongRange.cpp
    29312931JSMediaCapabilities.cpp
     2932JSMediaCapabilitiesDecodingInfo.cpp
     2933JSMediaCapabilitiesEncodingInfo.cpp
    29322934JSMediaCapabilitiesInfo.cpp
    29332935JSMediaController.cpp
  • trunk/Source/WebCore/WebCore.xcodeproj/project.pbxproj

    r243002 r243014  
    41824182                CDC979F51C498C0900DB50D4 /* WebCoreNSErrorExtras.h in Headers */ = {isa = PBXBuildFile; fileRef = CDC979F31C498C0900DB50D4 /* WebCoreNSErrorExtras.h */; };
    41834183                CDCA98EB18B2C8EB00C12FF9 /* LegacyCDMPrivateMediaPlayer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = CDCA98EA18B2C8EB00C12FF9 /* LegacyCDMPrivateMediaPlayer.cpp */; };
     4184                CDCC9BCF22387E9A00FFB51C /* MediaCapabilitiesDecodingInfo.h in Headers */ = {isa = PBXBuildFile; fileRef = CDCC9BCE22387E9A00FFB51C /* MediaCapabilitiesDecodingInfo.h */; };
     4185                CDCC9BD122387EAA00FFB51C /* MediaCapabilitiesEncodingInfo.h in Headers */ = {isa = PBXBuildFile; fileRef = CDCC9BD022387EAA00FFB51C /* MediaCapabilitiesEncodingInfo.h */; };
    41844186                CDCD41E81C3DDB0A00965D99 /* ParsedContentRange.h in Headers */ = {isa = PBXBuildFile; fileRef = CDCD41E61C3DDB0900965D99 /* ParsedContentRange.h */; settings = {ATTRIBUTES = (Private, ); }; };
    41854187                CDCFABBD18C0AF78006F8450 /* SelectionRangeData.h in Headers */ = {isa = PBXBuildFile; fileRef = CDCFABBB18C0AE31006F8450 /* SelectionRangeData.h */; settings = {ATTRIBUTES = (Private, ); }; };
     
    1383513837                CDCA98E918B2C8D000C12FF9 /* LegacyCDMPrivateMediaPlayer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = LegacyCDMPrivateMediaPlayer.h; sourceTree = "<group>"; };
    1383613838                CDCA98EA18B2C8EB00C12FF9 /* LegacyCDMPrivateMediaPlayer.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = LegacyCDMPrivateMediaPlayer.cpp; sourceTree = "<group>"; };
     13839                CDCC9BC522387DA300FFB51C /* MediaCapabilitiesDecodingInfo.idl */ = {isa = PBXFileReference; lastKnownFileType = text; path = MediaCapabilitiesDecodingInfo.idl; sourceTree = "<group>"; };
     13840                CDCC9BCA22387E2100FFB51C /* MediaCapabilitiesEncodingInfo.idl */ = {isa = PBXFileReference; lastKnownFileType = text; path = MediaCapabilitiesEncodingInfo.idl; sourceTree = "<group>"; };
     13841                CDCC9BCE22387E9A00FFB51C /* MediaCapabilitiesDecodingInfo.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MediaCapabilitiesDecodingInfo.h; sourceTree = "<group>"; };
     13842                CDCC9BD022387EAA00FFB51C /* MediaCapabilitiesEncodingInfo.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MediaCapabilitiesEncodingInfo.h; sourceTree = "<group>"; };
    1383713843                CDCD41E51C3DDB0900965D99 /* ParsedContentRange.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ParsedContentRange.cpp; sourceTree = "<group>"; };
    1383813844                CDCD41E61C3DDB0900965D99 /* ParsedContentRange.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ParsedContentRange.h; sourceTree = "<group>"; };
     
    2232222328                        children = (
    2232322329                                CDBD3D2B1FE85CBB0012C545 /* AudioConfiguration.h */,
     22330                                CDCC9BCE22387E9A00FFB51C /* MediaCapabilitiesDecodingInfo.h */,
     22331                                CDCC9BD022387EAA00FFB51C /* MediaCapabilitiesEncodingInfo.h */,
    2232422332                                CD0C8B582141C8CA0062F59D /* MediaCapabilitiesInfo.h */,
    2232522333                                CDBD3D351FE85CBF0012C545 /* MediaConfiguration.h */,
     
    2602526033                                CDBD3D321FE85CBE0012C545 /* MediaCapabilities.h */,
    2602626034                                CDBD3D2F1FE85CBC0012C545 /* MediaCapabilities.idl */,
     26035                                CDCC9BC522387DA300FFB51C /* MediaCapabilitiesDecodingInfo.idl */,
     26036                                CDCC9BCA22387E2100FFB51C /* MediaCapabilitiesEncodingInfo.idl */,
    2602726037                                CDBD3D331FE85CBE0012C545 /* MediaCapabilitiesInfo.idl */,
    2602826038                                CDBD3D291FE85CB90012C545 /* MediaConfiguration.idl */,
     
    3210932119                                26E944DD1AC4B4EA007B85B5 /* Term.h in Headers */,
    3211032120                                6550B6A6099DF0270090D781 /* Text.h in Headers */,
     32121                                CDCC9BD122387EAA00FFB51C /* MediaCapabilitiesEncodingInfo.h in Headers */,
    3211132122                                93309E17099E64920056E581 /* TextAffinity.h in Headers */,
    3211232123                                CE7B2DB51586ABAD0098B3FA /* TextAlternativeWithRange.h in Headers */,
     
    3220232213                                FB484F4D171F821E00040755 /* TransformFunctions.h in Headers */,
    3220332214                                49E911CE0EF86D47009D0CAF /* TransformOperation.h in Headers */,
     32215                                CDCC9BCF22387E9A00FFB51C /* MediaCapabilitiesDecodingInfo.h in Headers */,
    3220432216                                49E911D00EF86D47009D0CAF /* TransformOperations.h in Headers */,
    3220532217                                5DB1BC6A10715A6400EFAA49 /* TransformSource.h in Headers */,
  • trunk/Source/WebCore/platform/MediaCapabilitiesDecodingInfo.h

    r243013 r243014  
    11/*
    2  * Copyright (C) 2018 Apple Inc. All rights reserved.
     2 * Copyright (C) 2019 Apple Inc. All rights reserved.
    33 *
    44 * Redistribution and use in source and binary forms, with or without
     
    2626#pragma once
    2727
    28 #if PLATFORM(COCOA)
     28#include "MediaCapabilitiesInfo.h"
     29#include "MediaDecodingConfiguration.h"
    2930
    3031namespace WebCore {
    3132
    32 struct MediaCapabilitiesInfo;
    33 struct MediaDecodingConfiguration;
     33struct MediaCapabilitiesDecodingInfo : MediaCapabilitiesInfo {
     34    // FIXME(C++17): remove the following constructors once all compilers support extended
     35    // aggregate initialization:
     36    // <http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2015/p0017r1.html>
     37    MediaCapabilitiesDecodingInfo() = default;
     38    MediaCapabilitiesDecodingInfo(MediaDecodingConfiguration&& supportedConfiguration)
     39        : MediaCapabilitiesDecodingInfo({ }, WTFMove(supportedConfiguration))
     40    {
     41    }
     42    MediaCapabilitiesDecodingInfo(MediaCapabilitiesInfo&& info, MediaDecodingConfiguration&& supportedConfiguration)
     43        : MediaCapabilitiesInfo(WTFMove(info))
     44        , supportedConfiguration(WTFMove(supportedConfiguration))
     45    {
     46    }
    3447
    35 extern void createMediaPlayerDecodingConfigurationCocoa(MediaDecodingConfiguration&, WTF::Function<void(MediaCapabilitiesInfo&&)>&&);
     48    MediaDecodingConfiguration supportedConfiguration;
     49};
    3650
    3751}
    38 
    39 #endif
  • trunk/Source/WebCore/platform/MediaCapabilitiesEncodingInfo.h

    r243013 r243014  
    11/*
    2  * Copyright (C) 2018 Apple Inc. All rights reserved.
     2 * Copyright (C) 2019 Apple Inc. All rights reserved.
    33 *
    44 * Redistribution and use in source and binary forms, with or without
     
    2626#pragma once
    2727
    28 #if PLATFORM(COCOA)
     28#include "MediaCapabilitiesInfo.h"
     29#include "MediaEncodingConfiguration.h"
    2930
    3031namespace WebCore {
    3132
    32 struct MediaCapabilitiesInfo;
    33 struct MediaDecodingConfiguration;
     33struct MediaCapabilitiesEncodingInfo : MediaCapabilitiesInfo {
     34    // FIXME(C++17): remove the following constructors once all compilers support extended
     35    // aggregate initialization:
     36    // <http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2015/p0017r1.html>
     37    MediaCapabilitiesEncodingInfo() = default;
     38    MediaCapabilitiesEncodingInfo(MediaEncodingConfiguration&& supportedConfiguration)
     39        : MediaCapabilitiesEncodingInfo({ }, WTFMove(supportedConfiguration))
     40    {
     41    }
     42    MediaCapabilitiesEncodingInfo(MediaCapabilitiesInfo&& info, MediaEncodingConfiguration&& supportedConfiguration)
     43        : MediaCapabilitiesInfo(WTFMove(info))
     44        , supportedConfiguration(WTFMove(supportedConfiguration))
     45    {
     46    }
    3447
    35 extern void createMediaPlayerDecodingConfigurationCocoa(MediaDecodingConfiguration&, WTF::Function<void(MediaCapabilitiesInfo&&)>&&);
     48    MediaEncodingConfiguration supportedConfiguration;
     49};
    3650
    3751}
    38 
    39 #endif
  • trunk/Source/WebCore/platform/graphics/cocoa/MediaEngineConfigurationFactoryCocoa.cpp

    r236094 r243014  
    3030
    3131#include "HEVCUtilitiesCocoa.h"
    32 #include "MediaCapabilitiesInfo.h"
     32#include "MediaCapabilitiesDecodingInfo.h"
    3333#include "MediaDecodingConfiguration.h"
    3434#include "MediaPlayer.h"
     
    4949}
    5050
    51 void createMediaPlayerDecodingConfigurationCocoa(MediaDecodingConfiguration& configuration, WTF::Function<void(MediaCapabilitiesInfo&&)>&& callback)
     51void createMediaPlayerDecodingConfigurationCocoa(MediaDecodingConfiguration&& configuration, WTF::Function<void(MediaCapabilitiesDecodingInfo&&)>&& callback)
    5252{
    53     MediaCapabilitiesInfo info;
     53    MediaCapabilitiesDecodingInfo info;
     54
    5455    if (configuration.video) {
    5556        auto& videoConfiguration = configuration.video.value();
     
    5859        parameters.isMediaSource = configuration.type == MediaDecodingType::MediaSource;
    5960        if (MediaPlayer::supportsType(parameters) != MediaPlayer::IsSupported) {
    60             callback({ });
     61            callback({{ }, WTFMove(configuration)});
    6162            return;
    6263        }
    63         info.supported = true;
    6464
    6565        auto codecs = parameters.type.codecs();
    6666        if (codecs.size() != 1) {
    67             callback({ });
     67            callback({{ }, WTFMove(configuration)});
    6868            return;
    6969        }
     
    7373        auto videoCodecType = videoCodecTypeFromRFC4281Type(codec);
    7474        if (!videoCodecType) {
    75             callback({ });
     75            callback({{ }, WTFMove(configuration)});
    7676            return;
    7777        }
     
    8080            auto parameters = parseHEVCCodecParameters(codec);
    8181            if (!parameters || !validateHEVCParameters(parameters.value(), info)) {
    82                 callback({ });
     82                callback({{ }, WTFMove(configuration)});
    8383                return;
    8484            }
    85         } else if (canLoad_VideoToolbox_VTIsHardwareDecodeSupported())
     85        } else if (canLoad_VideoToolbox_VTIsHardwareDecodeSupported()) {
    8686            info.powerEfficient = VTIsHardwareDecodeSupported(videoCodecType);
     87            info.smooth = true;
     88        }
    8789    }
    8890
     
    9294        parameters.isMediaSource = configuration.type == MediaDecodingType::MediaSource;
    9395        if (MediaPlayer::supportsType(parameters) != MediaPlayer::IsSupported) {
    94             callback({ });
     96            callback({{ }, WTFMove(configuration)});
    9597            return;
    9698        }
    9799        info.supported = true;
    98100    }
     101
     102    info.supportedConfiguration = WTFMove(configuration);
    99103
    100104    callback(WTFMove(info));
  • trunk/Source/WebCore/platform/graphics/cocoa/MediaEngineConfigurationFactoryCocoa.h

    r236094 r243014  
    3030namespace WebCore {
    3131
    32 struct MediaCapabilitiesInfo;
     32struct MediaCapabilitiesDecodingInfo;
    3333struct MediaDecodingConfiguration;
    3434
    35 extern void createMediaPlayerDecodingConfigurationCocoa(MediaDecodingConfiguration&, WTF::Function<void(MediaCapabilitiesInfo&&)>&&);
     35extern void createMediaPlayerDecodingConfigurationCocoa(MediaDecodingConfiguration&&, WTF::Function<void(MediaCapabilitiesDecodingInfo&&)>&&);
    3636
    3737}
  • trunk/Source/WebCore/platform/graphics/gstreamer/MediaEngineConfigurationFactoryGStreamer.cpp

    r241585 r243014  
    3232
    3333#include "GStreamerRegistryScanner.h"
    34 #include "MediaCapabilitiesInfo.h"
     34#include "MediaCapabilitiesDecodingInfo.h"
    3535#include "MediaDecodingConfiguration.h"
    3636#include "MediaPlayer.h"
     
    4343namespace WebCore {
    4444
    45 void createMediaPlayerDecodingConfigurationGStreamer(MediaDecodingConfiguration& configuration, WTF::Function<void(MediaCapabilitiesInfo&&)>&& callback)
     45void createMediaPlayerDecodingConfigurationGStreamer(MediaDecodingConfiguration&& configuration, WTF::Function<void(MediaCapabilitiesDecodingInfo&&)>&& callback)
    4646{
    4747    bool isMediaSource = configuration.type == MediaDecodingType::MediaSource;
     
    5050#else
    5151    if (isMediaSource) {
    52         callback({ });
     52        callback({{ }, WTFMove(configuration)});
    5353        return;
    5454    }
     
    5656#endif
    5757    auto lookupResult = scanner.isDecodingSupported(configuration);
    58     MediaCapabilitiesInfo info;
     58    MediaCapabilitiesDecodingInfo info;
    5959    info.supported = lookupResult.isSupported;
    6060    info.powerEfficient = lookupResult.isUsingHardware;
     61    info.supportedConfiguration = WTFMove(configuration);
    6162
    6263    callback(WTFMove(info));
  • trunk/Source/WebCore/platform/graphics/gstreamer/MediaEngineConfigurationFactoryGStreamer.h

    r241585 r243014  
    3434namespace WebCore {
    3535
    36 struct MediaCapabilitiesInfo;
     36struct MediaCapabilitiesDecodingInfo;
    3737struct MediaDecodingConfiguration;
    3838
    39 extern void createMediaPlayerDecodingConfigurationGStreamer(MediaDecodingConfiguration&, WTF::Function<void(MediaCapabilitiesInfo&&)>&&);
     39extern void createMediaPlayerDecodingConfigurationGStreamer(MediaDecodingConfiguration&&, WTF::Function<void(MediaCapabilitiesDecodingInfo&&)>&&);
    4040
    4141}
  • trunk/Source/WebCore/platform/mediacapabilities/MediaEngineConfigurationFactory.cpp

    r241585 r243014  
    2929#include "MediaEngineConfigurationFactory.h"
    3030
    31 #include "MediaCapabilitiesInfo.h"
     31#include "MediaCapabilitiesDecodingInfo.h"
     32#include "MediaCapabilitiesEncodingInfo.h"
    3233#include "MediaDecodingConfiguration.h"
    3334#include "MediaEncodingConfiguration.h"
     
    5354
    5455struct MediaEngineFactory {
    55     void(*createDecodingConfiguration)(MediaDecodingConfiguration&, MediaEngineConfigurationFactory::DecodingConfigurationCallback&&);
    56     void(*createEncodingConfiguration)(MediaEncodingConfiguration&, MediaEngineConfigurationFactory::EncodingConfigurationCallback&&);
     56    void(*createDecodingConfiguration)(MediaDecodingConfiguration&&, MediaEngineConfigurationFactory::DecodingConfigurationCallback&&);
     57    void(*createEncodingConfiguration)(MediaEncodingConfiguration&&, MediaEngineConfigurationFactory::EncodingConfigurationCallback&&);
    5758};
    5859
     
    7475{
    7576    if (mockEnabled()) {
    76         MediaEngineConfigurationFactoryMock::createDecodingConfiguration(config, WTFMove(callback));
     77        MediaEngineConfigurationFactoryMock::createDecodingConfiguration(WTFMove(config), WTFMove(callback));
    7778        return;
    7879    }
    7980
    80     auto factoryCallback = [] (auto factoryCallback, auto nextFactory, auto config, auto&& callback) mutable {
     81    auto factoryCallback = [] (auto factoryCallback, auto nextFactory, auto&& config, auto&& callback) mutable {
    8182        if (nextFactory == factories().end()) {
    8283            callback({ });
     
    9091        }
    9192
    92         factory.createDecodingConfiguration(config, [factoryCallback, nextFactory, config, callback = WTFMove(callback)] (auto&& info) mutable {
     93        factory.createDecodingConfiguration(WTFMove(config), [factoryCallback, nextFactory, config, callback = WTFMove(callback)] (auto&& info) mutable {
    9394            if (info.supported) {
    9495                callback(WTFMove(info));
     
    9697            }
    9798
    98             factoryCallback(factoryCallback, ++nextFactory, config, WTFMove(callback));
     99            factoryCallback(factoryCallback, ++nextFactory, WTFMove(info.supportedConfiguration), WTFMove(callback));
    99100        });
    100101    };
     
    105106{
    106107    if (mockEnabled()) {
    107         MediaEngineConfigurationFactoryMock::createEncodingConfiguration(config, WTFMove(callback));
     108        MediaEngineConfigurationFactoryMock::createEncodingConfiguration(WTFMove(config), WTFMove(callback));
    108109        return;
    109110    }
    110111
    111     auto factoryCallback = [] (auto factoryCallback, auto nextFactory, auto config, auto&& callback) mutable {
     112    auto factoryCallback = [] (auto factoryCallback, auto nextFactory, auto&& config, auto&& callback) mutable {
    112113        if (nextFactory == factories().end()) {
    113114            callback({ });
     
    121122        }
    122123
    123         factory.createEncodingConfiguration(config, [factoryCallback, nextFactory, config, callback = WTFMove(callback)] (auto&& info) mutable {
     124        factory.createEncodingConfiguration(WTFMove(config), [factoryCallback, nextFactory, callback = WTFMove(callback)] (auto&& info) mutable {
    124125            if (info.supported) {
    125126                callback(WTFMove(info));
     
    127128            }
    128129
    129             factoryCallback(factoryCallback, ++nextFactory, config, WTFMove(callback));
     130            factoryCallback(factoryCallback, ++nextFactory, WTFMove(info.supportedConfiguration), WTFMove(callback));
    130131        });
    131132    };
    132     factoryCallback(factoryCallback, factories().begin(), config, WTFMove(callback));
     133    factoryCallback(factoryCallback, factories().begin(), WTFMove(config), WTFMove(callback));
    133134}
    134135
  • trunk/Source/WebCore/platform/mediacapabilities/MediaEngineConfigurationFactory.h

    r235919 r243014  
    3232namespace WebCore {
    3333
    34 struct MediaCapabilitiesInfo;
     34struct MediaCapabilitiesDecodingInfo;
     35struct MediaCapabilitiesEncodingInfo;
    3536struct MediaDecodingConfiguration;
    3637struct MediaEncodingConfiguration;
     
    3839class MediaEngineConfigurationFactory {
    3940public:
    40     using DecodingConfigurationCallback = WTF::Function<void(MediaCapabilitiesInfo&&)>;
    41     using EncodingConfigurationCallback = WTF::Function<void(MediaCapabilitiesInfo&&)>;
     41    using DecodingConfigurationCallback = WTF::Function<void(MediaCapabilitiesDecodingInfo&&)>;
     42    using EncodingConfigurationCallback = WTF::Function<void(MediaCapabilitiesEncodingInfo&&)>;
    4243
    4344    static void createDecodingConfiguration(MediaDecodingConfiguration&&, DecodingConfigurationCallback&&);
  • trunk/Source/WebCore/platform/mock/MediaEngineConfigurationFactoryMock.cpp

    r235919 r243014  
    3030
    3131#include "ContentType.h"
    32 #include "MediaCapabilitiesInfo.h"
     32#include "MediaCapabilitiesDecodingInfo.h"
     33#include "MediaCapabilitiesEncodingInfo.h"
    3334#include "MediaDecodingConfiguration.h"
    3435#include "MediaEncodingConfiguration.h"
     
    126127}
    127128
    128 void MediaEngineConfigurationFactoryMock::createDecodingConfiguration(MediaDecodingConfiguration& configuration, DecodingConfigurationCallback&& callback)
     129void MediaEngineConfigurationFactoryMock::createDecodingConfiguration(MediaDecodingConfiguration&& configuration, DecodingConfigurationCallback&& callback)
    129130{
    130131    if (!canDecodeMedia(configuration)) {
    131         callback({ });
     132        MediaCapabilitiesDecodingInfo info { WTFMove(configuration) };
     133        callback(WTFMove(info));
    132134        return;
    133135    }
    134     callback({ true, canSmoothlyDecodeMedia(configuration), canPowerEfficientlyDecodeMedia(configuration) });
     136    callback({{ true, canSmoothlyDecodeMedia(configuration), canPowerEfficientlyDecodeMedia(configuration) }, WTFMove(configuration)});
    135137}
    136138
    137 void MediaEngineConfigurationFactoryMock::createEncodingConfiguration(MediaEncodingConfiguration& configuration, EncodingConfigurationCallback&& callback)
     139void MediaEngineConfigurationFactoryMock::createEncodingConfiguration(MediaEncodingConfiguration&& configuration, EncodingConfigurationCallback&& callback)
    138140{
    139141    if (!canEncodeMedia(configuration)) {
    140         callback({ });
     142        callback({{ }, WTFMove(configuration) });
    141143        return;
    142144    }
    143     callback({ true, canSmoothlyEncodeMedia(configuration), canPowerEfficientlyEncodeMedia(configuration) });
     145    callback({{ true, canSmoothlyEncodeMedia(configuration), canPowerEfficientlyEncodeMedia(configuration) }, WTFMove(configuration)});
    144146}
    145147
  • trunk/Source/WebCore/platform/mock/MediaEngineConfigurationFactoryMock.h

    r235919 r243014  
    3232namespace WebCore {
    3333
    34 struct MediaCapabilitiesInfo;
     34struct MediaCapabilitiesDecodingInfo;
     35struct MediaCapabilitiesEncodingInfo;
    3536struct MediaDecodingConfiguration;
    3637struct MediaEncodingConfiguration;
    3738
    3839struct MediaEngineConfigurationFactoryMock {
    39     using DecodingConfigurationCallback = WTF::Function<void(MediaCapabilitiesInfo&&)>;
    40     using EncodingConfigurationCallback = WTF::Function<void(MediaCapabilitiesInfo&&)>;
     40    using DecodingConfigurationCallback = WTF::Function<void(MediaCapabilitiesDecodingInfo&&)>;
     41    using EncodingConfigurationCallback = WTF::Function<void(MediaCapabilitiesEncodingInfo&&)>;
    4142
    42     static void createDecodingConfiguration(MediaDecodingConfiguration&, DecodingConfigurationCallback&&);
    43     static void createEncodingConfiguration(MediaEncodingConfiguration&, EncodingConfigurationCallback&&);
     43    static void createDecodingConfiguration(MediaDecodingConfiguration&&, DecodingConfigurationCallback&&);
     44    static void createEncodingConfiguration(MediaEncodingConfiguration&&, EncodingConfigurationCallback&&);
    4445};
    4546
Note: See TracChangeset for help on using the changeset viewer.