1

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

呼び出されてそこで決定されますが、パフォーマンス上の理由からいくつかの値を事前に計算できるように、事前に実行したいと思います。

4

1 に答える 1

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配列をループします。

于 2011-04-10T16:58:19.093 に答える