3
我工作的視頻會議應用程序,下面的代碼繪製的幀到屏幕上成功地:應用CIFilter視頻iOS中
-(int)drawFrameOnMainThread{
if(mBitmapContext){
if(mDisplay){
CGImageRef imageRef = CGBitmapContextCreateImage(mBitmapContext);
#if TARGET_OS_IPHONE
UIImage *image = [UIImage imageWithCGImage:imageRef];
[self performSelectorOnMainThread:@selector(setImage:) withObject:image waitUntilDone:YES];
#elif TARGET_OS_MAC
[mDisplay setCurrentImage:imageRef];
#endif
CGImageRelease(imageRef);
}
}
return 0;
}
我想被吸引到一個CIFilter適用於框架,所以我修改了代碼的iOS部分,如下所示:
UIImage *image = [UIImage imageWithCGImage:imageRef];
CIImage *beginImage = image.CIImage;
CIContext *context = [CIContext contextWithOptions:nil];
CIFilter *filter = [CIFilter filterWithName:@"CISepiaTone"
keysAndValues: kCIInputImageKey, beginImage,
@"inputIntensity", [NSNumber numberWithFloat:0.8], nil];
CIImage *outputImage = [filter outputImage];
CGImageRef cgimg =
[context createCGImage:outputImage fromRect:[outputImage extent]];
UIImage *newImg = [UIImage imageWithCGImage:cgimg];
[self performSelectorOnMainThread:@selector(setImage:) withObject:newImg waitUntilDone:YES];
結果是我的視頻屏幕保持黑屏。任何人都可以在這裏看到錯誤嗎?我現在已經呆了幾個小時了,不知道該怎麼辦。
沒有解決黑屏問題,我只會說做任何類型的使用UIImage資源的視頻和Core Image在實際設備上的速度將非常慢,除非您的視頻尺寸大小與郵票大小相同。去往和來自UIImage有很多核心圖形開銷,然後在視圖中手動重繪該圖像會增加更多的減速。另外,正如我在這裏基準測試:http://stackoverflow.com/a/6628208/19679核心圖像並不像它應該在iOS上那麼快。 – 2012-04-25 01:25:39
如果你從相機中拉出這些視頻幀,你真的想要使用OpenGL ES或類似我的GPUImage框架來獲得高性能的視頻過濾和顯示。如果這些視頻幀是從網絡源拉取的視頻幀,可能會有點困難,但您仍然希望使用OpenGL ES(或適用於Mac客戶端的OpenGL)上傳和顯示這些幀。 – 2012-04-25 01:28:10
我實際上是從網絡來源提取視頻,沒有任何過濾,性能非常好。 (我正在使用[link](http://code.google.com/p/idoubs/))您對過濾有何建議?也許在服務器端呢? – Dimitar08 2012-04-25 01:43:14