Add method on AVFoundation capturer to adapt output format.

This CL makes a method available on the AVFoundationVideoCapturer
that adapts the output format of captured video to the specified
width and height.

BUG=webrtc:6753

Review-Url: https://codereview.webrtc.org/2528493004
Cr-Commit-Position: refs/heads/master@{#15351}
This commit is contained in:
kthelgason
2016-12-01 01:36:16 -08:00
committed by Commit bot
parent dd40702357
commit 2bc324cc5a
4 changed files with 25 additions and 0 deletions

View File

@ -32,6 +32,12 @@
return [super initWithNativeVideoSource:source]; return [super initWithNativeVideoSource:source];
} }
- (void)adaptOutputFormatToWidth:(int)width
height:(int)height
fps:(int)fps {
self.capturer->AdaptOutputFormat(width, height, fps);
}
- (BOOL)canUseBackCamera { - (BOOL)canUseBackCamera {
return self.capturer->CanUseBackCamera(); return self.capturer->CanUseBackCamera();
} }

View File

@ -58,6 +58,10 @@ class AVFoundationVideoCapturer : public cricket::VideoCapturer {
void CaptureSampleBuffer(CMSampleBufferRef sample_buffer, void CaptureSampleBuffer(CMSampleBufferRef sample_buffer,
webrtc::VideoRotation rotation); webrtc::VideoRotation rotation);
// Called to adjust the size of output frames to supplied |width| and
// |height|. Also drops frames to make the output match |fps|.
void AdaptOutputFormat(int width, int height, int fps);
private: private:
RTCAVFoundationVideoCapturerInternal *_capturer; RTCAVFoundationVideoCapturerInternal *_capturer;
webrtc::I420BufferPool _buffer_pool; webrtc::I420BufferPool _buffer_pool;

View File

@ -113,6 +113,11 @@ bool AVFoundationVideoCapturer::GetUseBackCamera() const {
return _capturer.useBackCamera; return _capturer.useBackCamera;
} }
void AVFoundationVideoCapturer::AdaptOutputFormat(int width, int height, int fps) {
cricket::VideoFormat format(width, height, cricket::VideoFormat::FpsToInterval(fps), 0);
video_adapter()->OnOutputFormatRequest(format);
}
void AVFoundationVideoCapturer::CaptureSampleBuffer( void AVFoundationVideoCapturer::CaptureSampleBuffer(
CMSampleBufferRef sample_buffer, VideoRotation rotation) { CMSampleBufferRef sample_buffer, VideoRotation rotation) {
if (CMSampleBufferGetNumSamples(sample_buffer) != 1 || if (CMSampleBufferGetNumSamples(sample_buffer) != 1 ||

View File

@ -29,6 +29,16 @@ RTC_EXPORT
- (instancetype)init NS_UNAVAILABLE; - (instancetype)init NS_UNAVAILABLE;
/**
* Calling this function will cause frames to be scaled down to the
* requested resolution. Also, frames will be cropped to match the
* requested aspect ratio, and frames will be dropped to match the
* requested fps. The requested aspect ratio is orientation agnostic and
* will be adjusted to maintain the input orientation, so it doesn't
* matter if e.g. 1280x720 or 720x1280 is requested.
*/
- (void)adaptOutputFormatToWidth:(int)width height:(int)height fps:(int)fps;
/** Returns whether rear-facing camera is available for use. */ /** Returns whether rear-facing camera is available for use. */
@property(nonatomic, readonly) BOOL canUseBackCamera; @property(nonatomic, readonly) BOOL canUseBackCamera;