gpt4 book ai didi

objective-c - AVCaptureSession 分辨率不会随 AVCaptureSessionPreset 改变

转载 作者:行者123 更新时间:2023-12-05 06:42:25 24 4
gpt4 key购买 nike

我想在带有 AV Foundation 的 OS X 上更改我用相机拍摄的照片的分辨率。

但即使我更改了 AVCaptureSession 的分辨率,输出图片的大小也不会改变。我总是有一张 1280x720 的图片。

我想要较低的分辨率,因为我在实时过程中使用这些图片并且我希望程序运行得更快。

这是我的代码示例:

 session = [[AVCaptureSession alloc] init];

if([session canSetSessionPreset:AVCaptureSessionPreset640x360]) {
[session setSessionPreset:AVCaptureSessionPreset640x360];
}

AVCaptureDeviceInput *device_input = [[AVCaptureDeviceInput alloc] initWithDevice:
[AVCaptureDevice devicesWithMediaType:AVMediaTypeVideo][0] error:nil];

if([session canAddInput:device_input])
[session addInput:device_input];

still_image = [[AVCaptureStillImageOutput alloc] init];

NSDictionary *output_settings = [[NSDictionary alloc] initWithObjectsAndKeys:AVVideoCodecJPEG, AVVideoCodecKey, nil];
[still_image setOutputSettings : output_settings];

[session addOutput:still_image];

我应该在我的代码中更改什么?

最佳答案

我也遇到过这个问题,并找到了一个似乎有效的解决方案。由于某些原因,在 OS X 上,StillImageOutput 会破坏捕获 session 预设。

我所做的是直接更改 AVCaptureDevice 的事件格式。在将 StillImageOutput 添加到 Capture Session 后立即尝试此代码。

//Get a list of supported formats for the device
NSArray *supportedFormats = [[AVCaptureDevice devicesWithMediaType:AVMediaTypeVideo][0] formats];

//Find the format closest to what you are looking for
// this is just one way of finding it
NSInteger desiredWidth = 640;
AVCaptureDeviceFormat *bestFormat;
for (AVCaptureDeviceFormat *format in supportedFormats) {
CMVideoDimensions dimensions = CMVideoFormatDescriptionGetDimensions((CMVideoFormatDescriptionRef)[format formatDescription]);
if (dimensions.width <= desiredWidth) {
bestFormat = format;
}
}

[[AVCaptureDevice devicesWithMediaType:AVMediaTypeVideo][0] lockForConfiguration:nil];
[[AVCaptureDevice devicesWithMediaType:AVMediaTypeVideo][0] setActiveFormat:bestFormat];
[[AVCaptureDevice devicesWithMediaType:AVMediaTypeVideo][0] unlockForConfiguration];

可能还有其他方法可以解决这个问题,但我已经解决了这个问题。

关于objective-c - AVCaptureSession 分辨率不会随 AVCaptureSessionPreset 改变,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37206265/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com