ios开关相机前后分辨率已更改AVCaptureSessionPresetHigh
我使用的是GPUImage库,我的前置摄像头会话预设为AVCaptureSessionPresetPhoto,后置摄像头为AVCaptureSessionPresetHighios开关相机前后分辨率已更改AVCaptureSessionPresetHigh,ios,camera,gpuimage,Ios,Camera,Gpuimage,我使用的是GPUImage库,我的前置摄像头会话预设为AVCaptureSessionPresetPhoto,后置摄像头为AVCaptureSessionPresetHigh if (self.isFrontFacingCameraPresent) { [self setCaptureSessionPreset: AVCaptureSessionPresetHigh]; } else { [self setCaptureSessionPreset:AVCaptureSession
if (self.isFrontFacingCameraPresent) {
[self setCaptureSessionPreset: AVCaptureSessionPresetHigh];
} else {
[self setCaptureSessionPreset:AVCaptureSessionPresetPhoto];
}
[self rotateCamera];
- (void)captureOutput:(AVCaptureOutput *)captureOutput didOutputSampleBuffer:(CMSampleBufferRef)sampleBuffer fromConnection:(AVCaptureConnection *)connection
已获取宽度和高度:
CVImageBufferRef cameraFrame = CMSampleBufferGetImageBuffer(sampleBuffer);
int bufferWidth = (int) CVPixelBufferGetWidth(cameraFrame);
int bufferHeight = (int) CVPixelBufferGetHeight(cameraFrame);
缓冲区的高度是720,我不知道为什么更换前后摄像头时,高度从960变为720!可能是苹果的错误?我解决了这个问题,通过更改rotateCamera函数,我重写了一个用于在前后摄像头之间切换的函数:
- (void)switchCameraFrontAndBack {
NSError *error;
AVCaptureDeviceInput *newVideoInput;
AVCaptureDevicePosition currentCameraPosition = self.cameraPosition;
if (currentCameraPosition == AVCaptureDevicePositionBack)
{
currentCameraPosition = AVCaptureDevicePositionFront;
}
else
{
currentCameraPosition = AVCaptureDevicePositionBack;
}
AVCaptureDevice *backFacingCamera = nil;
NSArray *devices = [AVCaptureDevice devicesWithMediaType:AVMediaTypeVideo];
for (AVCaptureDevice *device in devices)
{
if ([device position] == currentCameraPosition)
{
backFacingCamera = device;
}
}
newVideoInput = [[AVCaptureDeviceInput alloc] initWithDevice:backFacingCamera error:&error];
if (newVideoInput != nil)
{
[_captureSession beginConfiguration];
[_captureSession removeInput:videoInput];
[self configSessionPreset:currentCameraPosition];
if ([_captureSession canAddInput:newVideoInput])
{
[_captureSession addInput:newVideoInput];
videoInput = newVideoInput;
}
else
{
[_captureSession addInput:videoInput];
}
[_captureSession commitConfiguration];
}
_inputCamera = backFacingCamera;
[self setOutputImageOrientation:self.outputImageOrientation];
}
- (void)configSessionPreset:(AVCaptureDevicePosition)currentPosition {
if (currentPosition == AVCaptureDevicePositionBack) {
if (WIDTH <= Iphone4SWidth) {
if ([self.captureSession canSetSessionPreset:AVCaptureSessionPreset1280x720]) {
[self setCaptureSessionPreset:AVCaptureSessionPreset1280x720];
} else if ([self.captureSession canSetSessionPreset:AVCaptureSessionPreset1920x1080]) {
[self setCaptureSessionPreset:AVCaptureSessionPreset1920x1080];
}
} else {
if ([self.captureSession canSetSessionPreset:AVCaptureSessionPreset1920x1080]) {
[self setCaptureSessionPreset:AVCaptureSessionPreset1920x1080];
} else {
[self setCaptureSessionPreset: AVCaptureSessionPresetHigh];
}
}
} else {
[self setCaptureSessionPreset:AVCaptureSessionPresetPhoto];
}
}
-(无效)前后切换摄像头{
n错误*错误;
AVCaptureDeviceInput*新视频输入;
AVCaptureDevicePosition currentCameraPosition=self.cameraPosition;
if(currentCameraPosition==AVCaptureDevicePositionBack)
{
currentCameraPosition=AVCaptureDevicePositionFront;
}
其他的
{
currentCameraPosition=AVCaptureDevicePositionBack;
}
AVCaptureDevice*背面摄像头=零;
NSArray*设备=[AVCaptureDevicesWithMediaType:AVMediaTypeVideo];
用于(AVCaptureDevice*设备中的设备)
{
如果([设备位置]==currentCameraPosition)
{
背面照相机=装置;
}
}
newVideoInput=[[AvCaptureDeviceInputAlloc]initWithDevice:BackpacingCamera错误:&错误];
if(newVideoInput!=nil)
{
[[捕获会话开始配置];
[\u captureSession removeInput:videoInput];
[自配置会话预设:currentCameraPosition];
if([[U captureSession canAddInput:newVideoInput])
{
[\u captureSession addInput:newVideoInput];
videoInput=新的videoInput;
}
其他的
{
[\u captureSession addInput:videoInput];
}
[_CaptureSessionCommitteConfiguration];
}
_输入摄像机=背面摄像机;
[self-setOutputImageOrientation:self.outputImageOrientation];
}
-(无效)配置会话预设:(AVCaptureDevicePosition)当前位置{
if(currentPosition==AVCaptureDevicePositionBack){
如果(宽度高度是720,我不知道为什么更换前后摄像头时,高度从960变为720!可能是苹果的错误
当使用AVCaptureSessionPresetHigh时,实际分辨率与不同的相机不同,前后不同,它将获得相机的最高分辨率。我猜您使用的是iphone5