Changeset 213598 in webkit
- Timestamp:
- Mar 8, 2017 2:44:42 PM (7 years ago)
- Location:
- trunk
- Files:
-
- 30 added
- 22 edited
- 1 copied
Legend:
- Unmodified
- Added
- Removed
-
trunk/LayoutTests/ChangeLog
r213595 r213598 1 2017-03-08 Youenn Fablet <youenn@apple.com> 2 3 Support canvas captureStream 4 https://bugs.webkit.org/show_bug.cgi?id=169192 5 6 Reviewed by Dean Jackson. 7 8 * fast/mediacapturefromelement/CanvasCaptureMediaStream-2d-events-expected.txt: Added. 9 * fast/mediacapturefromelement/CanvasCaptureMediaStream-2d-events.html: Added. 10 * fast/mediacapturefromelement/CanvasCaptureMediaStream-capture-out-of-DOM-element-expected.txt: Added. 11 * fast/mediacapturefromelement/CanvasCaptureMediaStream-capture-out-of-DOM-element.html: Added. 12 * fast/mediacapturefromelement/CanvasCaptureMediaStream-clone-track-expected.txt: Added. 13 * fast/mediacapturefromelement/CanvasCaptureMediaStream-clone-track.html: Added. 14 * fast/mediacapturefromelement/CanvasCaptureMediaStream-creation-expected.txt: Added. 15 * fast/mediacapturefromelement/CanvasCaptureMediaStream-creation.html: Added. 16 * fast/mediacapturefromelement/CanvasCaptureMediaStream-exceptions-expected.txt: Added. 17 * fast/mediacapturefromelement/CanvasCaptureMediaStream-exceptions.html: Added. 18 * fast/mediacapturefromelement/CanvasCaptureMediaStream-framerate-0-expected.txt: Added. 19 * fast/mediacapturefromelement/CanvasCaptureMediaStream-framerate-0.html: Added. 20 * fast/mediacapturefromelement/CanvasCaptureMediaStream-imagebitmaprenderingcontext-expected.txt: Added. 21 * fast/mediacapturefromelement/CanvasCaptureMediaStream-imagebitmaprenderingcontext.html: Added. 22 * fast/mediacapturefromelement/CanvasCaptureMediaStream-offscreencanvas-expected.txt: Added. 23 * fast/mediacapturefromelement/CanvasCaptureMediaStream-offscreencanvas.html: Added. 24 * fast/mediacapturefromelement/CanvasCaptureMediaStream-request-frame-events-expected.txt: Added. 25 * fast/mediacapturefromelement/CanvasCaptureMediaStream-request-frame-events.html: Added. 26 * fast/mediacapturefromelement/CanvasCaptureMediaStream-webgl-events-expected.txt: Added. 27 * fast/mediacapturefromelement/CanvasCaptureMediaStream-webgl-events.html: Added. 28 * fast/mediacapturefromelement/resources/svg-with-image-with-foreignobject.svg: Added. 29 * fast/mediacapturefromelement/resources/webgl-test.js: Added. 30 1 31 2017-03-08 Antoine Quint <graouts@apple.com> 2 32 -
trunk/Source/WebCore/CMakeLists.txt
r213493 r213598 218 218 Modules/mediasource/VideoPlaybackQuality.idl 219 219 220 Modules/mediastream/CanvasCaptureMediaStreamTrack.idl 220 221 Modules/mediastream/DOMURLMediaStream.idl 221 222 Modules/mediastream/DoubleRange.idl … … 911 912 Modules/mediasource/VideoPlaybackQuality.cpp 912 913 914 Modules/mediastream/CanvasCaptureMediaStreamTrack.cpp 913 915 Modules/mediastream/DOMURLMediaStream.cpp 914 916 Modules/mediastream/MediaConstraintsImpl.cpp … … 1167 1169 bindings/js/JSMainThreadExecState.cpp 1168 1170 bindings/js/JSMediaKeySessionCustom.cpp 1171 bindings/js/JSMediaStreamTrackCustom.cpp 1169 1172 bindings/js/JSMessageChannelCustom.cpp 1170 1173 bindings/js/JSMessageEventCustom.cpp -
trunk/Source/WebCore/ChangeLog
r213597 r213598 1 2017-03-08 Youenn Fablet <youenn@apple.com> 2 3 Support canvas captureStream 4 https://bugs.webkit.org/show_bug.cgi?id=169192 5 6 Reviewed by Dean Jackson. 7 8 Tests: fast/mediacapturefromelement/CanvasCaptureMediaStream-2d-events.html 9 fast/mediacapturefromelement/CanvasCaptureMediaStream-capture-out-of-DOM-element.html 10 fast/mediacapturefromelement/CanvasCaptureMediaStream-clone-track.html 11 fast/mediacapturefromelement/CanvasCaptureMediaStream-creation.html 12 fast/mediacapturefromelement/CanvasCaptureMediaStream-exceptions.html 13 fast/mediacapturefromelement/CanvasCaptureMediaStream-framerate-0.html 14 fast/mediacapturefromelement/CanvasCaptureMediaStream-imagebitmaprenderingcontext.html 15 fast/mediacapturefromelement/CanvasCaptureMediaStream-offscreencanvas.html 16 fast/mediacapturefromelement/CanvasCaptureMediaStream-request-frame-events.html 17 fast/mediacapturefromelement/CanvasCaptureMediaStream-webgl-events.html 18 19 Adding canvas captureStream as defined in https://w3c.github.io/mediacapture-fromelement/#html-canvas-element-media-capture-extensions 20 This allows creating a video MediaStreamTrack fed by canvas taken frames. 21 Frames are produced when canvas get changed. 22 23 Tests taken from Chromium. 24 25 * CMakeLists.txt: 26 * DerivedSources.make: 27 * Modules/mediastream/CanvasCaptureMediaStreamTrack.cpp: Added. 28 (WebCore::CanvasCaptureMediaStreamTrack::create): 29 (WebCore::CanvasCaptureMediaStreamTrack::CanvasCaptureMediaStreamTrack): 30 (WebCore::CanvasCaptureMediaStreamTrack::Source::create): 31 (WebCore::CanvasCaptureMediaStreamTrack::Source::Source): 32 (WebCore::CanvasCaptureMediaStreamTrack::Source::startProducingData): 33 (WebCore::CanvasCaptureMediaStreamTrack::Source::stopProducingData): 34 (WebCore::CanvasCaptureMediaStreamTrack::Source::requestFrameTimerFired): 35 (WebCore::CanvasCaptureMediaStreamTrack::Source::canvasDestroyed): 36 (WebCore::CanvasCaptureMediaStreamTrack::Source::canvasResized): 37 (WebCore::CanvasCaptureMediaStreamTrack::Source::canvasChanged): 38 (WebCore::CanvasCaptureMediaStreamTrack::Source::captureCanvas): 39 (WebCore::CanvasCaptureMediaStreamTrack::Source::paintCurrentFrameInContext): 40 (WebCore::CanvasCaptureMediaStreamTrack::Source::currentFrameImage): 41 * Modules/mediastream/CanvasCaptureMediaStreamTrack.h: Added. 42 (isType): 43 * Modules/mediastream/CanvasCaptureMediaStreamTrack.idl: Added. 44 * Modules/mediastream/MediaStreamTrack.h: 45 (WebCore::MediaStreamTrack::isCanvas): 46 * Modules/mediastream/MediaStreamTrack.idl: 47 * WebCore.xcodeproj/project.pbxproj: 48 * bindings/js/JSMediaStreamTrackCustom.cpp: 49 (WebCore::toJSNewlyCreated): 50 (WebCore::toJS): 51 * html/HTMLCanvasElement.cpp: 52 (WebCore::HTMLCanvasElement::toMediaSample): 53 (WebCore::HTMLCanvasElement::captureStream): 54 * html/HTMLCanvasElement.h: 55 * html/HTMLCanvasElement.idl: 56 * html/canvas/WebGL2RenderingContext.cpp: 57 (WebCore::WebGL2RenderingContext::clear): 58 * html/canvas/WebGLRenderingContextBase.cpp: 59 (WebCore::WebGLRenderingContextBase::markContextChangedAndNotifyCanvasObserver): 60 (WebCore::WebGLRenderingContextBase::drawArrays): 61 (WebCore::WebGLRenderingContextBase::drawElements): 62 (WebCore::WebGLRenderingContextBase::drawArraysInstanced): 63 (WebCore::WebGLRenderingContextBase::drawElementsInstanced): 64 * html/canvas/WebGLRenderingContextBase.h: 65 * platform/graphics/ImageBuffer.cpp: 66 (WebCore::ImageBuffer::toBGRAData): 67 * platform/graphics/ImageBuffer.h: 68 * platform/graphics/avfoundation/MediaSampleAVFObjC.h: 69 * platform/graphics/avfoundation/objc/MediaSampleAVFObjC.mm: 70 (WebCore::releaseUint8Vector): 71 (WebCore::MediaSampleAVFObjC::createImageSample): 72 * platform/graphics/cg/ImageBufferCG.cpp: 73 * platform/graphics/cg/ImageBufferDataCG.cpp: 74 (WebCore::transferData): 75 (WebCore::ImageBufferData::toBGRAData): 76 * platform/graphics/cg/ImageBufferDataCG.h: 77 1 78 2017-03-07 Anders Carlsson <andersca@apple.com> 2 79 -
trunk/Source/WebCore/DerivedSources.make
r213489 r213598 157 157 $(WebCore)/Modules/mediasource/VideoPlaybackQuality.idl \ 158 158 $(WebCore)/Modules/mediasource/VideoTrackMediaSource.idl \ 159 $(WebCore)/Modules/mediastream/CanvasCaptureMediaStreamTrack.idl \ 159 160 $(WebCore)/Modules/mediastream/DOMURLMediaStream.idl \ 160 161 $(WebCore)/Modules/mediastream/DoubleRange.idl \ -
trunk/Source/WebCore/Modules/mediastream/MediaStreamTrack.h
r209959 r213598 44 44 struct MediaTrackConstraints; 45 45 46 class MediaStreamTrack final: public RefCounted<MediaStreamTrack>, public ActiveDOMObject, public EventTargetWithInlineData, private MediaStreamTrackPrivate::Observer {46 class MediaStreamTrack : public RefCounted<MediaStreamTrack>, public ActiveDOMObject, public EventTargetWithInlineData, private MediaStreamTrackPrivate::Observer { 47 47 public: 48 48 class Observer { … … 54 54 static Ref<MediaStreamTrack> create(ScriptExecutionContext&, Ref<MediaStreamTrackPrivate>&&); 55 55 virtual ~MediaStreamTrack(); 56 57 virtual bool isCanvas() const { return false; } 56 58 57 59 const AtomicString& kind() const; … … 118 120 using RefCounted::deref; 119 121 122 protected: 123 MediaStreamTrack(ScriptExecutionContext&, Ref<MediaStreamTrackPrivate>&&); 124 120 125 private: 121 MediaStreamTrack(ScriptExecutionContext&, Ref<MediaStreamTrackPrivate>&&);122 126 explicit MediaStreamTrack(MediaStreamTrack&); 123 127 … … 136 140 137 141 // MediaStreamTrackPrivate::Observer 138 void trackEnded(MediaStreamTrackPrivate&) override;139 void trackMutedChanged(MediaStreamTrackPrivate&) override;140 void trackSettingsChanged(MediaStreamTrackPrivate&) override;141 void trackEnabledChanged(MediaStreamTrackPrivate&) override;142 void trackEnded(MediaStreamTrackPrivate&) final; 143 void trackMutedChanged(MediaStreamTrackPrivate&) final; 144 void trackSettingsChanged(MediaStreamTrackPrivate&) final; 145 void trackEnabledChanged(MediaStreamTrackPrivate&) final; 142 146 143 147 WeakPtr<MediaStreamTrack> createWeakPtr() { return m_weakPtrFactory.createWeakPtr(); } -
trunk/Source/WebCore/Modules/mediastream/MediaStreamTrack.idl
r209959 r213598 29 29 ActiveDOMObject, 30 30 Conditional=MEDIA_STREAM, 31 CustomToJSObject, 31 32 PrivateIdentifier, 32 33 PublicIdentifier, 33 SkipVTableValidation,34 34 ] interface MediaStreamTrack : EventTarget { 35 35 readonly attribute DOMString kind; -
trunk/Source/WebCore/WebCore.xcodeproj/project.pbxproj
r213567 r213598 114 114 0720B0A014D3323500642955 /* GenericEventQueue.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0720B09E14D3323500642955 /* GenericEventQueue.cpp */; }; 115 115 0720B0A114D3323500642955 /* GenericEventQueue.h in Headers */ = {isa = PBXBuildFile; fileRef = 0720B09F14D3323500642955 /* GenericEventQueue.h */; settings = {ATTRIBUTES = (Private, ); }; }; 116 07277E4C17D018CC0015534E /* JSCanvasCaptureMediaStreamTrack.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 07277E4017D018CC0015534E /* JSCanvasCaptureMediaStreamTrack.cpp */; }; 117 07277E4D17D018CC0015534E /* JSCanvasCaptureMediaStreamTrack.h in Headers */ = {isa = PBXBuildFile; fileRef = 07277E4117D018CC0015534E /* JSCanvasCaptureMediaStreamTrack.h */; }; 116 118 07277E4C17D018CC0015534D /* JSMediaStream.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 07277E4017D018CC0015534D /* JSMediaStream.cpp */; }; 117 119 07277E4D17D018CC0015534D /* JSMediaStream.h in Headers */ = {isa = PBXBuildFile; fileRef = 07277E4117D018CC0015534D /* JSMediaStream.h */; }; … … 1563 1565 4157EBFA1E3AB67900AC9FE9 /* MockLibWebRTCPeerConnection.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4157EBF91E3AB06800AC9FE9 /* MockLibWebRTCPeerConnection.cpp */; }; 1564 1566 4157EBFB1E3AB67F00AC9FE9 /* MockLibWebRTCPeerConnection.h in Headers */ = {isa = PBXBuildFile; fileRef = 4157EBF81E3AB06800AC9FE9 /* MockLibWebRTCPeerConnection.h */; }; 1567 415CDAF41E6B8F87004F11EE /* CanvasCaptureMediaStreamTrack.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 41C7E1051E6A54360027B4DE /* CanvasCaptureMediaStreamTrack.cpp */; }; 1568 415CDAF51E6B8F8B004F11EE /* CanvasCaptureMediaStreamTrack.h in Headers */ = {isa = PBXBuildFile; fileRef = 41C7E1061E6A54360027B4DE /* CanvasCaptureMediaStreamTrack.h */; }; 1569 415CDAF71E6CE0DE004F11EE /* JSMediaStreamTrackCustom.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 415CDAF61E6CE0D3004F11EE /* JSMediaStreamTrackCustom.cpp */; }; 1565 1570 41614A781DA6423B004AD06F /* HTTPHeaderValues.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 41614A761DA64236004AD06F /* HTTPHeaderValues.cpp */; }; 1566 1571 41614A791DA64241004AD06F /* HTTPHeaderValues.h in Headers */ = {isa = PBXBuildFile; fileRef = 41614A771DA64236004AD06F /* HTTPHeaderValues.h */; }; … … 7290 7295 07221BAD17CF0AD400848E51 /* RTCSessionDescriptionRequest.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RTCSessionDescriptionRequest.h; sourceTree = "<group>"; }; 7291 7296 07221BB017CF0AD400848E51 /* RTCVoidRequest.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RTCVoidRequest.h; sourceTree = "<group>"; }; 7297 07277E4017D018CC0015534E /* JSCanvasCaptureMediaStreamTrack.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = JSCanvasCaptureMediaStreamTrack.cpp; sourceTree = "<group>"; }; 7298 07277E4117D018CC0015534E /* JSCanvasCaptureMediaStreamTrack.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = JSCanvasCaptureMediaStreamTrack.h; sourceTree = "<group>"; }; 7292 7299 07277E4017D018CC0015534D /* JSMediaStream.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = JSMediaStream.cpp; sourceTree = "<group>"; }; 7293 7300 07277E4117D018CC0015534D /* JSMediaStream.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = JSMediaStream.h; sourceTree = "<group>"; }; … … 8883 8890 4157EBF81E3AB06800AC9FE9 /* MockLibWebRTCPeerConnection.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MockLibWebRTCPeerConnection.h; sourceTree = "<group>"; }; 8884 8891 4157EBF91E3AB06800AC9FE9 /* MockLibWebRTCPeerConnection.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = MockLibWebRTCPeerConnection.cpp; sourceTree = "<group>"; }; 8892 415CDAF61E6CE0D3004F11EE /* JSMediaStreamTrackCustom.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = JSMediaStreamTrackCustom.cpp; sourceTree = "<group>"; }; 8885 8893 41614A761DA64236004AD06F /* HTTPHeaderValues.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = HTTPHeaderValues.cpp; sourceTree = "<group>"; }; 8886 8894 41614A771DA64236004AD06F /* HTTPHeaderValues.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = HTTPHeaderValues.h; sourceTree = "<group>"; }; … … 8945 8953 41BF700E0FE86F61005E8DEC /* PlatformMessagePortChannel.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = PlatformMessagePortChannel.h; path = default/PlatformMessagePortChannel.h; sourceTree = "<group>"; }; 8946 8954 41C760B00EDE03D300C1655F /* ScriptState.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ScriptState.h; sourceTree = "<group>"; }; 8955 41C7E1051E6A54360027B4DE /* CanvasCaptureMediaStreamTrack.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CanvasCaptureMediaStreamTrack.cpp; sourceTree = "<group>"; }; 8956 41C7E1061E6A54360027B4DE /* CanvasCaptureMediaStreamTrack.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CanvasCaptureMediaStreamTrack.h; sourceTree = "<group>"; }; 8957 41C7E1081E6AA37C0027B4DE /* CanvasCaptureMediaStreamTrack.idl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = CanvasCaptureMediaStreamTrack.idl; sourceTree = "<group>"; }; 8947 8958 41CF8BE41D46222000707DC9 /* FetchBodyConsumer.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = FetchBodyConsumer.cpp; sourceTree = "<group>"; }; 8948 8959 41CF8BE51D46222000707DC9 /* FetchBodyConsumer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FetchBodyConsumer.h; sourceTree = "<group>"; }; … … 15442 15453 93A806111E03B51C008A1F26 /* DoubleRange.h */, 15443 15454 93A806121E03B51C008A1F26 /* DoubleRange.idl */, 15455 41C7E1051E6A54360027B4DE /* CanvasCaptureMediaStreamTrack.cpp */, 15456 41C7E1061E6A54360027B4DE /* CanvasCaptureMediaStreamTrack.h */, 15457 41C7E1081E6AA37C0027B4DE /* CanvasCaptureMediaStreamTrack.idl */, 15444 15458 0779BF0B18453168000B6AE7 /* HTMLMediaElementMediaStream.h */, 15445 15459 0779BF0C18453168000B6AE7 /* HTMLMediaElementMediaStream.idl */, … … 15693 15707 15739BB81B42012200D258C1 /* JSMediaDevices.cpp */, 15694 15708 15739BB91B42012200D258C1 /* JSMediaDevices.h */, 15709 07277E4017D018CC0015534E /* JSCanvasCaptureMediaStreamTrack.cpp */, 15710 07277E4117D018CC0015534E /* JSCanvasCaptureMediaStreamTrack.h */, 15695 15711 07277E4017D018CC0015534D /* JSMediaStream.cpp */, 15696 15712 07277E4117D018CC0015534D /* JSMediaStream.h */, … … 22714 22730 2D9BF7481DBFDDF8007A7D99 /* JSMediaKeySessionCustom.cpp */, 22715 22731 410B7E711045FAB000D8224F /* JSMessageEventCustom.cpp */, 22732 415CDAF61E6CE0D3004F11EE /* JSMediaStreamTrackCustom.cpp */, 22716 22733 A1E5B31D1AAD1DA4006EBEFB /* JSMockContentFilterSettingsCustom.cpp */, 22717 22734 C6F0917E143A2BB900685849 /* JSMutationObserverCustom.cpp */, … … 27048 27065 7C5343FD17B74B63004232F0 /* JSMediaQueryListListener.h in Headers */, 27049 27066 CD9DE17517AAC74C00EA386D /* JSMediaSource.h in Headers */, 27067 07277E4D17D018CC0015534E /* JSCanvasCaptureMediaStreamTrack.h in Headers */, 27050 27068 07277E4D17D018CC0015534D /* JSMediaStream.h in Headers */, 27051 27069 07277E4F17D018CC0015534D /* JSMediaStreamAudioDestinationNode.h in Headers */, … … 28662 28680 B2227AA00D00BF220071B782 /* SVGRenderingIntent.h in Headers */, 28663 28681 BC2274790E8366E200E7F975 /* SVGRenderStyle.h in Headers */, 28682 415CDAF51E6B8F8B004F11EE /* CanvasCaptureMediaStreamTrack.h in Headers */, 28664 28683 BC22747B0E8366E200E7F975 /* SVGRenderStyleDefs.h in Headers */, 28665 28684 436708F212D9CA4B00044234 /* SVGRenderSupport.h in Headers */, … … 30803 30822 A80E7B140A19D606007FB8C5 /* JSHTMLHeadElement.cpp in Sources */, 30804 30823 1AE2AA2E0A1CDAB400B42B25 /* JSHTMLHeadingElement.cpp in Sources */, 30824 415CDAF41E6B8F87004F11EE /* CanvasCaptureMediaStreamTrack.cpp in Sources */, 30805 30825 1AE2AA300A1CDAB400B42B25 /* JSHTMLHRElement.cpp in Sources */, 30806 30826 1A85B18F0A1B18A200D8C87C /* JSHTMLHtmlElement.cpp in Sources */, … … 30914 30934 C9DADBCB1B1D3B97001F17D8 /* JSMediaSession.cpp in Sources */, 30915 30935 CD9DE17417AAC74C00EA386D /* JSMediaSource.cpp in Sources */, 30936 07277E4C17D018CC0015534E /* JSCanvasCaptureMediaStreamTrack.cpp in Sources */, 30916 30937 07277E4C17D018CC0015534D /* JSMediaStream.cpp in Sources */, 30917 30938 07277E4E17D018CC0015534D /* JSMediaStreamAudioDestinationNode.cpp in Sources */, … … 31528 31549 C6F0900E14327B6100685849 /* MutationObserver.cpp in Sources */, 31529 31550 D6E528A3149A926D00EFE1F3 /* MutationObserverInterestGroup.cpp in Sources */, 31551 415CDAF71E6CE0DE004F11EE /* JSMediaStreamTrackCustom.cpp in Sources */, 31530 31552 D6E276AF14637455001D280A /* MutationObserverRegistration.cpp in Sources */, 31531 31553 C6F08FBC1430FE8F00685849 /* MutationRecord.cpp in Sources */, -
trunk/Source/WebCore/bindings/js/JSBindingsAllInOne.cpp
r212207 r213598 87 87 #include "JSLocationCustom.cpp" 88 88 #include "JSMainThreadExecState.cpp" 89 #include "JSMediaStreamTrackCustom.cpp" 89 90 #include "JSMessageChannelCustom.cpp" 90 91 #include "JSMessageEventCustom.cpp" -
trunk/Source/WebCore/bindings/js/JSMediaStreamTrackCustom.cpp
r213597 r213598 1 1 /* 2 * Copyright (C) 2006, 2008, 2009 Apple Inc. All rights reserved. 3 * Copyright (C) 2010 Torch Mobile (Beijing) Co. Ltd. All rights reserved. 2 * Copyright (C) 2017 Apple Inc. All rights reserved. 4 3 * 5 4 * Redistribution and use in source and binary forms, with or without … … 22 21 * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 23 22 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 24 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 23 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 25 24 */ 26 25 27 typedef (CanvasRenderingContext2D or WebGLRenderingContextBase) RenderingContext; 26 #include "config.h" 27 #include "JSMediaStreamTrack.h" 28 28 29 [ 30 JSGenerateToNativeObject, 31 ReportExtraMemoryCost, 32 ReportExternalMemoryCost, 33 ] interface HTMLCanvasElement : HTMLElement { 34 attribute unsigned long width; 35 attribute unsigned long height; 29 #if ENABLE(MEDIA_STREAM) 36 30 37 [Custom] RenderingContext? getContext(DOMString contextId, any... arguments); 31 #include "JSCanvasCaptureMediaStreamTrack.h" 32 #include "JSDOMBinding.h" 38 33 39 [Custom, MayThrowException] DOMString toDataURL(optional DOMString? type); 40 [CallWith=ScriptExecutionContext, MayThrowException] void toBlob(BlobCallback callback, optional DOMString type, optional any quality); 41 }; 34 namespace WebCore { 35 36 JSC::JSValue toJSNewlyCreated(JSC::ExecState*, JSDOMGlobalObject* globalObject, Ref<MediaStreamTrack>&& object) 37 { 38 if (is<CanvasCaptureMediaStreamTrack>(object.get())) 39 return createWrapper<CanvasCaptureMediaStreamTrack>(globalObject, WTFMove(object)); 40 return createWrapper<MediaStreamTrack>(globalObject, WTFMove(object)); 41 } 42 43 JSC::JSValue toJS(JSC::ExecState* state, JSDOMGlobalObject* globalObject, MediaStreamTrack& track) 44 { 45 return wrap(state, globalObject, track); 46 } 47 48 } 49 50 #endif -
trunk/Source/WebCore/html/HTMLCanvasElement.cpp
r213437 r213598 53 53 #include <wtf/text/StringBuilder.h> 54 54 55 #if ENABLE(WEBGL) 55 #if ENABLE(MEDIA_STREAM) 56 #include "CanvasCaptureMediaStreamTrack.h" 57 #include "MediaStream.h" 58 #endif 59 60 #if ENABLE(WEBGL) 56 61 #include "WebGLContextAttributes.h" 57 62 #include "WebGLRenderingContextBase.h" 63 #endif 64 65 #if PLATFORM(COCOA) 66 #include "MediaSampleAVFObjC.h" 67 68 #include "CoreMediaSoftLink.h" 58 69 #endif 59 70 … … 300 311 FloatRect r = mapRect(dirtyRect, FloatRect(0, 0, size().width(), size().height()), destRect); 301 312 r.intersect(destRect); 302 if (r.isEmpty() || m_dirtyRect.contains(r)) 303 return; 304 305 m_dirtyRect.unite(r); 306 ro->repaintRectangle(enclosingIntRect(m_dirtyRect)); 313 if (!r.isEmpty() && !m_dirtyRect.contains(r)) { 314 m_dirtyRect.unite(r); 315 ro->repaintRectangle(enclosingIntRect(m_dirtyRect)); 316 } 307 317 } 308 318 notifyObserversCanvasChanged(dirtyRect); … … 538 548 } 539 549 550 #if ENABLE(MEDIA_STREAM) 551 552 RefPtr<MediaSample> HTMLCanvasElement::toMediaSample() 553 { 554 auto* imageBuffer = buffer(); 555 if (!imageBuffer) 556 return nullptr; 557 558 #if PLATFORM(COCOA) 559 makeRenderingResultsAvailable(); 560 return MediaSampleAVFObjC::createImageSample(imageBuffer->toBGRAData(), width(), height()); 561 #else 562 return nullptr; 563 #endif 564 } 565 566 ExceptionOr<Ref<MediaStream>> HTMLCanvasElement::captureStream(ScriptExecutionContext& context, std::optional<double>&& frameRequestRate) 567 { 568 if (!originClean()) 569 return Exception(SECURITY_ERR, ASCIILiteral("Canvas is tainted")); 570 571 if (frameRequestRate && frameRequestRate.value() < 0) 572 return Exception(NOT_SUPPORTED_ERR, ASCIILiteral("frameRequestRate is negative")); 573 574 auto track = CanvasCaptureMediaStreamTrack::create(context, *this, WTFMove(frameRequestRate)); 575 auto stream = MediaStream::create(context); 576 stream->addTrack(track); 577 return WTFMove(stream); 578 } 579 #endif 580 540 581 FloatRect HTMLCanvasElement::convertLogicalToDevice(const FloatRect& logicalRect) const 541 582 { -
trunk/Source/WebCore/html/HTMLCanvasElement.h
r213412 r213598 48 48 class ImageBuffer; 49 49 class ImageData; 50 class MediaSample; 51 class MediaStream; 50 52 51 53 namespace DisplayList { … … 116 118 CanvasRenderingContext* renderingContext() const { return m_context.get(); } 117 119 120 #if ENABLE(MEDIA_STREAM) 121 RefPtr<MediaSample> toMediaSample(); 122 ExceptionOr<Ref<MediaStream>> captureStream(ScriptExecutionContext&, std::optional<double>&& frameRequestRate); 123 #endif 124 118 125 ImageBuffer* buffer() const; 119 126 Image* copiedImage() const; -
trunk/Source/WebCore/html/HTMLCanvasElement.idl
r213412 r213598 39 39 [Custom, MayThrowException] DOMString toDataURL(optional DOMString? type); 40 40 [CallWith=ScriptExecutionContext, MayThrowException] void toBlob(BlobCallback callback, optional DOMString type, optional any quality); 41 42 [Conditional=MEDIA_STREAM, CallWith=ScriptExecutionContext, MayThrowException, NewObject] MediaStream captureStream(optional double frameRequestRate); 41 43 }; -
trunk/Source/WebCore/html/canvas/WebGL2RenderingContext.cpp
r210567 r213598 603 603 if (!clearIfComposited(mask)) 604 604 m_context->clear(mask); 605 markContextChanged ();605 markContextChangedAndNotifyCanvasObserver(); 606 606 } 607 607 -
trunk/Source/WebCore/html/canvas/WebGLRenderingContextBase.cpp
r212784 r213598 713 713 } 714 714 715 void WebGLRenderingContextBase::markContextChangedAndNotifyCanvasObserver() 716 { 717 markContextChanged(); 718 if (!isAccelerated()) 719 return; 720 721 RenderBox* renderBox = canvas().renderBox(); 722 if (renderBox && renderBox->hasAcceleratedCompositing()) 723 canvas().notifyObserversCanvasChanged(FloatRect(FloatPoint(0, 0), clampedCanvasSize())); 724 } 725 715 726 bool WebGLRenderingContextBase::clearIfComposited(GC3Dbitfield mask) 716 727 { … … 1990 2001 if (usesFallbackTexture) 1991 2002 checkTextureCompleteness("drawArrays", false); 1992 markContextChanged ();2003 markContextChangedAndNotifyCanvasObserver(); 1993 2004 } 1994 2005 … … 2018 2029 if (usesFallbackTexture) 2019 2030 checkTextureCompleteness("drawElements", false); 2020 markContextChanged ();2031 markContextChangedAndNotifyCanvasObserver(); 2021 2032 } 2022 2033 … … 5835 5846 if (!isGLES2NPOTStrict()) 5836 5847 checkTextureCompleteness("drawArraysInstanced", false); 5837 markContextChanged ();5848 markContextChangedAndNotifyCanvasObserver(); 5838 5849 } 5839 5850 … … 5866 5877 if (!isGLES2NPOTStrict()) 5867 5878 checkTextureCompleteness("drawElementsInstanced", false); 5868 markContextChanged ();5879 markContextChangedAndNotifyCanvasObserver(); 5869 5880 } 5870 5881 -
trunk/Source/WebCore/html/canvas/WebGLRenderingContextBase.h
r212784 r213598 397 397 void destroyGraphicsContext3D(); 398 398 void markContextChanged(); 399 void markContextChangedAndNotifyCanvasObserver(); 399 400 400 401 void addActivityStateChangeObserverIfNecessary(); -
trunk/Source/WebCore/platform/cocoa/CoreVideoSoftLink.cpp
r212927 r213598 49 49 SOFT_LINK_FUNCTION_FOR_SOURCE(WebCore, CoreVideo, CVOpenGLESTextureGetName, GLuint, (CVOpenGLESTextureRef image), (image)) 50 50 SOFT_LINK_FUNCTION_FOR_SOURCE(WebCore, CoreVideo, CVPixelBufferCreate, CVReturn, (CFAllocatorRef allocator, size_t width, size_t height, OSType pixelFormatType, CFDictionaryRef pixelBufferAttributes, CVPixelBufferRef *pixelBufferOut), (allocator, width, height, pixelFormatType, pixelBufferAttributes, pixelBufferOut)) 51 SOFT_LINK_FUNCTION_FOR_SOURCE(WebCore, CoreVideo, CVPixelBufferCreateWithBytes, CVReturn, (CFAllocatorRef allocator, size_t width, size_t height, OSType pixelFormatType, void* data, size_t bytesPerRow, void (*releaseCallback)(void*, const void*), void* releasePointer, CFDictionaryRef pixelBufferAttributes, CVPixelBufferRef *pixelBufferOut), (allocator, width, height, pixelFormatType, data, bytesPerRow, releaseCallback, releasePointer, pixelBufferAttributes, pixelBufferOut)) 51 52 SOFT_LINK_CONSTANT_FOR_SOURCE(WebCore, CoreVideo, kCVPixelBufferCGBitmapContextCompatibilityKey, CFStringRef) 52 53 SOFT_LINK_CONSTANT_FOR_SOURCE(WebCore, CoreVideo, kCVPixelBufferCGImageCompatibilityKey, CFStringRef) -
trunk/Source/WebCore/platform/cocoa/CoreVideoSoftLink.h
r212927 r213598 67 67 SOFT_LINK_FUNCTION_FOR_HEADER(WebCore, CoreVideo, CVPixelBufferCreate, CVReturn, (CFAllocatorRef allocator, size_t width, size_t height, OSType pixelFormatType, CFDictionaryRef pixelBufferAttributes, CVPixelBufferRef *pixelBufferOut), (allocator, width, height, pixelFormatType, pixelBufferAttributes, pixelBufferOut)) 68 68 #define CVPixelBufferCreate softLink_CoreVideo_CVPixelBufferCreate 69 SOFT_LINK_FUNCTION_FOR_HEADER(WebCore, CoreVideo, CVPixelBufferCreateWithBytes, CVReturn, (CFAllocatorRef allocator, size_t width, size_t height, OSType pixelFormatType, void* data, size_t bytesPerRow, void (*releaseCallback)(void*, const void*), void* releasePointer, CFDictionaryRef pixelBufferAttributes, CVPixelBufferRef *pixelBufferOut), (allocator, width, height, pixelFormatType, data, bytesPerRow, releaseCallback, releasePointer, pixelBufferAttributes, pixelBufferOut)) 70 #define CVPixelBufferCreateWithBytes softLink_CoreVideo_CVPixelBufferCreateWithBytes 69 71 70 72 SOFT_LINK_CONSTANT_FOR_HEADER(WebCore, CoreVideo, kCVPixelBufferCGBitmapContextCompatibilityKey, CFStringRef) -
trunk/Source/WebCore/platform/graphics/ImageBuffer.cpp
r207357 r213598 103 103 } 104 104 105 Vector<uint8_t> ImageBuffer::toBGRAData() const 106 { 107 #if USE(CG) 108 if (context().isAcceleratedContext()) 109 flushContext(); 110 return m_data.toBGRAData(context().isAcceleratedContext(), m_size.width(), m_size.height()); 111 #else 112 // FIXME: Implement this for other backends. 113 return { }; 114 #endif 115 } 116 105 117 #if !(USE(CG) || USE(DIRECT2D)) 106 118 FloatSize ImageBuffer::sizeForDestinationSize(FloatSize size) const -
trunk/Source/WebCore/platform/graphics/ImageBuffer.h
r213508 r213598 114 114 String toDataURL(const String& mimeType, std::optional<double> quality = std::nullopt, CoordinateSystem = LogicalCoordinateSystem) const; 115 115 Vector<uint8_t> toData(const String& mimeType, std::optional<double> quality = std::nullopt) const; 116 Vector<uint8_t> toBGRAData() const; 117 116 118 #if !USE(CG) 117 119 AffineTransform baseTransform() const { return AffineTransform(); } -
trunk/Source/WebCore/platform/graphics/avfoundation/MediaSampleAVFObjC.h
r210621 r213598 29 29 #include "MediaTimeAVFoundation.h" 30 30 31 #include <runtime/Uint8ClampedArray.h> 32 #include <wtf/Vector.h> 33 31 34 namespace WebCore { 32 35 33 36 class MediaSampleAVFObjC final : public MediaSample { 34 37 public: … … 36 39 static Ref<MediaSampleAVFObjC> create(CMSampleBufferRef sample, AtomicString trackID) { return adoptRef(*new MediaSampleAVFObjC(sample, trackID)); } 37 40 static Ref<MediaSampleAVFObjC> create(CMSampleBufferRef sample) { return adoptRef(*new MediaSampleAVFObjC(sample)); } 41 static RefPtr<MediaSampleAVFObjC> createImageSample(Ref<JSC::Uint8ClampedArray>&&, unsigned long width, unsigned long height); 42 static RefPtr<MediaSampleAVFObjC> createImageSample(Vector<uint8_t>&&, unsigned long width, unsigned long height); 38 43 39 44 private: -
trunk/Source/WebCore/platform/graphics/avfoundation/objc/MediaSampleAVFObjC.mm
r211399 r213598 30 30 31 31 #import "CoreMediaSoftLink.h" 32 #import "CoreVideoSoftLink.h" 32 33 33 34 namespace WebCore { 35 36 static inline void releaseUint8Vector(void *array, const void*) 37 { 38 adoptMallocPtr(static_cast<uint8_t*>(array)); 39 } 40 41 RefPtr<MediaSampleAVFObjC> MediaSampleAVFObjC::createImageSample(Vector<uint8_t>&& array, unsigned long width, unsigned long height) 42 { 43 CVPixelBufferRef imageBuffer = nullptr; 44 auto status = CVPixelBufferCreateWithBytes(kCFAllocatorDefault, width, height, kCVPixelFormatType_32BGRA, array.data(), width * 4, releaseUint8Vector, array.releaseBuffer().leakPtr(), NULL, &imageBuffer); 45 46 ASSERT_UNUSED(status, !status); 47 if (!imageBuffer) 48 return nullptr; 49 50 CMVideoFormatDescriptionRef formatDescription = nullptr; 51 status = CMVideoFormatDescriptionCreateForImageBuffer(kCFAllocatorDefault, imageBuffer, &formatDescription); 52 ASSERT(!status); 53 54 CMSampleTimingInfo sampleTimingInformation = { kCMTimeInvalid, kCMTimeInvalid, kCMTimeInvalid }; 55 56 CMSampleBufferRef sample; 57 status = CMSampleBufferCreateReadyWithImageBuffer(kCFAllocatorDefault, imageBuffer, formatDescription, &sampleTimingInformation, &sample); 58 ASSERT(!status); 59 60 CFArrayRef attachmentsArray = CMSampleBufferGetSampleAttachmentsArray(sample, true); 61 for (CFIndex i = 0; i < CFArrayGetCount(attachmentsArray); ++i) { 62 CFMutableDictionaryRef attachments = (CFMutableDictionaryRef)CFArrayGetValueAtIndex(attachmentsArray, i); 63 CFDictionarySetValue(attachments, kCMSampleAttachmentKey_DisplayImmediately, kCFBooleanTrue); 64 } 65 return create(sample); 66 } 34 67 35 68 MediaTime MediaSampleAVFObjC::presentationTime() const -
trunk/Source/WebCore/platform/graphics/cg/ImageBufferDataCG.cpp
r206830 r213598 91 91 #endif // USE(ACCELERATE) 92 92 93 static inline void transferData(void* output, void* input, int width, int height, size_t inputBytesPerRow) 94 { 95 #if USE(ACCELERATE) 96 vImage_Buffer src; 97 src.width = width; 98 src.height = height; 99 src.rowBytes = inputBytesPerRow; 100 src.data = input; 101 102 vImage_Buffer dest; 103 dest.width = width; 104 dest.height = height; 105 dest.rowBytes = width * 4; 106 dest.data = output; 107 108 vImageUnpremultiplyData_BGRA8888(&src, &dest, kvImageNoFlags); 109 #else 110 UNUSED_PARAM(output); 111 UNUSED_PARAM(input); 112 UNUSED_PARAM(width); 113 UNUSED_PARAM(height); 114 // FIXME: Add support for not ACCELERATE. 115 ASSERT_NOT_REACHED(); 116 #endif 117 } 118 119 Vector<uint8_t> ImageBufferData::toBGRAData(bool accelerateRendering, int width, int height) const 120 { 121 Vector<uint8_t> result(4 * width * height); 122 123 if (!accelerateRendering) { 124 transferData(result.data(), data, width, height, 4 * backingStoreSize.width()); 125 return result; 126 } 127 #if USE(IOSURFACE_CANVAS_BACKING_STORE) 128 IOSurfaceRef surfaceRef = surface->surface(); 129 IOSurfaceLock(surfaceRef, kIOSurfaceLockReadOnly, nullptr); 130 transferData(result.data(), IOSurfaceGetBaseAddress(surfaceRef), width, height, IOSurfaceGetBytesPerRow(surfaceRef)); 131 IOSurfaceUnlock(surfaceRef, kIOSurfaceLockReadOnly, nullptr); 132 #else 133 ASSERT_NOT_REACHED(); 134 #endif 135 return result; 136 } 137 138 93 139 RefPtr<Uint8ClampedArray> ImageBufferData::getData(const IntRect& rect, const IntSize& size, bool accelerateRendering, bool unmultiplied, float resolutionScale) const 94 140 { -
trunk/Source/WebCore/platform/graphics/cg/ImageBufferDataCG.h
r187681 r213598 30 30 #include <wtf/RefPtr.h> 31 31 #include <wtf/RetainPtr.h> 32 #include <wtf/Vector.h> 32 33 33 34 #if PLATFORM(COCOA) && USE(CA) && !PLATFORM(IOS_SIMULATOR) … … 59 60 #endif 60 61 62 Vector<uint8_t> toBGRAData(bool accelerateRendering, int width, int height) const; 61 63 RefPtr<Uint8ClampedArray> getData(const IntRect&, const IntSize&, bool accelerateRendering, bool unmultiplied, float resolutionScale) const; 62 64 void putData(Uint8ClampedArray*& source, const IntSize& sourceSize, const IntRect& sourceRect, const IntPoint& destPoint, const IntSize&, bool accelerateRendering, bool unmultiplied, float resolutionScale);
Note: See TracChangeset
for help on using the changeset viewer.