我创建了一组GPUImageToneCurveFilter
并存储在一个数组中。
首先,我在选择任何过滤器后,使用GPUImageVideoCamera为所有过滤器创建预览视频视图,我尝试添加过滤器详细信息视图(GPUImageStillCamera)。但是我为此获得了黑屏。
如果我重新创建新的过滤器而不是重用,然后添加到GPUImageStillCamera它可以正常工作。 任何解决方案。
预览视图创建代码:
-(void)setUpUI{
self.videoView.fillMode = kGPUImageFillModePreserveAspectRatioAndFill;
}
-(void)addFilter:(id)filter
{
// For thumbnails smaller than the input video size, we currently need to make them render at a smaller size.
// This is to avoid wasting processing time on larger frames than will be displayed.
// You'll need to use -forceProcessingAtSize: with a zero size to re-enable full frame processing of video.
self.filter = filter;
[filter forceProcessingAtSize:self.videoView.sizeInPixels];
[[CameraProvider sharedProvider] addTarget:filter];
[filter addTarget:self.videoView];
[[CameraProvider sharedProvider] startCameraCapture];
self.titleLabel.text = [filter fliterName];
}
-(void)stopCamera
{
[self.filter removeAllTargets];
[[CameraProvider sharedProvider] removeTarget:self.filter];
[[CameraProvider sharedProvider] stopCameraCapture];
}
-(IBAction)selectionDone:(id)sender {
[[CameraProvider sharedProvider] removeInputsAndOutputs];
self.selectedFilter(self.filter);
}
// Adding to detail view (GPUImageStillCamera0:
- (void)didSelectFilter:(id)newfilter;
{
NSLog(@"fliter");
// newfilter = [[GPUImageToneCurveFilter alloc] initWithACV:@"california-gold-rush.acv"];
[newfilter prepareForImageCapture];
[stillCamera addTarget:newfilter];
[newfilter addTarget:self.imageView];
[stillCamera startCameraCapture];
}
答案 0 :(得分:0)
如果我重新创建新的过滤器而不是重用,然后添加到GPUImageStillCamera它可以正常工作。
我讨厌陈述显而易见的,但解决方案是在需要时重新创建过滤器而不是尝试重用过滤器。
你想从那个数组得到的是“一种给定索引的过滤器对象的方法”。获取该过滤器对象有很多种方法。其中之一是预先将数组和索引分配到数组中。另一种方法是编写一个函数,给定一个索引,返回一个与从数组中检索到的相同类型的新创建的对象。不使用过滤器数组,而是使用工厂数组进行过滤。