blob: 0814ecc6c544f547001c1f2525772bf521ab46d6 [file] [log] [blame]
jtteh61b0ed02017-07-25 09:35:55 -07001/*
2 * Copyright 2017 The WebRTC project authors. All Rights Reserved.
3 *
4 * Use of this source code is governed by a BSD-style license
5 * that can be found in the LICENSE file in the root of the source
6 * tree. An additional intellectual property rights grant can be found
7 * in the file PATENTS. All contributing project authors may
8 * be found in the AUTHORS file in the root of the source tree.
9 */
10
jtteh3b673c62017-07-25 15:48:39 -070011#import "AVCaptureSession+DevicePosition.h"
jtteh61b0ed02017-07-25 09:35:55 -070012
13BOOL CFStringContainsString(CFStringRef theString, CFStringRef stringToFind) {
14 return CFStringFindWithOptions(theString,
15 stringToFind,
16 CFRangeMake(0, CFStringGetLength(theString)),
17 kCFCompareCaseInsensitive,
18 nil);
19}
20
jtteh3b673c62017-07-25 15:48:39 -070021@implementation AVCaptureSession (DevicePosition)
jtteh61b0ed02017-07-25 09:35:55 -070022
23+ (AVCaptureDevicePosition)devicePositionForSampleBuffer:(CMSampleBufferRef)sampleBuffer {
24 // Check the image's EXIF for the camera the image came from.
25 AVCaptureDevicePosition cameraPosition = AVCaptureDevicePositionUnspecified;
26 CFDictionaryRef attachments = CMCopyDictionaryOfAttachments(
27 kCFAllocatorDefault, sampleBuffer, kCMAttachmentMode_ShouldPropagate);
28 if (attachments) {
29 int size = CFDictionaryGetCount(attachments);
30 if (size > 0) {
31 CFDictionaryRef cfExifDictVal = nil;
32 if (CFDictionaryGetValueIfPresent(
33 attachments, (const void *)CFSTR("{Exif}"), (const void **)&cfExifDictVal)) {
34 CFStringRef cfLensModelStrVal;
35 if (CFDictionaryGetValueIfPresent(cfExifDictVal,
36 (const void *)CFSTR("LensModel"),
37 (const void **)&cfLensModelStrVal)) {
38 if (CFStringContainsString(cfLensModelStrVal, CFSTR("front"))) {
39 cameraPosition = AVCaptureDevicePositionFront;
40 } else if (CFStringContainsString(cfLensModelStrVal, CFSTR("back"))) {
41 cameraPosition = AVCaptureDevicePositionBack;
42 }
43 }
44 }
45 }
46 CFRelease(attachments);
47 }
48 return cameraPosition;
49}
50
51@end