2

根据https://forums.developer.apple.com/thread/21694

iPhone 6s 和 6s Plus 都可以通过 AVCaptureStillImageOutput 在后置摄像头上捕捉 12 兆像素的照片 (4032x3024),并可以通过 AVCaptureVideoDataOutput 向您的进程提供高达 30 fps 的 12 MP 帧。当您使用 AVCaptureSessionPresetPhoto 作为 AVCaptureSession 的 -sessionPreset 时,默认选择 12 兆像素的“420f”格式。

所以我尝试使用以下代码来做到这一点:

self.captureSession.sessionPreset = AVCaptureSessionPresetPhoto;
AVCaptureVideoDataOutput*   videoOutput = [[AVCaptureVideoDataOutput alloc] init];
videoOutput.alwaysDiscardsLateVideoFrames = YES;
[videoOutput setSampleBufferDelegate:self queue:dispatch];
[self.captureSession addOutput:videoOutput];

我的设备的活动格式设置为:

设备格式: AVCaptureDeviceFormat: 0x12c684630 'vide'/'420f' 4032x3024, { 3- 30 fps}, fov:57.716, 最大变焦:189.00 (upscales @1.00), AF System:2, ISO:23.0-1840.0, SS:0.000013 -0.333333

看起来不错。

captureOutput但是,我在回调中添加了以下代码:

CVPixelBufferLockBaseAddress(imageBufferRef,0);
size_t width = CVPixelBufferGetWidth(imageBufferRef);
size_t height = CVPixelBufferGetHeight(imageBufferRef);
CVPixelBufferUnlockBaseAddress(imageBufferRef,0);
NSLog(@"ImageCameraSource:\n   width:%zu\n   height:%zu\n", width, height);

它输出

ImageCameraSource:宽度:1000 高度:750

为什么回调中的分辨率不是4032x3024?

4

1 回答 1

2

尝试使用AVCaptureSessionPreset3840x2160实时获取最高分辨率的帧

self.captureSession.sessionPreset = AVCaptureSessionPreset3840x2160;
AVCaptureVideoDataOutput*   videoOutput = [[AVCaptureVideoDataOutput alloc] init];
videoOutput.alwaysDiscardsLateVideoFrames = YES;
[videoOutput setSampleBufferDelegate:self queue:dispatch];
[self.captureSession addOutput:videoOutput];
于 2016-02-22T19:16:53.927 回答