2012-04-24 82 views
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]; 

結果是我的視頻屏幕保持黑屏。任何人都可以在這裏看到錯誤嗎?我現在已經呆了幾個小時了,不知道該怎麼辦。

+1

沒有解決黑屏問題,我只會說做任何類型的使用UIImage資源的視頻和Core Image在實際設備上的速度將非常慢,除非您的視頻尺寸大小與郵票大小相同。去往和來自UIImage有很多核心圖形開銷,然後在視圖中手動重繪該圖像會增加更多的減速。另外,正如我在這裏基準測試:http://stackoverflow.com/a/6628208/19679核心圖像並不像它應該在iOS上那麼快。 – 2012-04-25 01:25:39

+0

如果你從相機中拉出這些視頻幀,你真的想要使用OpenGL ES或類似我的GPUImage框架來獲得高性能的視頻過濾和顯示。如果這些視頻幀是從網絡源拉取的視頻幀,可能會有點困難,但您仍然希望使用OpenGL ES(或適用於Mac客戶端的OpenGL)上傳和顯示這些幀。 – 2012-04-25 01:28:10

+0

我實際上是從網絡來源提取視頻,沒有任何過濾,性能非常好。 (我正在使用[link](http://code.google.com/p/idoubs/))您對過濾有何建議?也許在服務器端呢? – Dimitar08 2012-04-25 01:43:14

回答

4

我已經解決了這個問題,這個問題與線初始化CIImage:

//Wrong 

CIImage *beginImage = image.CIImage;

//Right 
CIImage *beginImage = [CIImage imageWithCGImage:imageRef]; 

布拉德說,雖然,性能是不能接受的。 iPad2上的視頻滯後約5秒鐘。所以我會研究其他的解決方案,但我仍然很高興看到它的工作原理比其他任何東西都更有效:)