【问题标题】:AVCaptureSession start memory warningsAVCaptureSession 启动内存警告
【发布时间】:2012-04-07 17:38:25
【问题描述】:

每次启动 AVCaptureSession 时,我都会收到内存警告,导致一段时间后崩溃。
我正在异步启动会话,仪器工具说应用程序消耗大约 2 MB 内存。 你知道如何克服这个问题吗?分配的 2MB 内存是否太多?

谢谢! [iOS 4.3,ARC]

@autoreleasepool {
    //Init capture session
    session = [[AVCaptureSession alloc] init];
    session.sessionPreset = AVCaptureSessionPresetPhoto;


    //Resize container view
    CGRect cameraContainerFrame = cameraContainerView.frame;
    cameraContainerFrame.size = CGSizeMake(320, 426);
    cameraContainerView.frame = cameraContainerFrame;

    CALayer *viewLayer = [cameraContainerView layer];
    [viewLayer setMasksToBounds:YES];

    //Create preview layer
    captureVideoPreviewLayer = [[AVCaptureVideoPreviewLayer alloc] initWithSession:session];

    CGRect bounds = [cameraContainerView bounds];
    [captureVideoPreviewLayer setFrame:bounds];


    if ([captureVideoPreviewLayer isOrientationSupported]) {
        [captureVideoPreviewLayer setOrientation:AVCaptureVideoOrientationPortrait];
    }    
    [captureVideoPreviewLayer setVideoGravity:AVLayerVideoGravityResizeAspectFill];

    [viewLayer addSublayer:captureVideoPreviewLayer];

    //Get input device
    captureDevice = [AVCaptureDevice defaultDeviceWithMediaType:AVMediaTypeVideo];

    if ([captureDevice lockForConfiguration:nil]){
        captureDevice.focusMode = AVCaptureFocusModeContinuousAutoFocus;
        captureDevice.whiteBalanceMode = AVCaptureWhiteBalanceModeContinuousAutoWhiteBalance;
        [captureDevice unlockForConfiguration];
    }

    NSError *error = nil;
    AVCaptureDeviceInput *input = [AVCaptureDeviceInput deviceInputWithDevice:captureDevice error:&error];
    if (!input) {
        // Handle the error appropriately.
        DLog(@"ERROR: trying to open camera: %@", error);
    }
    //Add input to session
    [session addInput:input];

    //Output
    stillImageOutput = [[AVCaptureStillImageOutput alloc] init];
    NSDictionary *outputSettings = [NSDictionary dictionaryWithObject:AVVideoCodecJPEG forKey:AVVideoCodecKey];
    [stillImageOutput setOutputSettings:outputSettings];
    [session addOutput:stillImageOutput];

    //Save state
    cameraSessionInitialized = YES;
    [session startRunning];
}

【问题讨论】:

    标签: objective-c ios memory-management avcapturesession


    【解决方案1】:
    session.sessionPreset = AVCaptureSessionPresetMedium;
    

    如果您不关心质量,这确实可以消除内存警告。我试图弄清楚如何让它与 AVCaptureSessionPresetPhoto 一起使用。

    【讨论】:

    • 我觉得AVCaptureSessionPresetPhotoAVCaptureSessionPresetMedium 之间的质量没有变化,所以你的回答对我有帮助,谢谢
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多