Changeset 236494 in webkit
- Timestamp:
- Sep 25, 2018, 7:33:02 PM (8 years ago)
- Location:
- trunk/Source
- Files:
-
- 2 added
- 14 edited
-
WebCore/ChangeLog (modified) (1 diff)
-
WebCore/SourcesCocoa.txt (modified) (1 diff)
-
WebCore/WebCore.xcodeproj/project.pbxproj (modified) (4 diffs)
-
WebCore/platform/graphics/cv/PixelBufferResizer.mm (modified) (1 diff)
-
WebCore/platform/mediastream/mac/DisplayCaptureManagerCocoa.cpp (modified) (6 diffs)
-
WebCore/platform/mediastream/mac/DisplayCaptureManagerCocoa.h (modified) (2 diffs)
-
WebCore/platform/mediastream/mac/DisplayCaptureSourceCocoa.cpp (modified) (7 diffs)
-
WebCore/platform/mediastream/mac/DisplayCaptureSourceCocoa.h (modified) (5 diffs)
-
WebCore/platform/mediastream/mac/RealtimeMediaSourceCenterMac.cpp (modified) (1 diff)
-
WebCore/platform/mediastream/mac/ScreenDisplayCaptureSourceMac.h (modified) (1 diff)
-
WebCore/platform/mediastream/mac/ScreenDisplayCaptureSourceMac.mm (modified) (5 diffs)
-
WebCore/platform/mediastream/mac/WindowDisplayCaptureSourceMac.h (added)
-
WebCore/platform/mediastream/mac/WindowDisplayCaptureSourceMac.mm (added)
-
WebKit/ChangeLog (modified) (1 diff)
-
WebKit/UIProcess/UserMediaPermissionRequestManagerProxy.h (modified) (2 diffs)
-
WebKit/UIProcess/WebPageProxy.cpp (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/WebCore/ChangeLog
r236490 r236494 1 2018-09-25 Eric Carlson <eric.carlson@apple.com> 2 3 [MediaStream] Add Mac window capture source 4 https://bugs.webkit.org/show_bug.cgi?id=189958 5 <rdar://problem/44767616> 6 7 Reviewed by Youenn Fablet. 8 9 * SourcesCocoa.txt: Add WindowDisplayCaptureSourceMac. 10 * WebCore.xcodeproj/project.pbxproj: Ditto. 11 12 * platform/mediastream/mac/DisplayCaptureManagerCocoa.cpp: 13 (WebCore::DisplayCaptureManagerCocoa::captureDevices): Include window "devices". 14 (WebCore::DisplayCaptureManagerCocoa::updateWindowCaptureDevices): New. 15 (WebCore::DisplayCaptureManagerCocoa::windowCaptureDeviceWithPersistentID): New. 16 (WebCore::DisplayCaptureManagerCocoa::captureDeviceWithPersistentID): Include window devices. 17 * platform/mediastream/mac/DisplayCaptureManagerCocoa.h: 18 19 * platform/mediastream/mac/DisplayCaptureSourceCocoa.cpp: 20 (WebCore::DisplayCaptureSourceCocoa::DisplayCaptureSourceCocoa): 21 (WebCore::DisplayCaptureSourceCocoa::settings): Use frameSize, report surface type and 22 logical surface. 23 (WebCore::DisplayCaptureSourceCocoa::settingsDidChange): Clear m_lastSampleBuffer when size changes. 24 (WebCore::DisplayCaptureSourceCocoa::frameSize const): New, return size() or intrinsic size. 25 (WebCore::DisplayCaptureSourceCocoa::setIntrinsicSize): New. 26 (WebCore::DisplayCaptureSourceCocoa::emitFrame): generateFrame now returns a CVPixelBuffer 27 so derived classes don't have to deal with resizing/transforming. 28 * platform/mediastream/mac/DisplayCaptureSourceCocoa.h: 29 30 * platform/mediastream/mac/RealtimeMediaSourceCenterMac.cpp: 31 32 * platform/mediastream/mac/ScreenDisplayCaptureSourceMac.h: 33 * platform/mediastream/mac/ScreenDisplayCaptureSourceMac.mm: 34 (WebCore::ScreenDisplayCaptureSourceMac::ScreenDisplayCaptureSourceMac): Add fixme. 35 (WebCore::ScreenDisplayCaptureSourceMac::createDisplayStream): Update intrinsic size when 36 width/height changes. 37 (WebCore::ScreenDisplayCaptureSourceMac::generateFrame): Return a CVPixelBuffer. 38 39 * platform/mediastream/mac/WindowDisplayCaptureSourceMac.h: Added. 40 * platform/mediastream/mac/WindowDisplayCaptureSourceMac.mm: Added. 41 (WebCore::anyOfCGWindow): 42 (WebCore::windowDescription): 43 (WebCore::WindowDisplayCaptureSourceMac::create): 44 (WebCore::WindowDisplayCaptureSourceMac::WindowDisplayCaptureSourceMac): 45 (WebCore::WindowDisplayCaptureSourceMac::windowImage): 46 (WebCore::WindowDisplayCaptureSourceMac::generateFrame): 47 (WebCore::WindowDisplayCaptureSourceMac::pixelBufferFromCGImage): 48 (WebCore::WindowDisplayCaptureSourceMac::windowCaptureDeviceWithPersistentID): 49 (WebCore::WindowDisplayCaptureSourceMac::windowCaptureDevices): 50 1 51 2018-09-25 Justin Fan <justin_fan@apple.com> 2 52 -
trunk/Source/WebCore/SourcesCocoa.txt
r236481 r236494 553 553 platform/mediastream/mac/RealtimeOutgoingVideoSourceCocoa.cpp 554 554 platform/mediastream/mac/ScreenDisplayCaptureSourceMac.mm 555 platform/mediastream/mac/WindowDisplayCaptureSourceMac.mm 555 556 556 557 platform/audio/mac/AudioSampleDataSource.mm -
trunk/Source/WebCore/WebCore.xcodeproj/project.pbxproj
r236481 r236494 205 205 07C1C0E51BFB60ED00BD2256 /* RealtimeMediaSourceSupportedConstraints.h in Headers */ = {isa = PBXBuildFile; fileRef = 07C1C0E41BFB60ED00BD2256 /* RealtimeMediaSourceSupportedConstraints.h */; settings = {ATTRIBUTES = (Private, ); }; }; 206 206 07CE77D516712A6A00C55A47 /* InbandTextTrackPrivateClient.h in Headers */ = {isa = PBXBuildFile; fileRef = 07CE77D416712A6A00C55A47 /* InbandTextTrackPrivateClient.h */; settings = {ATTRIBUTES = (Private, ); }; }; 207 07D60928214C5BFD00E7396C /* WindowDisplayCaptureSourceMac.h in Headers */ = {isa = PBXBuildFile; fileRef = 07D60926214C5BFC00E7396C /* WindowDisplayCaptureSourceMac.h */; }; 207 208 07D637401BB0B11300256CE9 /* WebAudioSourceProviderAVFObjC.h in Headers */ = {isa = PBXBuildFile; fileRef = 07D6373E1BB0B11300256CE9 /* WebAudioSourceProviderAVFObjC.h */; settings = {ATTRIBUTES = (Private, ); }; }; 208 209 07D6A4F41BED5F8800174146 /* MockRealtimeAudioSource.h in Headers */ = {isa = PBXBuildFile; fileRef = 07D6A4F21BED5F8800174146 /* MockRealtimeAudioSource.h */; settings = {ATTRIBUTES = (Private, ); }; }; … … 5444 5445 07C8AD121D073D630087C5CE /* AVFoundationMIMETypeCache.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AVFoundationMIMETypeCache.h; sourceTree = "<group>"; }; 5445 5446 07CE77D416712A6A00C55A47 /* InbandTextTrackPrivateClient.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = InbandTextTrackPrivateClient.h; sourceTree = "<group>"; }; 5447 07D60924214C5BFB00E7396C /* WindowDisplayCaptureSourceMac.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = WindowDisplayCaptureSourceMac.mm; sourceTree = "<group>"; }; 5448 07D60926214C5BFC00E7396C /* WindowDisplayCaptureSourceMac.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WindowDisplayCaptureSourceMac.h; sourceTree = "<group>"; }; 5446 5449 07D6373E1BB0B11300256CE9 /* WebAudioSourceProviderAVFObjC.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WebAudioSourceProviderAVFObjC.h; sourceTree = "<group>"; }; 5447 5450 07D6373F1BB0B11300256CE9 /* WebAudioSourceProviderAVFObjC.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = WebAudioSourceProviderAVFObjC.mm; sourceTree = "<group>"; }; … … 15389 15392 07D6373E1BB0B11300256CE9 /* WebAudioSourceProviderAVFObjC.h */, 15390 15393 07D6373F1BB0B11300256CE9 /* WebAudioSourceProviderAVFObjC.mm */, 15394 07D60926214C5BFC00E7396C /* WindowDisplayCaptureSourceMac.h */, 15395 07D60924214C5BFB00E7396C /* WindowDisplayCaptureSourceMac.mm */, 15391 15396 ); 15392 15397 path = mac; … … 31116 31121 939B02EF0EA2DBC400C54570 /* WidthIterator.h in Headers */, 31117 31122 0F15ED5C1B7EC7C500EDDFEB /* WillChangeData.h in Headers */, 31123 07D60928214C5BFD00E7396C /* WindowDisplayCaptureSourceMac.h in Headers */, 31118 31124 BC8243E90D0CFD7500460C8F /* WindowFeatures.h in Headers */, 31119 31125 7E99AF530B13846468FB01A5 /* WindowFocusAllowedIndicator.h in Headers */, -
trunk/Source/WebCore/platform/graphics/cv/PixelBufferResizer.mm
r236432 r236494 69 69 RetainPtr<CVPixelBufferRef> PixelBufferResizer::resize(CVPixelBufferRef inputBuffer) 70 70 { 71 ASSERT(m_bufferPool && !m_size.isEmpty()); 72 if (!m_bufferPool || m_size.isEmpty()) 73 return nullptr; 74 71 75 RetainPtr<CVPixelBufferRef> result; 72 76 CVPixelBufferRef outputBuffer = nullptr; -
trunk/Source/WebCore/platform/mediastream/mac/DisplayCaptureManagerCocoa.cpp
r235521 r236494 29 29 #if ENABLE(MEDIA_STREAM) 30 30 31 #include "CoreVideoSoftLink.h"32 31 #include "Logging.h" 33 32 #include <wtf/Algorithms.h> … … 36 35 #if PLATFORM(MAC) 37 36 #include "ScreenDisplayCaptureSourceMac.h" 37 #include "WindowDisplayCaptureSourceMac.h" 38 38 #include <CoreGraphics/CGDirectDisplay.h> 39 39 #endif 40 41 #include "CoreVideoSoftLink.h" 40 42 41 43 namespace WebCore { … … 51 53 m_devices.clear(); 52 54 55 updateWindowCaptureDevices(); 53 56 updateDisplayCaptureDevices(); 54 57 … … 60 63 #if PLATFORM(MAC) 61 64 ScreenDisplayCaptureSourceMac::screenCaptureDevices(m_devices); 65 #endif 66 } 67 68 void DisplayCaptureManagerCocoa::updateWindowCaptureDevices() 69 { 70 #if PLATFORM(MAC) 71 WindowDisplayCaptureSourceMac::windowCaptureDevices(m_devices); 62 72 #endif 63 73 } … … 73 83 } 74 84 85 std::optional<CaptureDevice> DisplayCaptureManagerCocoa::windowCaptureDeviceWithPersistentID(const String& deviceID) 86 { 87 #if PLATFORM(MAC) 88 return WindowDisplayCaptureSourceMac::windowCaptureDeviceWithPersistentID(deviceID); 89 #else 90 UNUSED_PARAM(deviceID); 91 return std::nullopt; 92 #endif 93 } 94 75 95 std::optional<CaptureDevice> DisplayCaptureManagerCocoa::captureDeviceWithPersistentID(CaptureDevice::DeviceType type, const String& id) 76 96 { … … 79 99 return screenCaptureDeviceWithPersistentID(id); 80 100 break; 81 101 102 case CaptureDevice::DeviceType::Window: 103 return windowCaptureDeviceWithPersistentID(id); 104 break; 105 82 106 case CaptureDevice::DeviceType::Application: 83 case CaptureDevice::DeviceType::Window:84 107 case CaptureDevice::DeviceType::Browser: 85 108 break; -
trunk/Source/WebCore/platform/mediastream/mac/DisplayCaptureManagerCocoa.h
r234146 r236494 42 42 43 43 void updateDisplayCaptureDevices(); 44 void updateWindowCaptureDevices(); 44 45 45 46 const Vector<CaptureDevice>& captureDevices() final; … … 47 48 std::optional<CaptureDevice> captureDeviceWithPersistentID(CaptureDevice::DeviceType, const String&) final; 48 49 std::optional<CaptureDevice> screenCaptureDeviceWithPersistentID(const String&); 50 std::optional<CaptureDevice> windowCaptureDeviceWithPersistentID(const String&); 49 51 50 52 Vector<CaptureDevice> m_devices; -
trunk/Source/WebCore/platform/mediastream/mac/DisplayCaptureSourceCocoa.cpp
r236015 r236494 30 30 31 31 #include "Logging.h" 32 #include "MediaSampleAVFObjC.h" 33 #include "PixelBufferConformerCV.h" 34 #include "PixelBufferResizer.h" 32 35 #include "RealtimeMediaSource.h" 33 36 #include "RealtimeMediaSourceCenter.h" 34 37 #include "RealtimeMediaSourceSettings.h" 38 #include "RealtimeVideoUtilities.h" 35 39 #include "Timer.h" 36 40 #include <CoreMedia/CMSync.h> … … 48 52 using namespace PAL; 49 53 50 DisplayCaptureSourceCocoa::DisplayCaptureSourceCocoa( const String& name)51 : RealtimeMediaSource("", Type::Video, name)54 DisplayCaptureSourceCocoa::DisplayCaptureSourceCocoa(String&& name) 55 : RealtimeMediaSource("", Type::Video, WTFMove(name)) 52 56 , m_timer(RunLoop::current(), this, &DisplayCaptureSourceCocoa::emitFrame) 53 57 { … … 81 85 RealtimeMediaSourceSettings settings; 82 86 settings.setFrameRate(frameRate()); 83 auto size = this->size();84 if ( size.width() && size.height()) {87 auto size = frameSize(); 88 if (!size.isEmpty()) { 85 89 settings.setWidth(size.width()); 86 90 settings.setHeight(size.height()); 87 91 } 92 settings.setDisplaySurface(surfaceType()); 93 settings.setLogicalSurface(false); 88 94 89 95 RealtimeMediaSourceSupportedConstraints supportedConstraints; … … 91 97 supportedConstraints.setSupportsWidth(true); 92 98 supportedConstraints.setSupportsHeight(true); 93 supportedConstraints.setSupportsAspectRatio(true); 99 supportedConstraints.setSupportsDisplaySurface(true); 100 supportedConstraints.setSupportsLogicalSurface(true); 101 94 102 settings.setSupportedConstraints(supportedConstraints); 95 103 … … 104 112 m_timer.startRepeating(1_s / frameRate()); 105 113 106 if (settings.containsAny({ RealtimeMediaSourceSettings::Flag::Width, RealtimeMediaSourceSettings::Flag::Height })) 114 if (settings.containsAny({ RealtimeMediaSourceSettings::Flag::Width, RealtimeMediaSourceSettings::Flag::Height })) { 107 115 m_bufferAttributes = nullptr; 108 109 m_currentSettings = std::nullopt; 116 m_lastSampleBuffer = nullptr; 117 } 118 119 m_currentSettings = { }; 110 120 111 121 RealtimeMediaSource::settingsDidChange(settings); … … 137 147 } 138 148 149 IntSize DisplayCaptureSourceCocoa::frameSize() const 150 { 151 IntSize frameSize = size(); 152 if (frameSize.isEmpty()) 153 frameSize = m_intrinsicSize; 154 155 return frameSize; 156 } 157 158 void DisplayCaptureSourceCocoa::setIntrinsicSize(const IntSize& size) 159 { 160 if (m_intrinsicSize == size) 161 return; 162 163 m_intrinsicSize = size; 164 m_lastSampleBuffer = nullptr; 165 } 166 139 167 void DisplayCaptureSourceCocoa::emitFrame() 140 168 { … … 142 170 return; 143 171 144 generateFrame(); 172 auto pixelBuffer = generateFrame(); 173 if (!pixelBuffer) 174 return; 175 176 if (m_lastSampleBuffer && m_lastFullSizedPixelBuffer && CFEqual(m_lastFullSizedPixelBuffer.get(), pixelBuffer.get())) { 177 videoSampleAvailable(MediaSampleAVFObjC::create(m_lastSampleBuffer.get())); 178 return; 179 } 180 181 m_lastFullSizedPixelBuffer = pixelBuffer; 182 183 int width = WTF::safeCast<int>(CVPixelBufferGetWidth(pixelBuffer.get())); 184 int height = WTF::safeCast<int>(CVPixelBufferGetHeight(pixelBuffer.get())); 185 auto requestedSize = frameSize(); 186 if (width != requestedSize.width() || height != requestedSize.height()) { 187 if (m_pixelBufferResizer && !m_pixelBufferResizer->canResizeTo(requestedSize)) 188 m_pixelBufferResizer = nullptr; 189 190 if (!m_pixelBufferResizer) 191 m_pixelBufferResizer = std::make_unique<PixelBufferResizer>(requestedSize, preferedPixelBufferFormat()); 192 193 pixelBuffer = m_pixelBufferResizer->resize(pixelBuffer.get()); 194 } else { 195 m_pixelBufferResizer = nullptr; 196 197 auto pixelFormatType = CVPixelBufferGetPixelFormatType(pixelBuffer.get()); 198 if (pixelFormatType != preferedPixelBufferFormat()) { 199 if (!m_pixelBufferConformer) { 200 auto preferredFromat = preferedPixelBufferFormat(); 201 auto conformerAttributes = adoptCF(CFDictionaryCreateMutable(nullptr, 0, &kCFTypeDictionaryKeyCallBacks, &kCFTypeDictionaryValueCallBacks)); 202 auto videoType = adoptCF(CFNumberCreate(nullptr, kCFNumberSInt32Type, &preferredFromat)); 203 CFDictionarySetValue(conformerAttributes.get(), kCVPixelBufferPixelFormatTypeKey, videoType.get()); 204 205 m_pixelBufferConformer = std::make_unique<PixelBufferConformerCV>(conformerAttributes.get()); 206 } 207 208 pixelBuffer = m_pixelBufferConformer->convert(pixelBuffer.get()); 209 } 210 } 211 if (!pixelBuffer) 212 return; 213 214 m_lastSampleBuffer = sampleBufferFromPixelBuffer(pixelBuffer.get()); 215 if (!m_lastSampleBuffer) 216 return; 217 218 videoSampleAvailable(MediaSampleAVFObjC::create(m_lastSampleBuffer.get())); 145 219 } 146 220 -
trunk/Source/WebCore/platform/mediastream/mac/DisplayCaptureSourceCocoa.h
r236015 r236494 45 45 46 46 class CaptureDeviceInfo; 47 class PixelBufferConformerCV; 48 class PixelBufferResizer; 47 49 48 50 class DisplayCaptureSourceCocoa : public RealtimeMediaSource { … … 50 52 51 53 protected: 52 DisplayCaptureSourceCocoa( const String& name);54 DisplayCaptureSourceCocoa(String&&); 53 55 virtual ~DisplayCaptureSourceCocoa(); 54 56 55 virtual void generateFrame() = 0; 57 virtual RetainPtr<CVPixelBufferRef> generateFrame() = 0; 58 virtual RealtimeMediaSourceSettings::DisplaySurfaceType surfaceType() const = 0; 59 56 60 void startProducingData() override; 57 61 void stopProducingData() override; … … 66 70 void settingsDidChange(OptionSet<RealtimeMediaSourceSettings::Flag>) override; 67 71 72 const IntSize& intrinsicSize() const { return m_intrinsicSize; } 73 void setIntrinsicSize(const IntSize&); 74 IntSize frameSize() const; 75 68 76 private: 69 77 … … 75 83 void emitFrame(); 76 84 85 IntSize m_intrinsicSize; 77 86 std::optional<RealtimeMediaSourceCapabilities> m_capabilities; 78 87 std::optional<RealtimeMediaSourceSettings> m_currentSettings; … … 84 93 RetainPtr<CFMutableDictionaryRef> m_bufferAttributes; 85 94 RunLoop::Timer<DisplayCaptureSourceCocoa> m_timer; 95 96 std::unique_ptr<PixelBufferResizer> m_pixelBufferResizer; 97 std::unique_ptr<PixelBufferConformerCV> m_pixelBufferConformer; 98 RetainPtr<CVPixelBufferRef> m_lastFullSizedPixelBuffer; 99 RetainPtr<CMSampleBufferRef> m_lastSampleBuffer; 86 100 }; 87 101 -
trunk/Source/WebCore/platform/mediastream/mac/RealtimeMediaSourceCenterMac.cpp
r226468 r236494 59 59 #if PLATFORM(MAC) 60 60 return ScreenDisplayCaptureSourceMac::create(device.persistentId(), constraints); 61 break; 61 #endif 62 case CaptureDevice::DeviceType::Window: 63 #if PLATFORM(MAC) 64 return WindowDisplayCaptureSourceMac::create(device.persistentId(), constraints); 62 65 #endif 63 66 case CaptureDevice::DeviceType::Application: 64 case CaptureDevice::DeviceType::Window:65 67 case CaptureDevice::DeviceType::Browser: 66 68 case CaptureDevice::DeviceType::Microphone: -
trunk/Source/WebCore/platform/mediastream/mac/ScreenDisplayCaptureSourceMac.h
r235670 r236494 57 57 void frameAvailable(CGDisplayStreamFrameStatus, uint64_t, IOSurfaceRef, CGDisplayStreamUpdateRef); 58 58 59 void generateFrame() final; 59 RetainPtr<CVPixelBufferRef> generateFrame() final; 60 RealtimeMediaSourceSettings::DisplaySurfaceType surfaceType() const final { return RealtimeMediaSourceSettings::DisplaySurfaceType::Monitor; } 61 60 62 void startProducingData() final; 61 63 void stopProducingData() final; -
trunk/Source/WebCore/platform/mediastream/mac/ScreenDisplayCaptureSourceMac.mm
r235760 r236494 98 98 99 99 ScreenDisplayCaptureSourceMac::ScreenDisplayCaptureSourceMac(uint32_t displayID) 100 : DisplayCaptureSourceCocoa("Screen") 100 : DisplayCaptureSourceCocoa("Screen") // FIXME: figure out what to call this 101 101 , m_displayID(displayID) 102 102 { … … 127 127 128 128 if (!m_displayStream) { 129 if (size().isEmpty()) { 130 RetainPtr<CGDisplayModeRef> displayMode = adoptCF(CGDisplayCopyDisplayMode(m_displayID)); 131 auto screenWidth = CGDisplayModeGetPixelsWide(displayMode.get()); 132 auto screenHeight = CGDisplayModeGetPixelsHigh(displayMode.get()); 133 if (!screenWidth || !screenHeight) { 134 RELEASE_LOG(Media, "ScreenDisplayCaptureSourceMac::createDisplayStream(%p), unable to get screen width/height", this); 135 captureFailed(); 136 return false; 137 } 138 setSize(IntSize(screenWidth, screenHeight)); 129 auto displayMode = adoptCF(CGDisplayCopyDisplayMode(m_displayID)); 130 auto screenWidth = CGDisplayModeGetPixelsWide(displayMode.get()); 131 auto screenHeight = CGDisplayModeGetPixelsHigh(displayMode.get()); 132 if (!screenWidth || !screenHeight) { 133 RELEASE_LOG(Media, "ScreenDisplayCaptureSourceMac::createDisplayStream(%p), unable to get screen width/height", this); 134 captureFailed(); 135 return false; 139 136 } 137 setIntrinsicSize(IntSize(screenWidth, screenHeight)); 140 138 141 139 if (!m_captureQueue) … … 168 166 }); 169 167 170 m_displayStream = adoptCF(CGDisplayStreamCreateWithDispatchQueue(m_displayID, size().width(), size().height(), kCVPixelFormatType_420YpCbCr8BiPlanarVideoRange, streamOptions.get(), m_captureQueue.get(), m_frameAvailableBlock)); 168 auto size = frameSize(); 169 m_displayStream = adoptCF(CGDisplayStreamCreateWithDispatchQueue(m_displayID, size.width(), size.height(), kCVPixelFormatType_420YpCbCr8Planar, streamOptions.get(), m_captureQueue.get(), m_frameAvailableBlock)); 171 170 if (!m_displayStream) { 172 171 RELEASE_LOG(Media, "ScreenDisplayCaptureSourceMac::createDisplayStream(%p), CGDisplayStreamCreate failed", this); … … 207 206 } 208 207 209 voidScreenDisplayCaptureSourceMac::generateFrame()208 RetainPtr<CVPixelBufferRef> ScreenDisplayCaptureSourceMac::generateFrame() 210 209 { 211 210 if (!m_currentFrame.ioSurface()) 212 return ;211 return nullptr; 213 212 214 213 DisplaySurface currentFrame; … … 218 217 } 219 218 220 auto pixelBuffer = pixelBufferFromIOSurface(currentFrame.ioSurface()); 221 if (!pixelBuffer) 222 return; 223 224 auto sampleBuffer = sampleBufferFromPixelBuffer(pixelBuffer.get()); 225 if (!sampleBuffer) 226 return; 227 228 videoSampleAvailable(MediaSampleAVFObjC::create(sampleBuffer.get())); 219 return pixelBufferFromIOSurface(currentFrame.ioSurface()); 229 220 } 230 221 -
trunk/Source/WebKit/ChangeLog
r236492 r236494 1 2018-09-25 Eric Carlson <eric.carlson@apple.com> 2 3 [MediaStream] Add Mac window capture source 4 https://bugs.webkit.org/show_bug.cgi?id=189958 5 <rdar://problem/44767616> 6 7 Reviewed by Youenn Fablet. 8 9 * UIProcess/UserMediaPermissionRequestManagerProxy.h: 10 * UIProcess/WebPageProxy.cpp: 11 (WebKit::WebPageProxy::beginMonitoringCaptureDevices): Sync with webcore prefs before listening 12 to device changes so we listen on the correct devices. 13 1 14 2018-09-25 Chris Dumez <cdumez@apple.com> 2 15 -
trunk/Source/WebKit/UIProcess/UserMediaPermissionRequestManagerProxy.h
r235086 r236494 65 65 66 66 void captureStateChanged(WebCore::MediaProducer::MediaStateFlags oldState, WebCore::MediaProducer::MediaStateFlags newState); 67 void syncWithWebCorePrefs() const; 67 68 68 69 private: … … 77 78 void getUserMediaPermissionInfo(uint64_t userMediaID, uint64_t frameID, UserMediaPermissionCheckProxy::CompletionHandler&&, Ref<WebCore::SecurityOrigin>&& userMediaDocumentOrigin, Ref<WebCore::SecurityOrigin>&& topLevelDocumentOrigin); 78 79 79 void syncWithWebCorePrefs() const;80 80 void watchdogTimerFired(); 81 81 -
trunk/Source/WebKit/UIProcess/WebPageProxy.cpp
r236492 r236494 6449 6449 { 6450 6450 #if ENABLE(MEDIA_STREAM) 6451 userMediaPermissionRequestManager().syncWithWebCorePrefs(); 6451 6452 UserMediaProcessManager::singleton().beginMonitoringCaptureDevices(); 6452 6453 #endif
Note:
See TracChangeset
for help on using the changeset viewer.