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 <kthelgason@webrtc.org>
> Reviewed-by: Anders Carlsson <andersc@webrtc.org>
> Commit-Queue: Anders Carlsson <andersc@webrtc.org>
> 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 <kthelgason@webrtc.org>
Commit-Queue: Anders Carlsson <andersc@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#21592}
This commit is contained in:
Anders Carlsson
2018-01-10 16:47:05 +01:00
committed by Commit Bot
parent 75baa498fa
commit 24e7a593d5
2 changed files with 30 additions and 2 deletions

View File

@ -116,6 +116,17 @@ const int64_t kNanosecondsPerSecond = 1000000000;
- (void)startCaptureWithDevice:(AVCaptureDevice *)device - (void)startCaptureWithDevice:(AVCaptureDevice *)device
format:(AVCaptureDeviceFormat *)format format:(AVCaptureDeviceFormat *)format
fps:(NSInteger)fps { 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; _willBeRunning = YES;
[RTCDispatcher [RTCDispatcher
dispatchAsyncOnType:RTCDispatcherTypeCaptureSession dispatchAsyncOnType:RTCDispatcherTypeCaptureSession
@ -132,6 +143,9 @@ const int64_t kNanosecondsPerSecond = 1000000000;
if (![_currentDevice lockForConfiguration:&error]) { if (![_currentDevice lockForConfiguration:&error]) {
RTCLogError( RTCLogError(
@"Failed to lock device %@. Error: %@", _currentDevice, error.userInfo); @"Failed to lock device %@. Error: %@", _currentDevice, error.userInfo);
if (completionHandler) {
completionHandler(error);
}
return; return;
} }
[self reconfigureCaptureSessionInput]; [self reconfigureCaptureSessionInput];
@ -141,10 +155,13 @@ const int64_t kNanosecondsPerSecond = 1000000000;
[_captureSession startRunning]; [_captureSession startRunning];
[_currentDevice unlockForConfiguration]; [_currentDevice unlockForConfiguration];
_isRunning = YES; _isRunning = YES;
if (completionHandler) {
completionHandler(nil);
}
}]; }];
} }
- (void)stopCapture { - (void)stopCaptureWithCompletionHandler:(nullable void (^)())completionHandler {
_willBeRunning = NO; _willBeRunning = NO;
[RTCDispatcher [RTCDispatcher
dispatchAsyncOnType:RTCDispatcherTypeCaptureSession dispatchAsyncOnType:RTCDispatcherTypeCaptureSession
@ -160,6 +177,9 @@ const int64_t kNanosecondsPerSecond = 1000000000;
[[UIDevice currentDevice] endGeneratingDeviceOrientationNotifications]; [[UIDevice currentDevice] endGeneratingDeviceOrientationNotifications];
#endif #endif
_isRunning = NO; _isRunning = NO;
if (completionHandler) {
completionHandler();
}
}]; }];
} }

View File

@ -32,10 +32,18 @@ RTC_EXPORT
// Returns the most efficient supported output pixel format for this capturer. // Returns the most efficient supported output pixel format for this capturer.
- (FourCharCode)preferredOutputPixelFormat; - (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 // 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 // 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. // 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 - (void)startCaptureWithDevice:(AVCaptureDevice *)device
format:(AVCaptureDeviceFormat *)format format:(AVCaptureDeviceFormat *)format
fps:(NSInteger)fps; fps:(NSInteger)fps;