gpt4 book ai didi

ios - GPUImage 在 iOS 上未通过 CVPixelBufferGetPlaneCount 检查

转载 作者:行者123 更新时间:2023-11-28 20:06:23 26 4
gpt4 key购买 nike

我目前正在将旧项目从 iOS 5/6 升级到 iOS 6/7。

该项目的一部分涉及使用 GPUImage 库拍摄照片,使用裁剪滤镜对其进行处理,然后选择性地添加一些饱和度和模糊效果。我目前使用的是通过 cocoa pods 安装的 0.1.2 版。

我遇到的问题是,当我尝试从相机捕捉图像时,我在 GPUImageStillCamera.m 第 254 行

中遇到了以下断言
if (CVPixelBufferGetPlaneCount(cameraFrame) > 0)
{
NSAssert(NO, @"Error: no downsampling for YUV input in the framework yet");
}

其中 cameraFrame 是一个 CVImageBufferRef

我已经复制了调用它的代码并将其移动到另一个项目,在那里它运行得很好。

一旦我将这个复制的类移回主项目,我每次都会遇到断言。

我自己调试排除的事情

  • 64 位(两者皆有)
  • 不同的库版本
  • 初始对象设置/代码/使用

这让我相信这可能是我忽略的项目设置。非常欢迎任何帮助,甚至是正确方向的指示。我已经在这上面花了 1-2 天了,但仍然完全迷失了方向!

我在下面包含了精简的类,它显示了一般用途。

#import "ViewController.h"
#import "GPUImage.h"
#import "ImageViewController.h"

@interface ViewController ()
@property (nonatomic, strong) IBOutlet GPUImageView *gpuImageView;
@property (nonatomic, strong) GPUImageStillCamera *camera;
@property (nonatomic, strong) GPUImageCropFilter *cropFilter;
@end

@implementation ViewController

- (void)viewDidAppear:(BOOL)animated
{
[super viewDidAppear:animated];
[self setupCameraCapture];
}

- (void)setupCameraCapture
{
if (self.camera) {
return;
}

self.cropFilter = [[GPUImageCropFilter alloc] initWithCropRegion:CGRectMake(0, 0, 1, 0.5625)];

if ([UIImagePickerController isCameraDeviceAvailable:UIImagePickerControllerCameraDeviceRear]) {
self.camera = [[GPUImageStillCamera alloc] initWithSessionPreset:AVCaptureSessionPresetPhoto cameraPosition:AVCaptureDevicePositionBack];
}
else {
self.camera = [[GPUImageStillCamera alloc] initWithSessionPreset:AVCaptureSessionPresetPhoto cameraPosition:AVCaptureDevicePositionFront];
}

self.camera.outputImageOrientation = UIInterfaceOrientationPortrait;

NSError *error = nil;
[self.camera.inputCamera lockForConfiguration:&error];
[self.camera.inputCamera setExposureMode:AVCaptureExposureModeContinuousAutoExposure];
[self.camera.inputCamera setWhiteBalanceMode:AVCaptureWhiteBalanceModeContinuousAutoWhiteBalance];
if ([self.camera.inputCamera respondsToSelector:@selector(isLowLightBoostSupported)]) {
BOOL isSupported = self.camera.inputCamera.isLowLightBoostSupported;
if (isSupported) {
[self.camera.inputCamera setAutomaticallyEnablesLowLightBoostWhenAvailable:YES];
}
}
[self.camera.inputCamera unlockForConfiguration];

[self.camera addTarget:self.cropFilter];
[self.cropFilter addTarget:self.gpuImageView];
[self.camera startCameraCapture];
}

- (IBAction)capturePressed:(id)sender
{
[self.camera capturePhotoAsImageProcessedUpToFilter:self.cropFilter withCompletionHandler:^(UIImage *image, NSError *error) {
// do something with the image here
}];
}

@end

最佳答案

真正的罪魁祸首是我的同事 Marek 发现的一个混合方法。隐藏在旧代码库的深处。上面的代码工作正常。

经验教训:如果您真的必须调配某些东西,请确保为 future 的开发人员留下适当的文档。

关于ios - GPUImage 在 iOS 上未通过 CVPixelBufferGetPlaneCount 检查,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21987767/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com