AVCaptureSessionPresetMedium размер изображения? - PullRequest
1 голос
/ 10 апреля 2011

При использовании AVCaptureSessionPresetMedium

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

// Configure our capturesession
newSession.sessionPreset = AVCaptureSessionPresetMedium;

Есть ли способ динамически определить, к чему это приведет при ширине х высоте?Очевидно, я могу подождать, пока не получит такой делегат, как

- (void)captureOutput:(AVCaptureOutput *)captureOutput 
didOutputSampleBuffer:(CMSampleBufferRef)sampleBuffer 
       fromConnection:(AVCaptureConnection *)connection

и определит его там, но я бы предпочел сделать это заранее, чтобы я мог пересчитать некоторые значения по соображениям производительности.

1 Ответ

4 голосов
/ 10 апреля 2011

Я был бы очень рад оказаться неправым в этом, но приведенные ниже шаги кажутся правильными, если вы не хотите жестко кодировать числа:

-(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.

...