Можно ли получить (почти) представления в реальном времени от CIFilter на iOS? - PullRequest
4 голосов
/ 13 февраля 2012

Я пытаюсь применить некоторые CIFilters к последовательности CIImage и хотел бы отображать их в реальном времени (не менее 20-30 кадров в секунду).

Изображения нарисованы на GLKView через EAGL CIContext

Когда я рисую свои изображения с помощью этого кода (в методе обновления), я получаю ± 20 кадров в секунду (что уже немного жестко):

image = [image imageByApplyingTransform: CGAffineTransformMakeScale(@scale, @scale)];
[self.capture_controller.core_image_context drawImage:image atPoint: [0, 0] fromRect: image.extent];

Если я добавлю только один простой фильтр, прежде чем он упадет до 10-12 кадров в секунду (compo - это фильтр CISourceOverCompositing, для которого inputImage установлен раз и навсегда):

[self.compo setValue:image forKey: @"inputBackgroundImage"];
image = [self.compo outputImage];

Естьспособ получить лучшую производительность от CoreImage?Я думаю, что UIImageView может отображать последовательность быстрее, поэтому это должно быть возможно.

Ответы [ 3 ]

2 голосов
/ 22 июня 2012

Посмотрите видео WWDC 2012 о CoreImage для получения информации о том, как получить производительность.По умолчанию производительность ограничена такими факторами, как управление цветом.Для достижения максимальной производительности отключите управление цветом при создании CIContext, создайте контекст только один раз и создайте фильтры только один раз.

2 голосов
/ 17 февраля 2015

Apple предоставляет руководство для этого.

Цитируется из руководства:

EAGLContext *myEAGLContext = [[EAGLContext alloc] initWithAPI:kEAGLRenderingAPIOpenGLES2];

NSDictionary *options = @{ kCIContextWorkingColorSpace : [NSNull null] };
CIContext *myContext = [CIContext contextWithEAGLContext:myEAGLContext options:options];
0 голосов
/ 15 февраля 2012

Итак, из того, что я собрал, и из комментариев Иешуа, выступления (очевидно) связаны с устройством, и с этим мало что можно сделать, если я использую CIFilters.

...