From 10db597e7626005f33849c1ea22dc134a4229d44 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?K=C3=A1ri=20Tristan=20Helgason?= Date: Wed, 13 Mar 2019 11:18:44 +0100 Subject: [PATCH] Support different capture resolutions in new video_loopback. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Bug: webrtc:10391 Change-Id: I0732dade47d18c4d8c65eef2a4011b87caf2e7c5 Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/126800 Reviewed-by: Niels Moller Reviewed-by: Anders Carlsson Commit-Queue: Kári Helgason Cr-Commit-Position: refs/heads/master@{#27131} --- test/mac_capturer.mm | 24 ++++++++++++++++++++++-- 1 file changed, 22 insertions(+), 2 deletions(-) diff --git a/test/mac_capturer.mm b/test/mac_capturer.mm index 004900a42e..8d50a804f9 100644 --- a/test/mac_capturer.mm +++ b/test/mac_capturer.mm @@ -35,6 +35,27 @@ @end +namespace { + +AVCaptureDeviceFormat *SelectClosestFormat(AVCaptureDevice *device, size_t width, size_t height) { + NSArray *formats = + [RTCCameraVideoCapturer supportedFormatsForDevice:device]; + AVCaptureDeviceFormat *selectedFormat = nil; + int currentDiff = INT_MAX; + for (AVCaptureDeviceFormat *format in formats) { + CMVideoDimensions dimension = CMVideoFormatDescriptionGetDimensions(format.formatDescription); + int diff = + std::abs((int64_t)width - dimension.width) + std::abs((int64_t)height - dimension.height); + if (diff < currentDiff) { + selectedFormat = format; + currentDiff = diff; + } + } + return selectedFormat; +} + +} // namespace + namespace webrtc { namespace test { @@ -51,8 +72,7 @@ MacCapturer::MacCapturer(size_t width, AVCaptureDevice *device = [[RTCCameraVideoCapturer captureDevices] objectAtIndex:capture_device_index]; - AVCaptureDeviceFormat *format = - [[RTCCameraVideoCapturer supportedFormatsForDevice:device] objectAtIndex:0]; + AVCaptureDeviceFormat *format = SelectClosestFormat(device, width, height); [capturer startCaptureWithDevice:device format:format fps:target_fps]; }