iOS forma más rápida de actualizar UIView con series de files JPEG, es decir, MJPEG. (Los instrumentos muestran un 50% de CPU)

Estoy recibiendo una serie de files JPEG a través de la networking desde una camera (MJPEG). Visualizo las imágenes cuando las recibo en una UIView. Lo que estoy viendo es que mi aplicación está gastando el 50% de la CPU (dispositivo y simulador probado) en lo que parece ser la actualización de UIView.

¿Hay una forma less intensiva de CPU para hacer esta actualización de pantalla? ¿Debo procesar el JPEG de alguna manera antes de entregárselo a UIView? Método de recepción:

UIImage *image = [UIImage imageWithData:data]; dispatch_async(dispatch_get_main_queue(),^{ [cameraView updateVideoImage:image]; }); 

Método de actualización:

 - (void) updateVideoImage:(UIImage*)image { myUIView.image = image; ... 

introduzca la descripción de la imagen aquí

actualización: se agregó una mejor captura de pantalla

update2: ¿OpenGL va a proporcionar una superficie más rápida para renderizar para JPEG? No me queda claro en Instrumentos donde el time se está gastando, renderizando o decodificando. Voy a armar un caso de testing como se sugirió y trabajar desde allí.

iOS está optimizado para imágenes PNG. Mientras JPEG networkinguce en gran medida el tamaño de las imágenes para la transmisión, es un formatting mucho más complejo, por lo que no me sorprende que esta renderización tome mucho time. La gente ha dicho que no hay asistencia de hardware jpeg en el dispositivo, pero no sé a ciencia cierta y, incluso si está allí, tal vez esté sintonizado para ciertos types de imágenes.

Entonces, algunas sugerencias. Diseña una testing donde tomes un jpeg que tienes ahora y vuélvelo a un context y a la línea de base esta vez. Tome la misma image y ábralo en Vista previa, luego guárdelo con un valor de calidad ligeramente diferente a otro file, e intente con eso (la vista previa eliminará la "basura" innecesaria de la image, o incluso la convertirá primero a un png y luego a un jpeg. La idea aquí es utilizar una salida de image de Vista previa, que va a ser tan limpia como la image que vas a get. ¿La image es mejor?

También puede intentar usar libjpegturbo, y ver si puede hacer que sus imágenes sean más rápidas. Puede ver esa biblioteca en acción en un proyecto github, PhotoScrollerNetwork. Puede encontrar ese proyecto de uso a medida que decodifica los jpeg (utilizando esa biblioteca) en time real a medida que se reciben, y luego admite la visualización con zoom utilizando CATiledLayers.