我正在将代码从静态图像应用程序移动到生成电影文件的应用程序。但是,以下代码存在问题,其中最终输出是使用GPUImageLookupFilter过滤器的黑色电影屏幕。任何人都可以发现我做错了什么或我可能错过了什么。
Header File Sample
GPUImagePicture *lookupImageSource;
GPUImageOutput<GPUImageInput> *filter;
GPUImageMovie *movieFile;
GPUImageMovieWriter *movieWriter;
@property(nonatomic,strong) GPUImagePicture *lookupImageSource;
Main File
filter = [[GPUImageFilterGroup alloc] init];
self.lookupImageSource = [[GPUImagePicture alloc] initWithImage:[UIImage imageNamed:@"ExtremeVintage1.png"]];
GPUImageLookupFilter * filterLookup = [[GPUImageLookupFilter alloc] init];
[self.lookupImageSource addTarget:filterLookup];
[self.lookupImageSource processImage];
[(GPUImageFilterGroup *)filter addFilter:filterLookup];
[(GPUImageFilterGroup *)filter setInitialFilters:[NSArray arrayWithObject:filterLookup]];
[(GPUImageFilterGroup *)filter setTerminalFilter:filterLookup];
[movieFile addTarget:filter];
由于
****更新*****
新代码
self.lookupImageSource = [[GPUImagePicture alloc] initWithImage:[UIImage imageNamed:@"ExtremeVintage1.png"]];
[self.lookupImageSource processImage];
filter = [[GPUImageLookupFilter alloc] init];
[lookupImageSource addTarget:filter];
[movieFile addTarget:filter];
答案 0 :(得分:5)
这是一个启用ARC的项目吗?如果是这样,那么您不会继续使用您的lookupImageSource GPUImagePicture实例的强引用,而不是您设置上述方法的方法。一旦退出该方法,提供查找的GPUImagePicture将被释放,因此您将丢失查找纹理。
尝试将lookupImageSource设置为类的强保存实例变量,以使其超出上述设置代码。