diff --git a/sdk/objc/Framework/Classes/PeerConnection/RTCCameraVideoCapturer.m b/sdk/objc/Framework/Classes/PeerConnection/RTCCameraVideoCapturer.m index 7ee319f6f6..89060efa58 100644 --- a/sdk/objc/Framework/Classes/PeerConnection/RTCCameraVideoCapturer.m +++ b/sdk/objc/Framework/Classes/PeerConnection/RTCCameraVideoCapturer.m @@ -116,6 +116,17 @@ const int64_t kNanosecondsPerSecond = 1000000000; - (void)startCaptureWithDevice:(AVCaptureDevice *)device format:(AVCaptureDeviceFormat *)format fps:(NSInteger)fps { + [self startCaptureWithDevice:device format:format fps:fps completionHandler:nil]; +} + +- (void)stopCapture { + [self stopCaptureWithCompletionHandler:nil]; +} + +- (void)startCaptureWithDevice:(AVCaptureDevice *)device + format:(AVCaptureDeviceFormat *)format + fps:(NSInteger)fps + completionHandler:(nullable void (^)(NSError *))completionHandler { _willBeRunning = YES; [RTCDispatcher dispatchAsyncOnType:RTCDispatcherTypeCaptureSession @@ -132,6 +143,9 @@ const int64_t kNanosecondsPerSecond = 1000000000; if (![_currentDevice lockForConfiguration:&error]) { RTCLogError( @"Failed to lock device %@. Error: %@", _currentDevice, error.userInfo); + if (completionHandler) { + completionHandler(error); + } return; } [self reconfigureCaptureSessionInput]; @@ -141,10 +155,13 @@ const int64_t kNanosecondsPerSecond = 1000000000; [_captureSession startRunning]; [_currentDevice unlockForConfiguration]; _isRunning = YES; + if (completionHandler) { + completionHandler(nil); + } }]; } -- (void)stopCapture { +- (void)stopCaptureWithCompletionHandler:(nullable void (^)())completionHandler { _willBeRunning = NO; [RTCDispatcher dispatchAsyncOnType:RTCDispatcherTypeCaptureSession @@ -160,6 +177,9 @@ const int64_t kNanosecondsPerSecond = 1000000000; [[UIDevice currentDevice] endGeneratingDeviceOrientationNotifications]; #endif _isRunning = NO; + if (completionHandler) { + completionHandler(); + } }]; } diff --git a/sdk/objc/Framework/Headers/WebRTC/RTCCameraVideoCapturer.h b/sdk/objc/Framework/Headers/WebRTC/RTCCameraVideoCapturer.h index 8f0f3770b0..31b405c542 100644 --- a/sdk/objc/Framework/Headers/WebRTC/RTCCameraVideoCapturer.h +++ b/sdk/objc/Framework/Headers/WebRTC/RTCCameraVideoCapturer.h @@ -32,10 +32,18 @@ RTC_EXPORT // Returns the most efficient supported output pixel format for this capturer. - (FourCharCode)preferredOutputPixelFormat; -// Starts and stops the capture session asynchronously. +// Starts the capture session asynchronously and notifies callback on completion. // The device will capture video in the format given in the `format` parameter. If the pixel format // in `format` is supported by the WebRTC pipeline, the same pixel format will be used for the // output. Otherwise, the format returned by `preferredOutputPixelFormat` will be used. +- (void)startCaptureWithDevice:(AVCaptureDevice *)device + format:(AVCaptureDeviceFormat *)format + fps:(NSInteger)fps + completionHandler:(nullable void (^)(NSError *))completionHandler; +// Stops the capture session asynchronously and notifies callback on completion. +- (void)stopCaptureWithCompletionHandler:(nullable void (^)())completionHandler; + +// Starts the capture session asynchronously. - (void)startCaptureWithDevice:(AVCaptureDevice *)device format:(AVCaptureDeviceFormat *)format fps:(NSInteger)fps;