我其實對iPhone好奇。我正在從服務器獲取MJPEG流,並試圖在iphone上本地渲染它(不使用safari類)。 這樣做的原因是因爲safari類可以本地渲染MJPEG,但是在我想要的幀率下不這樣做。CGImageCreateWithJPEGDataProvider的繪圖性能?
於是,我就畫本身,但我想出了性能問題,就是我從服務器,我能畫到手機屏幕得到什麼之間即同步問題。 (應該有一點滯後,但漂移變得非常糟糕,這是我想避免的)。
所以我建立了一個連接到我的服務器,我確實得到了JPEGS。這只是我的數據插入到一個NSMutableArray的緩衝
CFMutableDataRef _t_data_ref = (CFMutableDataRef)[_buffer_array objectAtIndex:0];
//CGDataProviderRef imgDataProvider = CGDataProviderCreateWithCFData (_cf_buffer_data);
CGDataProviderRef imgDataProvider = CGDataProviderCreateWithCFData(_t_data_ref);
CGImageRef image = CGImageCreateWithJPEGDataProvider(imgDataProvider, NULL, true, kCGRenderingIntentDefault);
CGImageRef imgRef = image;
CGContextDrawImage(context, CGRectMake(0, 17, 380, 285), imgRef);
CGImageRelease(image);
CGDataProviderRelease(imgDataProvider);
請注意,這是我的代碼的要點,但應總結一下我試圖與問候圖紙來完成。此外,爲了獲得幀率同步,我不得不分離一個單獨的線程睡眠X秒,並調用[self setNeedsDisplay]。
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; // Top-level pool
while(1)
{
//[NSThread sleepForTimeInterval:TIMER_REFRESH_VALUE];
//sleep(unsigned int);
usleep(MICRO_REFRESH_VALUE);
if ([_buffer_array count] > 10)
{
//NSLog(@"stuff %d", [_buffer_array count]);
//[self setNeedsDisplay];
[self performSelectorOnMainThread:@selector(setNeedsDisplay) withObject:nil waitUntilDone:NO];
}
}
[pool release]; // Release the objects in the pool.
我的JPEG數據的緩衝區實際上填補了相當快的,但我似乎無法真正消費的東西我以同樣的速度得到我,居然要慢得多。是否有任何文檔可以描述我可以做些什麼樣的性能調整,以便在將JPEG渲染到屏幕時更快地進行性能調整?還是我有點卡在這裏?
謝謝!
你是否使用過Instruments分析? – 2010-04-11 23:58:15