Changeset 245296 in webkit
- Timestamp:
- May 14, 2019 12:30:19 PM (5 years ago)
- Location:
- trunk/Source/WebCore
- Files:
-
- 7 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/WebCore/ChangeLog
r245295 r245296 1 2019-05-14 Youenn Fablet <youenn@apple.com> 2 3 getUserMedia capture changes on iOS after homing out 4 https://bugs.webkit.org/show_bug.cgi?id=197707 5 6 Reviewed by Eric Carlson. 7 8 In case of muting an AVVideoCaptureSource on iOS, the session is cleared. 9 We need to store the preset information, to setup the new session on unnmuting correctly. 10 Manually tested. 11 12 * platform/mediastream/mac/AVVideoCaptureSource.h: 13 * platform/mediastream/mac/AVVideoCaptureSource.mm: 14 (WebCore::AVVideoCaptureSource::setSizeAndFrameRateWithPreset): 15 (WebCore::AVVideoCaptureSource::setSessionSizeAndFrameRate): 16 (WebCore::AVVideoCaptureSource::setupCaptureSession): 17 1 18 2019-05-14 Oriol Brufau <obrufau@igalia.com> 2 19 -
trunk/Source/WebCore/platform/mediastream/RealtimeVideoSource.cpp
r243033 r245296 367 367 return; 368 368 369 set SizeAndFrameRateWithPreset(match->requestedSize,match->requestedFrameRate, match->encodingPreset);369 setFrameRateWithPreset(match->requestedFrameRate, match->encodingPreset); 370 370 371 371 if (!match->requestedSize.isEmpty()) -
trunk/Source/WebCore/platform/mediastream/RealtimeVideoSource.h
r244704 r245296 52 52 virtual void generatePresets() = 0; 53 53 virtual bool prefersPreset(VideoPreset&) { return true; } 54 virtual void set SizeAndFrameRateWithPreset(IntSize,double, RefPtr<VideoPreset>) { };54 virtual void setFrameRateWithPreset(double, RefPtr<VideoPreset>) { }; 55 55 virtual bool canResizeVideoFrames() const { return false; } 56 56 bool shouldUsePreset(VideoPreset& current, VideoPreset& candidate); -
trunk/Source/WebCore/platform/mediastream/mac/AVVideoCaptureSource.h
r243033 r245296 92 92 bool interrupted() const final; 93 93 94 void set SizeAndFrameRateWithPreset(IntSize,double, RefPtr<VideoPreset>) final;94 void setFrameRateWithPreset(double, RefPtr<VideoPreset>) final; 95 95 bool prefersPreset(VideoPreset&) final; 96 96 void generatePresets() final; 97 97 bool canResizeVideoFrames() const final { return true; } 98 98 99 void setSessionSizeAndFrameRate(); 99 100 bool setPreset(NSString*); 100 101 void computeSampleRotation(); … … 128 129 RetainPtr<AVCaptureSession> m_session; 129 130 RetainPtr<AVCaptureDevice> m_device; 130 RefPtr<VideoPreset> m_pendingPreset;131 131 132 132 Lock m_presetMutex; 133 133 RefPtr<AVVideoPreset> m_currentPreset; 134 IntSize m_ pendingSize;135 double m_ pendingFrameRate;134 IntSize m_currentSize; 135 double m_currentFrameRate; 136 136 InterruptionReason m_interruption { InterruptionReason::None }; 137 137 int m_framesToDropAtStartup { 0 }; -
trunk/Source/WebCore/platform/mediastream/mac/AVVideoCaptureSource.mm
r245217 r245296 284 284 } 285 285 286 void AVVideoCaptureSource::set SizeAndFrameRateWithPreset(IntSize requestedSize,double requestedFrameRate, RefPtr<VideoPreset> preset)287 { 288 ALWAYS_LOG_IF(loggerPtr(), LOGIDENTIFIER, SizeAndFrameRate { requestedSize.width(), requestedSize.height(), requestedFrameRate });286 void AVVideoCaptureSource::setFrameRateWithPreset(double requestedFrameRate, RefPtr<VideoPreset> preset) 287 { 288 ALWAYS_LOG_IF(loggerPtr(), LOGIDENTIFIER, SizeAndFrameRate { preset->size.width(), preset->size.height(), requestedFrameRate }); 289 289 290 290 auto* avPreset = preset ? downcast<AVVideoPreset>(preset.get()) : nullptr; 291 292 if (!m_session) { 293 m_pendingPreset = avPreset; 294 m_pendingSize = requestedSize; 295 m_pendingFrameRate = requestedFrameRate; 296 return; 297 } 298 299 m_pendingPreset = nullptr; 300 m_pendingFrameRate = 0; 301 291 m_currentPreset = avPreset; 292 m_currentFrameRate = requestedFrameRate; 293 294 setSessionSizeAndFrameRate(); 295 } 296 297 void AVVideoCaptureSource::setSessionSizeAndFrameRate() 298 { 299 if (!m_session) 300 return; 301 302 auto* avPreset = m_currentPreset.get(); 302 303 if (!avPreset) 303 304 return; … … 309 310 @try { 310 311 if ([device() lockForConfiguration:&error]) { 311 if (!m_currentPreset || ![m_currentPreset->format.get() isEqual:avPreset->format.get()]) {312 312 ALWAYS_LOG_IF(loggerPtr(), LOGIDENTIFIER, "setting preset to ", m_currentSize); 313 [device() setActiveFormat:avPreset->format.get()]; 313 314 314 315 #if PLATFORM(MAC) 315 316 317 318 319 320 321 322 #endif 323 } 324 auto* frameRateRange = frameDurationForFrameRate( requestedFrameRate);316 auto settingsDictionary = @{ 317 (__bridge NSString *)kCVPixelBufferPixelFormatTypeKey: @(avVideoCapturePixelBufferFormat()), 318 (__bridge NSString *)kCVPixelBufferWidthKey: @(avPreset->size.width()), 319 (__bridge NSString *)kCVPixelBufferHeightKey: @(avPreset->size.height()), 320 (__bridge NSString *)kCVPixelBufferIOSurfacePropertiesKey : @{ } 321 }; 322 [m_videoOutput setVideoSettings:settingsDictionary]; 323 #endif 324 325 auto* frameRateRange = frameDurationForFrameRate(m_currentFrameRate); 325 326 ASSERT(frameRateRange); 326 327 if (!frameRateRange) 327 328 return; 328 329 329 requestedFrameRate = clampTo(requestedFrameRate, frameRateRange.minFrameRate, frameRateRange.maxFrameRate);330 331 ALWAYS_LOG_IF(loggerPtr(), LOGIDENTIFIER, "setting frame rate to ", requestedFrameRate);332 [device() setActiveVideoMinFrameDuration: CMTimeMake(1, requestedFrameRate)];333 [device() setActiveVideoMaxFrameDuration: CMTimeMake(1, requestedFrameRate)];330 m_currentFrameRate = clampTo(m_currentFrameRate, frameRateRange.minFrameRate, frameRateRange.maxFrameRate); 331 332 ALWAYS_LOG_IF(loggerPtr(), LOGIDENTIFIER, "setting frame rate to ", m_currentFrameRate); 333 [device() setActiveVideoMinFrameDuration: CMTimeMake(1, m_currentFrameRate)]; 334 [device() setActiveVideoMaxFrameDuration: CMTimeMake(1, m_currentFrameRate)]; 334 335 335 336 [device() unlockForConfiguration]; … … 340 341 } 341 342 [m_session commitConfiguration]; 342 343 m_currentPreset = avPreset;344 343 345 344 ERROR_LOG_IF(error && loggerPtr(), LOGIDENTIFIER, [[error localizedDescription] UTF8String]); … … 449 448 [session() addOutput:m_videoOutput.get()]; 450 449 451 if (m_pendingPreset || m_pendingFrameRate) 452 setSizeAndFrameRateWithPreset(m_pendingSize, m_pendingFrameRate, m_pendingPreset); 450 setSessionSizeAndFrameRate(); 453 451 454 452 m_sensorOrientation = sensorOrientationFromVideoOutput(m_videoOutput.get()); -
trunk/Source/WebCore/platform/mock/MockRealtimeVideoSource.cpp
r242308 r245296 182 182 } 183 183 184 void MockRealtimeVideoSource::set SizeAndFrameRateWithPreset(IntSize,double, RefPtr<VideoPreset> preset)185 { 186 m_preset = preset;184 void MockRealtimeVideoSource::setFrameRateWithPreset(double, RefPtr<VideoPreset> preset) 185 { 186 m_preset = WTFMove(preset); 187 187 if (preset) 188 188 setIntrinsicSize(preset->size); -
trunk/Source/WebCore/platform/mock/MockRealtimeVideoSource.h
r239840 r245296 72 72 bool supportsSizeAndFrameRate(Optional<int> width, Optional<int> height, Optional<double>) final; 73 73 void setSizeAndFrameRate(Optional<int> width, Optional<int> height, Optional<double>) final; 74 void set SizeAndFrameRateWithPreset(IntSize,double, RefPtr<VideoPreset>) final;74 void setFrameRateWithPreset(double, RefPtr<VideoPreset>) final; 75 75 IntSize captureSize() const; 76 76
Note: See TracChangeset
for help on using the changeset viewer.