我正在做一个图片/视频滤镜效果项目。为了产生效果,我正在使用 GPUImage 项目。它适用于图片。现在我也需要对视频做同样的效果。我以每秒 30 帧的速度从视频中抓取图像。现在对于 1 分钟的视频,我过滤了大约 1800 张图像。和过滤,我为每个图像分配 GPUImagePicture 和 GPUImageSepiaFilter 类,并手动释放它们。但是这些分配并没有被释放,并且在处理大约 20 秒后,视频应用程序由于内存警告而崩溃。是否可以一次分配 GPUImagePicture 和 Filter 类来对所有图像进行过滤。如果是,如何?请告诉我这将非常有帮助。这是我的代码,我正在做什么...
get image 方法由 NSTimer 调用,每秒调用 30 次,从 app 文档目录中获取图像并发送到 - (void)imageWithEffect:(UIImage *)image 方法进行过滤。
-(void)getImage
{
float currentPlayBacktime = slider.value;
int frames = currentPlayBacktime*30;
NSString *str = [NSString stringWithFormat:@"image%i.jpg",frames+1];
NSString *fileName = [self.imgFolderPath stringByAppendingString:str];
if ([fileManager fileExistsAtPath:fileName])
[self imageWithEffect:[UIImage imageWithContentsOfFile:fileName]];
}
- (void)imageWithEffect:(UIImage *)image
{
GPUImagePicture *gpuPicture = [[GPUImagePicture alloc]initWithImage:img] ;
GPUImageSepiaFilter *filter = [[[GPUImageSepiaFilter alloc]init] autorelease];
gpuPicture = [gpuPicture initWithImage:image];
[gpuPicture addTarget:filter];
[gpuPicture processImage];
playerImgView.image = [filter imageFromCurrentlyProcessedOutputWithOrientation:0];
[gpuPicture removeAllTargets];
[filter release];
[gpuPicture release];
}