AVCaptureSessionPresetMedium图像大小?

时间:2011-04-10 16:45:06

标签: iphone video-processing avcapturesession

使用AVCaptureSessionPresetMedium

// Create the session
AVCaptureSession * newSession = [[AVCaptureSession alloc] init];

// Configure our capturesession
newSession.sessionPreset = AVCaptureSessionPresetMedium;

有没有办法动态告诉这将解决宽度x高度的问题?显然我可以等到像

这样的代表
- (void)captureOutput:(AVCaptureOutput *)captureOutput 
didOutputSampleBuffer:(CMSampleBufferRef)sampleBuffer 
       fromConnection:(AVCaptureConnection *)connection

在那里调用并确定它,但我宁愿提前做,以便我可以出于性能原因预先计算一些值。

1 个答案:

答案 0 :(得分:4)

我很高兴在这方面被证明是错误的,但如果您不想对数字进行硬编码,以下步骤似乎是正确的方法:

-(CGSize)cameraSizeForCameraInput:(AVCaptureDeviceInput*)input
{
        NSArray *ports = [input ports];
        AVCaptureInputPort *usePort = nil;
        for ( AVCaptureInputPort *port in ports )
        {
                if ( usePort == nil || [port.mediaType isEqualToString:AVMediaTypeVideo] )
                {
                        usePort = port;
                }
        }

        if ( usePort == nil ) return CGSizeZero;

        CMFormatDescriptionRef format = [usePort formatDescription];
        CMVideoDimensions dim = CMVideoFormatDescriptionGetDimensions(format);

        CGSize cameraSize = CGSizeMake(dim.width, dim.height);

        return cameraSize;
}

必须在startRunning调用后调用此方法,否则结果为0,0。我不知道将来会发生什么,所以这就是我遍历ports数组的原因。