Descomprimiendo fotogramas de vídeo en una textura

Hace poco conseguí algo que llevaba probando hacía tiempo: descomprimir fotogramas de un vídeo mediante Ffmpeg y copiarlos a una textura de OpenGL.


Lo había probado con algún que otro wrapper de alguna librería de vídeo para Java, sin resultado, pero como hace poco hice mi propio wrapper de Java para Oculus Rift con Bridj, pensé en hacerme uno para Ffmpeg (o mejor dicho para las librerías libav)


La prueba que he hecho no es un reproductor de vídeo completo, puesto que sólo descomprime fotograma tras fotograma y los muestra a un framerate fijo. No se sincronizan frames con el timestamp del stream, y el audio se ignora completamente. Pero consigo “reproducir” cualquier vídeo que se vea en VLC.


Aquí una captura de una tetera reproduciendo la entradilla de la serie “Robotech”:


videotexture1El rendimiento es bueno para un vídeo de mediana resolución. Para uno a 1080p los FPS se degradan mucho.


Se podría usar con un vídeo de mediana a baja resolución para usar la textura animada en algún efecto con shaders, por ejemplo para fuego o una explosión como me comentaba Airsynth.


Hasta la próxima!