From cee5141eb0b77739dad0d3f0707425f71ee472fe Mon Sep 17 00:00:00 2001 From: sakal Date: Wed, 3 May 2017 03:50:17 -0700 Subject: [PATCH] Address tkchin's comments on RTCCameraVideoCapturer. BUG=webrtc:7177 Review-Url: https://codereview.webrtc.org/2800853006 Cr-Commit-Position: refs/heads/master@{#17986} --- .../objc/Framework/Classes/RTCCameraVideoCapturer.m | 6 ++++++ webrtc/sdk/objc/Framework/Classes/RTCDispatcher.m | 11 +++++++++++ .../Framework/Headers/WebRTC/RTCCameraVideoCapturer.h | 6 +++--- .../sdk/objc/Framework/Headers/WebRTC/RTCDispatcher.h | 5 +++++ 4 files changed, 25 insertions(+), 3 deletions(-) diff --git a/webrtc/sdk/objc/Framework/Classes/RTCCameraVideoCapturer.m b/webrtc/sdk/objc/Framework/Classes/RTCCameraVideoCapturer.m index 16ddc13c9e..9a0b40f081 100644 --- a/webrtc/sdk/objc/Framework/Classes/RTCCameraVideoCapturer.m +++ b/webrtc/sdk/objc/Framework/Classes/RTCCameraVideoCapturer.m @@ -361,6 +361,8 @@ static inline BOOL IsMediaSubTypeSupported(FourCharCode mediaSubType) { #pragma mark - Private, called inside capture queue - (void)updateDeviceCaptureFormat:(AVCaptureDeviceFormat *)format fps:(int)fps { + NSAssert([RTCDispatcher isOnQueueForType:RTCDispatcherTypeCaptureSession], + @"updateDeviceCaptureFormat must be called on the capture queue."); @try { _currentDevice.activeFormat = format; _currentDevice.activeVideoMinFrameDuration = CMTimeMake(1, fps); @@ -371,6 +373,8 @@ static inline BOOL IsMediaSubTypeSupported(FourCharCode mediaSubType) { } - (void)reconfigureCaptureSessionInput { + NSAssert([RTCDispatcher isOnQueueForType:RTCDispatcherTypeCaptureSession], + @"reconfigureCaptureSessionInput must be called on the capture queue."); NSError *error = nil; AVCaptureDeviceInput *input = [AVCaptureDeviceInput deviceInputWithDevice:_currentDevice error:&error]; @@ -391,6 +395,8 @@ static inline BOOL IsMediaSubTypeSupported(FourCharCode mediaSubType) { } - (void)updateOrientation { + NSAssert([RTCDispatcher isOnQueueForType:RTCDispatcherTypeCaptureSession], + @"updateOrientation must be called on the capture queue."); #if TARGET_OS_IPHONE BOOL usingFrontCamera = _currentDevice.position == AVCaptureDevicePositionFront; switch ([UIDevice currentDevice].orientation) { diff --git a/webrtc/sdk/objc/Framework/Classes/RTCDispatcher.m b/webrtc/sdk/objc/Framework/Classes/RTCDispatcher.m index 94176ac6d8..530e51a3c9 100644 --- a/webrtc/sdk/objc/Framework/Classes/RTCDispatcher.m +++ b/webrtc/sdk/objc/Framework/Classes/RTCDispatcher.m @@ -33,6 +33,17 @@ static dispatch_queue_t kCaptureSessionQueue = nil; dispatch_async(queue, block); } ++ (BOOL)isOnQueueForType:(RTCDispatcherQueueType)dispatchType { + dispatch_queue_t targetQueue = [self dispatchQueueForType:dispatchType]; + const char* targetLabel = dispatch_queue_get_label(targetQueue); + const char* currentLabel = dispatch_queue_get_label(DISPATCH_CURRENT_QUEUE_LABEL); + + NSAssert(strlen(targetLabel) > 0, @"Label is required for the target queue."); + NSAssert(strlen(currentLabel) > 0, @"Label is required for the current queue."); + + return strcmp(targetLabel, currentLabel) == 0; +} + #pragma mark - Private + (dispatch_queue_t)dispatchQueueForType:(RTCDispatcherQueueType)dispatchType { diff --git a/webrtc/sdk/objc/Framework/Headers/WebRTC/RTCCameraVideoCapturer.h b/webrtc/sdk/objc/Framework/Headers/WebRTC/RTCCameraVideoCapturer.h index 3a6cf0e558..6eb6a9dec3 100644 --- a/webrtc/sdk/objc/Framework/Headers/WebRTC/RTCCameraVideoCapturer.h +++ b/webrtc/sdk/objc/Framework/Headers/WebRTC/RTCCameraVideoCapturer.h @@ -20,6 +20,9 @@ RTC_EXPORT // (usually RTCVideoSource). @interface RTCCameraVideoCapturer : RTCVideoCapturer +// Capture session that is used for capturing. Valid from initialization to dealloc. +@property(readonly, nonatomic) AVCaptureSession *captureSession; + // Returns list of available capture devices that support video capture. + (NSArray *)captureDevices; // Returns list of formats that are supported by this class for this device. @@ -32,9 +35,6 @@ RTC_EXPORT // Stops the capture session asynchronously. - (void)stopCapture; -// Capture session that is used for capturing. Valid from initialization to dealloc. -@property(readonly, nonatomic) AVCaptureSession *captureSession; - @end NS_ASSUME_NONNULL_END diff --git a/webrtc/sdk/objc/Framework/Headers/WebRTC/RTCDispatcher.h b/webrtc/sdk/objc/Framework/Headers/WebRTC/RTCDispatcher.h index 328beaf872..3dddead60e 100644 --- a/webrtc/sdk/objc/Framework/Headers/WebRTC/RTCDispatcher.h +++ b/webrtc/sdk/objc/Framework/Headers/WebRTC/RTCDispatcher.h @@ -37,4 +37,9 @@ RTC_EXPORT + (void)dispatchAsyncOnType:(RTCDispatcherQueueType)dispatchType block:(dispatch_block_t)block; +/** Returns YES if run on queue for the dispatchType otherwise NO. + * Useful for asserting that a method is run on a correct queue. + */ ++ (BOOL)isOnQueueForType:(RTCDispatcherQueueType)dispatchType; + @end