Method to find device's camera resolution iOS
Here is the a table of all tested camera sessionPreset`s on devices, that support iOS 9
+-----------------------+--------------+---------------------------------+---------------+| Device | Camera | AVCaptureSessionPreset | Resolution |+-----------------------+--------------+---------------------------------+---------------+| iPhone 4S | FRONT | | || | | AVCaptureSessionPresetPhoto | 640x480 || | | AVCaptureSessionPresetHigh | 640x480 || | | AVCaptureSessionPresetMedium | 480x360 || | | AVCaptureSessionPresetLow | 192x144 || | | AVCaptureSessionPreset640x480 | 640x480 || | | AVCaptureSessionPreset1280x720 | not supported || | | AVCaptureSessionPreset1920x1080 | not supported || | BACK | | || | | AVCaptureSessionPresetPhoto | 3264x2448 || | | AVCaptureSessionPresetHigh | 1920x1080 || | | AVCaptureSessionPresetMedium | 480x360 || | | AVCaptureSessionPresetLow | 192x144 || | | AVCaptureSessionPreset640x480 | 640x480 || | | AVCaptureSessionPreset1280x720 | 1280x720 || | | AVCaptureSessionPreset1920x1080 | 1920x1080 |+-----------------------+--------------+---------------------------------+---------------+| iPhone 5/5C/5S/6/6+ | | | || | FRONT | | || | | AVCaptureSessionPresetPhoto | 1280x960 || | | AVCaptureSessionPresetHigh | 1280x720 || | | AVCaptureSessionPresetMedium | 480x360 || | | AVCaptureSessionPresetLow | 192x144 || | | AVCaptureSessionPreset640x480 | 640x480 || | | AVCaptureSessionPreset1280x720 | 1280x720 || | | AVCaptureSessionPreset1920x1080 | not supported || | BACK | | || | | AVCaptureSessionPresetPhoto | 3264x2448 || | | AVCaptureSessionPresetHigh | 1920x1080 || | | AVCaptureSessionPresetMedium | 480x360 || | | AVCaptureSessionPresetLow | 192x144 || | | AVCaptureSessionPreset640x480 | 640x480 || | | AVCaptureSessionPreset1280x720 | 1280x720 || | | AVCaptureSessionPreset1920x1080 | 1920x1080 |+-----------------------+--------------+---------------------------------+---------------+| iPhone 6S/6S | | | || | FRONT camera | | || | | AVCaptureSessionPresetPhoto | 1280x960 || | | AVCaptureSessionPresetHigh | 1280x720 || | | AVCaptureSessionPresetMedium | 480x360 || | | AVCaptureSessionPresetLow | 192x144 || | | AVCaptureSessionPreset640x480 | 640x480 || | | AVCaptureSessionPreset1280x720 | 1280x720 || | | AVCaptureSessionPreset1920x1080 | not supported || | BACK camera | | || | | AVCaptureSessionPresetPhoto | 4032x3024 || | | AVCaptureSessionPresetHigh | 1920x1080 || | | AVCaptureSessionPresetMedium | 480x360 || | | AVCaptureSessionPresetLow | 192x144 || | | AVCaptureSessionPreset640x480 | 640x480 || | | AVCaptureSessionPreset1280x720 | 1280x720 || | | AVCaptureSessionPreset1920x1080 | 1920x1080 |+-----------------------+--------------+---------------------------------+---------------+| iPad 2 | | | || | FRONT | | || | | AVCaptureSessionPresetPhoto | 640x480 || | | AVCaptureSessionPresetHigh | 640x480 || | | AVCaptureSessionPresetMedium | 480x360 || | | AVCaptureSessionPresetLow | 192x144 || | | AVCaptureSessionPreset640x480 | 640x480 || | | AVCaptureSessionPreset1280x720 | not supported || | | AVCaptureSessionPreset1920x1080 | not supported || | BACK | | || | | AVCaptureSessionPresetPhoto | 960x720 || | | AVCaptureSessionPresetHigh | 1280x720 || | | AVCaptureSessionPresetMedium | 480x360 || | | AVCaptureSessionPresetLow | 192x144 || | | AVCaptureSessionPreset640x480 | 640x480 || | | AVCaptureSessionPreset1280x720 | 1280x720 || | | AVCaptureSessionPreset1920x1080 | not supported |+-----------------------+--------------+---------------------------------+---------------+| iPad 3 | | | || | FRONT | | || | | AVCaptureSessionPresetPhoto | 640x480 || | | AVCaptureSessionPresetHigh | 640x480 || | | AVCaptureSessionPresetMedium | 480x360 || | | AVCaptureSessionPresetLow | 192x144 || | | AVCaptureSessionPreset640x480 | 640x480 || | | AVCaptureSessionPreset1280x720 | not supported || | | AVCaptureSessionPreset1920x1080 | not supported || | BACK | | || | | AVCaptureSessionPresetPhoto | 2592x1936 || | | AVCaptureSessionPresetHigh | 1920x1080 || | | AVCaptureSessionPresetMedium | 480x360 || | | AVCaptureSessionPresetLow | 192x144 || | | AVCaptureSessionPreset640x480 | 640x480 || | | AVCaptureSessionPreset1280x720 | 1280x720 || | | AVCaptureSessionPreset1920x1080 | 1920x1080 |+-----------------------+--------------+---------------------------------+---------------+| iPad 4/Air | | | || iPad Mini 1/2/3 | | | || iPod 5G | | | || | FRONT | | || | | AVCaptureSessionPresetPhoto | 1280x960 || | | AVCaptureSessionPresetHigh | 1280x720 || | | AVCaptureSessionPresetMedium | 480x360 || | | AVCaptureSessionPresetLow | 192x144 || | | AVCaptureSessionPreset640x480 | 640x480 || | | AVCaptureSessionPreset1280x720 | 1280x720 || | | AVCaptureSessionPreset1920x1080 | not supported || | BACK | | || | | AVCaptureSessionPresetPhoto | 2592x1936 || | | AVCaptureSessionPresetHigh | 1920x1080 || | | AVCaptureSessionPresetMedium | 480x360 || | | AVCaptureSessionPresetLow | 192x144 || | | AVCaptureSessionPreset640x480 | 640x480 || | | AVCaptureSessionPreset1280x720 | 1280x720 || | | AVCaptureSessionPreset1920x1080 | 1920x1080 |+-----------------------+--------------+---------------------------------+---------------+| iPad Air 2 | | | || iPad Mini 4 | | | || iPad Pro | | | || | FRONT | | || | | AVCaptureSessionPresetPhoto | 1280x960 || | | AVCaptureSessionPresetHigh | 1280x720 || | | AVCaptureSessionPresetMedium | 480x360 || | | AVCaptureSessionPresetLow | 192x144 || | | AVCaptureSessionPreset640x480 | 640x480 || | | AVCaptureSessionPreset1280x720 | 1280x720 || | | AVCaptureSessionPreset1920x1080 | not supported || | BACK | | || | | AVCaptureSessionPresetPhoto | 3264x2448 || | | AVCaptureSessionPresetHigh | 1920x1080 || | | AVCaptureSessionPresetMedium | 480x360 || | | AVCaptureSessionPresetLow | 192x144 || | | AVCaptureSessionPreset640x480 | 640x480 || | | AVCaptureSessionPreset1280x720 | 1280x720 || | | AVCaptureSessionPreset1920x1080 | 1920x1080 |+-----------------------+--------------+---------------------------------+---------------+| iPod Touch 5 | | | || | FRONT | | || | | AVCaptureSessionPresetPhoto | 1280x960 || | | AVCaptureSessionPresetHigh | 1280x720 || | | AVCaptureSessionPresetMedium | 480x360 || | | AVCaptureSessionPresetLow | 192x144 || | | AVCaptureSessionPreset640x480 | 640x480 || | | AVCaptureSessionPreset1280x720 | 1280x720 || | | AVCaptureSessionPreset1920x1080 | not supported || | BACK | | || | | AVCaptureSessionPresetPhoto | 2592x1936 || | | AVCaptureSessionPresetHigh | 1920x1080 || | | AVCaptureSessionPresetMedium | 480x360 || | | AVCaptureSessionPresetLow | 192x144 || | | AVCaptureSessionPreset640x480 | 640x480 || | | AVCaptureSessionPreset1280x720 | 1280x720 || | | AVCaptureSessionPreset1920x1080 | 1920x1080 |+-----------------------+--------------+---------------------------------+---------------+| iPod Touch 6 | | | || | FRONT | | || | | AVCaptureSessionPresetPhoto | 1280x960 || | | AVCaptureSessionPresetHigh | 1280x720 || | | AVCaptureSessionPresetMedium | 480x360 || | | AVCaptureSessionPresetLow | 192x144 || | | AVCaptureSessionPreset640x480 | 640x480 || | | AVCaptureSessionPreset1280x720 | 1280x720 || | | AVCaptureSessionPreset1920x1080 | not supported || | BACK | | || | | AVCaptureSessionPresetPhoto | 3264x2448 || | | AVCaptureSessionPresetHigh | 1920x1080 || | | AVCaptureSessionPresetMedium | 480x360 || | | AVCaptureSessionPresetLow | 192x144 || | | AVCaptureSessionPreset640x480 | 640x480 || | | AVCaptureSessionPreset1280x720 | 1280x720 || | | AVCaptureSessionPreset1920x1080 | 1920x1080 |+-----------------------+--------------+---------------------------------+---------------+
CODE
+ (NSDictionary*) cameraResolutions { NSString* deviceModel = [self deviceModel]; // iPhone 4S if ([deviceModel isEqualToString:@"iPhone4,1"]) { NSString* lFrontCam = @"640x480,480x360,192x144"; NSString* lBackCam = @"3264x2448,1920x1080,1280x720,640x480,480x360,192x144"; NSDictionary* lCamResolutions = @{@"front":lFrontCam, @"back":lBackCam}; return lCamResolutions; } // iPhone 5/5C/5S/6/6+/iPod 6 else if ([deviceModel isEqualToString:@"iPhone5,1"] || [deviceModel isEqualToString:@"iPhone5,2"] || [deviceModel isEqualToString:@"iPhone5,3"] || [deviceModel isEqualToString:@"iPhone5,4"] || [deviceModel isEqualToString:@"iPhone6,1"] || [deviceModel isEqualToString:@"iPhone6,2"] || [deviceModel isEqualToString:@"iPhone7,1"] || [deviceModel isEqualToString:@"iPhone7,2"] || [deviceModel isEqualToString:@"iPod7,1"]) { NSString* lFrontCam = @"1280x960,1280x720,640x480,480x360,192x144"; NSString* lBackCam = @"3264x2448,1920x1080,1280x720,640x480,480x360,192x144"; NSDictionary* lCamResolutions = @{@"front":lFrontCam, @"back":lBackCam}; return lCamResolutions; } // iPhone 6S/6S+ else if ([deviceModel isEqualToString:@"iPhone8,1"] || [deviceModel isEqualToString:@"iPhone8,2"]) { NSString* lFrontCam = @"1280x960,1280x720,640x480,480x360,192x144"; NSString* lBackCam = @"4032x3024,1920x1080,1280x720,640x480,480x360,192x144"; NSDictionary* lCamResolutions = @{@"front":lFrontCam, @"back":lBackCam}; return lCamResolutions; } // iPad 2 else if ([deviceModel isEqualToString:@"iPad2,1"] || [deviceModel isEqualToString:@"iPad2,2"] || [deviceModel isEqualToString:@"iPad2,3"] || [deviceModel isEqualToString:@"iPad2,4"]) { NSString* lFrontCam = @"640x480,480x360,192x144"; NSString* lBackCam = @"1280x720,960x720,480x360,192x144,640x480"; NSDictionary* lCamResolutions = @{@"front":lFrontCam, @"back":lBackCam}; return lCamResolutions; } // iPad 3 else if ([deviceModel isEqualToString:@"iPad3,1"] || [deviceModel isEqualToString:@"iPad3,2"] || [deviceModel isEqualToString:@"iPad3,3"]) { NSString* lFrontCam = @"640x480,480x360,192x144"; NSString* lBackCam = @"2592x1936,1920x1080,1280x720,640x480,480x360,192x144"; NSDictionary* lCamResolutions = @{@"front":lFrontCam, @"back":lBackCam}; return lCamResolutions; } // iPad 4/Air/Mini/Mini 2/Mini 3/iPod 5G else if ([deviceModel isEqualToString:@"iPad3,4"] || [deviceModel isEqualToString:@"iPad3,5"] || [deviceModel isEqualToString:@"iPad3,6"] || [deviceModel isEqualToString:@"iPad4,1"] || [deviceModel isEqualToString:@"iPad4,2"] || [deviceModel isEqualToString:@"iPad4,3"] || [deviceModel isEqualToString:@"iPad4,4"] || [deviceModel isEqualToString:@"iPad4,5"] || [deviceModel isEqualToString:@"iPad4,6"] || [deviceModel isEqualToString:@"iPad4,7"] || [deviceModel isEqualToString:@"iPad4,8"] || [deviceModel isEqualToString:@"iPod5,1"]) { NSString* lFrontCam = @"1280x960,1280x720,640x480,480x360,192x144"; NSString* lBackCam = @"2592x1936,1920x1080,1280x720,640x480,480x360,192x144"; NSDictionary* lCamResolutions = @{@"front":lFrontCam, @"back":lBackCam}; return lCamResolutions; } // iPad Air 2/Mini 4/Pro else if ([deviceModel isEqualToString:@"iPad5,3"] || [deviceModel isEqualToString:@"iPad5,4"]) { NSString* lFrontCam = @"1280x960,1280x720,640x480,480x360,192x144"; NSString* lBackCam = @"3264x2448,1920x1080,1280x720,640x480,480x360,192x144"; NSDictionary* lCamResolutions = @{@"front":lFrontCam, @"back":lBackCam}; return lCamResolutions; } return nil;}
With the function below, you can programmatically get the resolution from activeFormat
before capture begins, though not before adding inputs and outputs:https://developer.apple.com/library/ios/documentation/AVFoundation/Reference/AVCaptureDevice_Class/index.html#//apple_ref/occ/instp/AVCaptureDevice/activeFormat
private func getCaptureResolution() -> CGSize { // Define default resolution var resolution = CGSize(width: 0, height: 0) // Get cur video device let curVideoDevice = useBackCamera ? backCameraDevice : frontCameraDevice // Set if video portrait orientation let portraitOrientation = orientation == .Portrait || orientation == .PortraitUpsideDown // Get video dimensions if let formatDescription = curVideoDevice?.activeFormat.formatDescription { let dimensions = CMVideoFormatDescriptionGetDimensions(formatDescription) resolution = CGSize(width: CGFloat(dimensions.width), height: CGFloat(dimensions.height)) if portraitOrientation { resolution = CGSize(width: resolution.height, height: resolution.width) } } // Return resolution return resolution}
There's probably no way to directly get the camera resolution programmatically before capturing an image.
Apple provides a table for various devices and presets: