text: /*
   *  Copyright 2017 The WebRTC project authors. All Rights Reserved.
   *
   *  Use of this source code is governed by a BSD-style license
   *  that can be found in the LICENSE file in the root of the source
   *  tree. An additional intellectual property rights grant can be found
   *  in the file PATENTS.  All contributing project authors may
   *  be found in the AUTHORS file in the root of the source tree.
   */
  
  #import <AVFoundation/AVFoundation.h>
  #import <Foundation/Foundation.h>
  #import <UIKit/UIKit.h>
  
  #import "RTCMacros.h"
  #import "RTCVideoCapturer.h"
  NS_ASSUME_NONNULL_BEGIN
  
  RTC_OBJC_EXPORT
  // Camera capture that implements RTCVideoCapturer. Delivers frames to a RTCVideoCapturerDelegate
  // (usually RTCVideoSource).
  NS_EXTENSION_UNAVAILABLE_IOS("Camera not available in app extensions.")
  @interface RTCCameraVideoCapturer : RTCVideoCapturer
  
  // Capture session that is used for capturing. Valid from initialization to dealloc.
  @property(readonly, nonatomic) AVCaptureSession *captureSession;
  @property(nonatomic, assign) UIDeviceOrientation forceOrientation;
  // Returns list of available capture devices that support video capture.
  + (NSArray<AVCaptureDevice *> *)captureDevices;
  // Returns list of formats that are supported by this class for this device.
  + (NSArray<AVCaptureDeviceFormat *> *)supportedFormatsForDevice:(AVCaptureDevice *)device;
  
  // Returns the most efficient supported output pixel format for this capturer.
  - (FourCharCode)preferredOutputPixelFormat;
  
  // 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 (^)(void))completionHandler;
  
  // Starts the capture session asynchronously.
  - (void)startCaptureWithDevice:(AVCaptureDevice *)device
                          format:(AVCaptureDeviceFormat *)format
                             fps:(NSInteger)fps;
  // Stops the capture session asynchronously.
  - (void)stopCapture;
  
  @end
  
  NS_ASSUME_NONNULL_END
  