Changeset 243109 in webkit
- Timestamp:
- Mar 18, 2019 3:29:55 PM (5 years ago)
- Location:
- trunk
- Files:
-
- 2 added
- 14 edited
- 1 moved
Legend:
- Unmodified
- Added
- Removed
-
trunk/LayoutTests/ChangeLog
r243105 r243109 1 2019-03-18 Jer Noble <jer.noble@apple.com> 2 3 Add experimental "alphaChannel" property to VideoConfiguration 4 https://bugs.webkit.org/show_bug.cgi?id=195853 5 6 Reviewed by Eric Carlson. 7 8 * media/mediacapabilities/mock-decodingInfo-alphaChannel-expected.txt: Added. 9 * media/mediacapabilities/mock-decodingInfo-alphaChannel.html: Added. 10 1 11 2019-03-18 Myles C. Maxfield <mmaxfield@apple.com> 2 12 -
trunk/Source/WebCore/ChangeLog
r243106 r243109 1 2019-03-18 Jer Noble <jer.noble@apple.com> 2 3 Add experimental "alphaChannel" property to VideoConfiguration 4 https://bugs.webkit.org/show_bug.cgi?id=195853 5 6 Reviewed by Eric Carlson. 7 8 Test: media/mediacapabilities/mock-decodingInfo-alphaChannel.html 9 10 Add a new, experimental addition to Media Capabilities to allow pages to query for 11 alpha channel support. 12 13 * Modules/mediacapabilities/MediaCapabilities.cpp: 14 (WebCore::MediaCapabilities::decodingInfo): 15 * Modules/mediacapabilities/MediaCapabilities.h: 16 * Modules/mediacapabilities/MediaCapabilities.idl: 17 * Modules/mediacapabilities/VideoConfiguration.idl: 18 * SourcesCocoa.txt: 19 * WebCore.xcodeproj/project.pbxproj: 20 * platform/cocoa/VideoToolboxSoftLink.cpp: 21 * platform/cocoa/VideoToolboxSoftLink.h: 22 * platform/graphics/cocoa/HEVCUtilitiesCocoa.h: 23 * platform/graphics/cocoa/HEVCUtilitiesCocoa.mm: Renamed from Source/WebCore/platform/graphics/cocoa/HEVCUtilitiesCocoa.cpp. 24 (WebCore::validateHEVCParameters): 25 * platform/graphics/cocoa/MediaEngineConfigurationFactoryCocoa.cpp: 26 (WebCore::createMediaPlayerDecodingConfigurationCocoa): 27 * platform/mediacapabilities/VideoConfiguration.h: 28 * platform/mock/MediaEngineConfigurationFactoryMock.cpp: 29 (WebCore::canDecodeMedia): 30 (WebCore::canEncodeMedia): 31 1 32 2019-03-18 Ryosuke Niwa <rniwa@webkit.org> 2 33 -
trunk/Source/WebCore/Modules/mediacapabilities/MediaCapabilities.cpp
r243014 r243109 28 28 29 29 #include "ContentType.h" 30 #include "Document.h" 30 31 #include "JSMediaCapabilitiesDecodingInfo.h" 31 32 #include "JSMediaCapabilitiesEncodingInfo.h" … … 35 36 #include "MediaEncodingConfiguration.h" 36 37 #include "MediaEngineConfigurationFactory.h" 38 #include "Settings.h" 37 39 #include <wtf/HashSet.h> 38 40 … … 160 162 } 161 163 162 void MediaCapabilities::decodingInfo( MediaDecodingConfiguration&& configuration, Ref<DeferredPromise>&& promise)164 void MediaCapabilities::decodingInfo(Document& document, MediaDecodingConfiguration&& configuration, Ref<DeferredPromise>&& promise) 163 165 { 164 166 // 2.4 Media Capabilities Interface … … 172 174 return; 173 175 } 176 177 if (!document.settings().mediaCapabilitiesExtensionsEnabled() && configuration.video) 178 configuration.video.value().alphaChannel.reset(); 174 179 175 180 // 4. Let p be a new promise. -
trunk/Source/WebCore/Modules/mediacapabilities/MediaCapabilities.h
r226228 r243109 32 32 namespace WebCore { 33 33 34 class Document; 34 35 struct MediaDecodingConfiguration; 35 36 struct MediaEncodingConfiguration; … … 37 38 class MediaCapabilities : public RefCounted<MediaCapabilities> { 38 39 public: 39 void decodingInfo( MediaDecodingConfiguration&&, Ref<DeferredPromise>&&);40 void decodingInfo(Document&, MediaDecodingConfiguration&&, Ref<DeferredPromise>&&); 40 41 void encodingInfo(MediaEncodingConfiguration&&, Ref<DeferredPromise>&&); 41 42 -
trunk/Source/WebCore/Modules/mediacapabilities/MediaCapabilities.idl
r243014 r243109 29 29 ] 30 30 interface MediaCapabilities { 31 Promise<MediaCapabilitiesDecodingInfo> decodingInfo(MediaDecodingConfiguration configuration);31 [CallWith=Document] Promise<MediaCapabilitiesDecodingInfo> decodingInfo(MediaDecodingConfiguration configuration); 32 32 Promise<MediaCapabilitiesEncodingInfo> encodingInfo(MediaEncodingConfiguration configuration); 33 33 }; -
trunk/Source/WebCore/Modules/mediacapabilities/VideoConfiguration.idl
r243014 r243109 34 34 required unsigned long long bitrate; 35 35 required double framerate; 36 [EnabledBySetting=MediaCapabilitiesExtensions] boolean alphaChannel; 36 37 }; -
trunk/Source/WebCore/SourcesCocoa.txt
r242913 r243109 301 301 platform/graphics/cocoa/FontFamilySpecificationCoreText.cpp 302 302 platform/graphics/cocoa/FontPlatformDataCocoa.mm 303 platform/graphics/cocoa/HEVCUtilitiesCocoa. cpp303 platform/graphics/cocoa/HEVCUtilitiesCocoa.mm 304 304 platform/graphics/cocoa/IOSurface.mm 305 305 platform/graphics/cocoa/IOSurfacePoolCocoa.mm -
trunk/Source/WebCore/WebCore.xcodeproj/project.pbxproj
r243091 r243109 13779 13779 CDA595922146DEC300A84185 /* HEVCUtilities.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = HEVCUtilities.cpp; sourceTree = "<group>"; }; 13780 13780 CDA595962146DF7800A84185 /* HEVCUtilitiesCocoa.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = HEVCUtilitiesCocoa.h; sourceTree = "<group>"; }; 13781 CDA595972146DF7800A84185 /* HEVCUtilitiesCocoa. cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = HEVCUtilitiesCocoa.cpp; sourceTree = "<group>"; };13781 CDA595972146DF7800A84185 /* HEVCUtilitiesCocoa.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; path = HEVCUtilitiesCocoa.mm; sourceTree = "<group>"; }; 13782 13782 CDA79821170A22DC00D45C55 /* AudioSession.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = AudioSession.h; sourceTree = "<group>"; }; 13783 13783 CDA79823170A258300D45C55 /* AudioSession.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = AudioSession.cpp; sourceTree = "<group>"; }; … … 25040 25040 49FFBF1C11C8550E006A7118 /* GraphicsContext3DCocoa.mm */, 25041 25041 B277B4030B22F37C0004BEC6 /* GraphicsContextCocoa.mm */, 25042 CDA595972146DF7800A84185 /* HEVCUtilitiesCocoa.cpp */,25043 25042 CDA595962146DF7800A84185 /* HEVCUtilitiesCocoa.h */, 25043 CDA595972146DF7800A84185 /* HEVCUtilitiesCocoa.mm */, 25044 25044 2D0B4AA918DA1CCD00434DE1 /* IOSurface.h */, 25045 25045 2D0B4AAA18DA1CCD00434DE1 /* IOSurface.mm */, … … 30864 30864 5CBC8DAD1AAA302200E1C803 /* MediaAccessibilitySoftLink.h in Headers */, 30865 30865 931BCC611124DFCB00BE70DD /* MediaCanStartListener.h in Headers */, 30866 CDCC9BCF22387E9A00FFB51C /* MediaCapabilitiesDecodingInfo.h in Headers */, 30867 CDCC9BD122387EAA00FFB51C /* MediaCapabilitiesEncodingInfo.h in Headers */, 30866 30868 078E093A17D16E1C00420AA1 /* MediaConstraints.h in Headers */, 30867 30869 417253AB1354BBBC00360F2A /* MediaControlElements.h in Headers */, … … 32167 32169 26E944DD1AC4B4EA007B85B5 /* Term.h in Headers */, 32168 32170 6550B6A6099DF0270090D781 /* Text.h in Headers */, 32169 CDCC9BD122387EAA00FFB51C /* MediaCapabilitiesEncodingInfo.h in Headers */,32170 32171 93309E17099E64920056E581 /* TextAffinity.h in Headers */, 32171 32172 CE7B2DB51586ABAD0098B3FA /* TextAlternativeWithRange.h in Headers */, … … 32261 32262 FB484F4D171F821E00040755 /* TransformFunctions.h in Headers */, 32262 32263 49E911CE0EF86D47009D0CAF /* TransformOperation.h in Headers */, 32263 CDCC9BCF22387E9A00FFB51C /* MediaCapabilitiesDecodingInfo.h in Headers */,32264 32264 49E911D00EF86D47009D0CAF /* TransformOperations.h in Headers */, 32265 32265 5DB1BC6A10715A6400EFAA49 /* TransformSource.h in Headers */, -
trunk/Source/WebCore/platform/cocoa/VideoToolboxSoftLink.cpp
r240235 r243109 31 31 #include <wtf/SoftLinking.h> 32 32 33 typedef struct OpaqueVTVideoDecoder VTVideoDecoderRef; 33 34 typedef struct OpaqueVTImageRotationSession* VTImageRotationSessionRef; 34 35 typedef struct OpaqueVTPixelBufferConformer* VTPixelBufferConformerRef; … … 51 52 SOFT_LINK_FUNCTION_MAY_FAIL_FOR_SOURCE(WebCore, VideoToolbox, VTCopyHEVCDecoderCapabilitiesDictionary, CFDictionaryRef, (), ()) 52 53 SOFT_LINK_FUNCTION_MAY_FAIL_FOR_SOURCE(WebCore, VideoToolbox, VTGetHEVCCapabilitesForFormatDescription, OSStatus, (CMVideoFormatDescriptionRef formatDescription, CFDictionaryRef decoderCapabilitiesDict, Boolean* isDecodable, Boolean* mayBePlayable), (formatDescription, decoderCapabilitiesDict, isDecodable, mayBePlayable)) 54 SOFT_LINK_FUNCTION_FOR_SOURCE(WebCore, VideoToolbox, VTSelectAndCreateVideoDecoderInstance, OSStatus, (CMVideoCodecType codecType, CFAllocatorRef allocator, CFDictionaryRef videoDecoderSpecification, VTVideoDecoderRef *decoderInstanceOut), (codecType, allocator, videoDecoderSpecification, decoderInstanceOut)) 53 55 SOFT_LINK_CONSTANT_FOR_SOURCE(WebCore, VideoToolbox, kVTVideoDecoderSpecification_EnableHardwareAcceleratedVideoDecoder, CFStringRef) 54 56 SOFT_LINK_CONSTANT_FOR_SOURCE(WebCore, VideoToolbox, kVTDecompressionPropertyKey_PixelBufferPool, CFStringRef) -
trunk/Source/WebCore/platform/cocoa/VideoToolboxSoftLink.h
r240235 r243109 31 31 #include <wtf/SoftLinking.h> 32 32 33 typedef struct OpaqueVTVideoDecoder VTVideoDecoderRef; 33 34 typedef struct OpaqueVTImageRotationSession* VTImageRotationSessionRef; 34 35 typedef struct OpaqueVTPixelBufferConformer* VTPixelBufferConformerRef; … … 65 66 SOFT_LINK_FUNCTION_MAY_FAIL_FOR_HEADER(WebCore, VideoToolbox, VTGetHEVCCapabilitesForFormatDescription, OSStatus, (CMVideoFormatDescriptionRef formatDescription, CFDictionaryRef decoderCapabilitiesDict, Boolean* isDecodable, Boolean* mayBePlayable), (formatDescription, decoderCapabilitiesDict, isDecodable, mayBePlayable)) 66 67 #define VTGetHEVCCapabilitesForFormatDescription softLink_VideoToolbox_VTGetHEVCCapabilitesForFormatDescription 68 SOFT_LINK_FUNCTION_FOR_HEADER(WebCore, VideoToolbox, VTSelectAndCreateVideoDecoderInstance, OSStatus, (CMVideoCodecType codecType, CFAllocatorRef allocator, CFDictionaryRef videoDecoderSpecification, VTVideoDecoderRef *decoderInstanceOut), (codecType, allocator, videoDecoderSpecification, decoderInstanceOut)) 69 #define VTSelectAndCreateVideoDecoderInstance softLink_VideoToolbox_VTSelectAndCreateVideoDecoderInstance 67 70 SOFT_LINK_CONSTANT_FOR_HEADER(WebCore, VideoToolbox, kVTVideoDecoderSpecification_EnableHardwareAcceleratedVideoDecoder, CFStringRef) 68 71 #define kVTVideoDecoderSpecification_EnableHardwareAcceleratedVideoDecoder get_VideoToolbox_kVTVideoDecoderSpecification_EnableHardwareAcceleratedVideoDecoder() -
trunk/Source/WebCore/platform/graphics/cocoa/HEVCUtilitiesCocoa.h
r236094 r243109 34 34 struct MediaCapabilitiesInfo; 35 35 36 extern bool validateHEVCParameters(HEVCParameterSet&, MediaCapabilitiesInfo& );36 extern bool validateHEVCParameters(HEVCParameterSet&, MediaCapabilitiesInfo&, bool hasAlphaChannel); 37 37 38 38 } -
trunk/Source/WebCore/platform/graphics/cocoa/HEVCUtilitiesCocoa.mm
r243106 r243109 29 29 #if PLATFORM(COCOA) 30 30 31 #include "FourCC.h" 31 32 #include "HEVCUtilities.h" 32 33 #include "MediaCapabilitiesInfo.h" … … 34 35 #include "VideoToolboxSoftLink.h" 35 36 37 SOFT_LINK_FRAMEWORK_OPTIONAL(AVFoundation) 38 SOFT_LINK_CONSTANT_MAY_FAIL(AVFoundation, AVVideoCodecTypeHEVCWithAlpha, NSString *) 39 36 40 namespace WebCore { 37 41 38 bool validateHEVCParameters(HEVCParameterSet& parameters, MediaCapabilitiesInfo& info )42 bool validateHEVCParameters(HEVCParameterSet& parameters, MediaCapabilitiesInfo& info, bool hasAlphaChannel) 39 43 { 44 CMVideoCodecType codec = kCMVideoCodecType_HEVC; 45 if (hasAlphaChannel) { 46 if (!AVFoundationLibrary() || !canLoadAVVideoCodecTypeHEVCWithAlpha()) 47 return false; 48 49 auto codecCode = FourCC::fromString(getAVVideoCodecTypeHEVCWithAlpha()); 50 if (!codecCode) 51 return false; 52 53 codec = codecCode.value().value; 54 } 55 OSStatus status = VTSelectAndCreateVideoDecoderInstance(codec, kCFAllocatorDefault, nullptr, nullptr); 56 if (status != noErr) 57 return false; 58 40 59 if (!canLoad_VideoToolbox_VTCopyHEVCDecoderCapabilitiesDictionary() 41 60 || !canLoad_VideoToolbox_kVTHEVCDecoderCapability_SupportedProfiles() -
trunk/Source/WebCore/platform/graphics/cocoa/MediaEngineConfigurationFactoryCocoa.cpp
r243014 r243109 77 77 } 78 78 79 bool alphaChannel = videoConfiguration.alphaChannel && videoConfiguration.alphaChannel.value(); 80 79 81 if (videoCodecType == kCMVideoCodecType_HEVC) { 80 82 auto parameters = parseHEVCCodecParameters(codec); 81 if (!parameters || !validateHEVCParameters(parameters.value(), info )) {83 if (!parameters || !validateHEVCParameters(parameters.value(), info, alphaChannel)) { 82 84 callback({{ }, WTFMove(configuration)}); 83 85 return; 84 86 } 85 } else if (canLoad_VideoToolbox_VTIsHardwareDecodeSupported()) { 86 info.powerEfficient = VTIsHardwareDecodeSupported(videoCodecType); 87 info.smooth = true; 87 } else { 88 if (alphaChannel) { 89 callback({{ }, WTFMove(configuration)}); 90 return; 91 } 92 93 if (canLoad_VideoToolbox_VTIsHardwareDecodeSupported()) { 94 info.powerEfficient = VTIsHardwareDecodeSupported(videoCodecType); 95 info.smooth = true; 96 } 88 97 } 89 98 } -
trunk/Source/WebCore/platform/mediacapabilities/VideoConfiguration.h
r235919 r243109 26 26 #pragma once 27 27 28 #include <wtf/Optional.h> 28 29 #include <wtf/text/WTFString.h> 29 30 … … 36 37 uint64_t bitrate; 37 38 double framerate; 39 Optional<bool> alphaChannel; 38 40 }; 39 41 -
trunk/Source/WebCore/platform/mock/MediaEngineConfigurationFactoryMock.cpp
r243014 r243109 48 48 return false; 49 49 50 // Only the "mock-with-alpha" codec supports alphaChannel 51 if (videoConfig && videoConfig->alphaChannel && videoConfig->alphaChannel.value()) { 52 if (ContentType(videoConfig->contentType).codecsParameter() != "mock-with-alpha") 53 return false; 54 } 55 50 56 // Audio decoding support limited to audio/mp4. 51 57 auto audioConfig = configuration.audio; … … 92 98 if (videoConfig && videoConfig->width > 1280 && videoConfig->height > 720) 93 99 return false; 100 101 // Only the "mock-with-alpha" codec supports alphaChannel 102 if (videoConfig && videoConfig->alphaChannel && videoConfig->alphaChannel.value()) { 103 if (ContentType(videoConfig->contentType).codecsParameter() != "mock-with-alpha") 104 return false; 105 } 94 106 95 107 // Audio encoding support limited to audio/mp4.
Note: See TracChangeset
for help on using the changeset viewer.