From f7071861852be84e142e6fe6d22f08f8421cd2b3 Mon Sep 17 00:00:00 2001 From: Anders Carlsson Date: Wed, 10 Jan 2018 16:47:05 +0100 Subject: [PATCH] Reland "Reland "Add completion callbacks to RTCCameraVideoCapturer start/stop operations"" MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This is a reland of 24e7a593d576d6eea8512f42f08d6c9c7003e76e Original change's description: > Reland "Add completion callbacks to RTCCameraVideoCapturer start/stop operations" > > This is a reland of e23a9e8f418ad758bc1be5b53184b69ad1dab1c2 > Original change's description: > > Add completion callbacks to RTCCameraVideoCapturer start/stop operations > > > > Bug: webrtc:8696 > > Change-Id: I327ce11632fd0c71e28411d260094e87ede6b6b6 > > Reviewed-on: https://webrtc-review.googlesource.com/37021 > > Reviewed-by: Kári Helgason > > Reviewed-by: Anders Carlsson > > Commit-Queue: Anders Carlsson > > Cr-Commit-Position: refs/heads/master@{#21546} > > Bug: webrtc:8696 > Change-Id: I48b4d140d870c9924ef0d76f4d282ff13951e083 > Reviewed-on: https://webrtc-review.googlesource.com/38800 > Reviewed-by: Kári Helgason > Commit-Queue: Anders Carlsson > Cr-Commit-Position: refs/heads/master@{#21592} Bug: webrtc:8696 Change-Id: I281dee9b1df2efcb9c067da9dd9fea3c8fe35c3a Reviewed-on: https://webrtc-review.googlesource.com/39281 Reviewed-by: Kári Helgason Commit-Queue: Kári Helgason Cr-Commit-Position: refs/heads/master@{#21602} --- .../PeerConnection/RTCCameraVideoCapturer.m | 22 ++++++++++++++++++- .../Headers/WebRTC/RTCCameraVideoCapturer.h | 10 ++++++++- 2 files changed, 30 insertions(+), 2 deletions(-) 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;