Utilicé la biblioteca libheic c++ para decodificar archivos de imagen heic, pero es extremadamente lenta. Se tarda alrededor de 1 - 2 segundos para decodificar una imagen. Lo mismo ocurre en el visor de fotos de Windows también. ¿Pero cómo puedo pasar cientos de fotos heic instantáneamente en el visor de fotos del iphone?
Respuesta
¿Demasiados anuncios?Voy a suponer que te refieres a "libheif" donde escribiste "libheic" (la primera es una biblioteca popular para decodificar archivos HEIC, mientras que la segunda no es algo que se pueda encontrar en ninguna parte).
Hay varias razones por las que el visor de fotos integrado en iOS es rápido mientras que su propio descodificador basado en libheif es lento:
-
Los dispositivos iOS con una CPU A10 o más reciente (es decir, iPhone 7 y más recientes) incorporan descodificación por hardware. Esto significa que el software que aprovecha esa función puede realizar una descodificación de imágenes acelerada por hardware, que suele ser mucho más rápida que la descodificación de imágenes basada exclusivamente en la CPU.
-
Los ingenieros de Apple han dedicado mucho tiempo y esfuerzo a optimizar el software para descodificar los archivos HEIC, ya que se utilizan ampliamente en todo el sistema iOS. Esto incluye facilitar a los desarrolladores de aplicaciones (de origen o de terceros) el aprovechamiento de la descodificación acelerada por hardware.
-
Puede que no hayas compilado libheif y sus dependencias de la forma más eficiente, o que no hayas utilizado los parámetros más eficientes durante la ejecución de tu programa. Es decir, las opciones que utilices al compilar el programa pueden suponer una gran diferencia en el rendimiento.
libheif utiliza libde265 para decodificar los datos de imagen HEIC. libde265 no es compatible con las funciones de decodificación acelerada por hardware de las series A o M de Apple. Sin embargo, sí soporta la aceleración SSE más general (en CPUs x86, cuando está activada).
-
libheif no es conocido por ser "super rápido". No creo que la intención sea que libheif sea "la opción más rápida", más bien parece que se centra en dar soporte a una gran variedad de funciones, en la facilidad de uso y en hacer que funcione con una gran variedad de lenguajes de programación.
Por ejemplo, he visto que en el pasado se han introducido regresiones de rendimiento a cambio de más funciones. En una ocasión, vi un benchmark que señalaba que el rendimiento de la decodificación de imágenes caía a casi un tercio de su nivel anterior al actualizar libheif a una versión reciente en comparación con la versión 1.6 anterior.
-
Es posible utilizar varios "trucos del oficio" para optimizar, por ejemplo, el desplazamiento por una larga lista de fotos en un visor de fotos. En particular, los archivos HEIC pueden contener miniaturas incrustadas codificadas con JPEG. Así, puede descodificar muy rápidamente miniaturas de 320x240 incrustadas dentro del archivo HEIC, en los casos en que sólo necesite una miniatura y pueda retrasar la descodificación real de la imagen para más tarde.