2010-06-18 11 views
11

Quiero mostrar videos de muy alta resolución directamente con OpenGL.Pantalla de video con OpenGL

Los datos de imagen se procesarán en la GPU y quiero evitar un viaje de ida y vuelta a la PC para mostrar el video en una ventana estándar basada en mapa de bits.
La plataforma cruzada es agradable, Windows solo estaría bien (por lo que lo haría nvidia solamente)

¿Alguien tiene algún vínculo a las formas de hacer esto?

Hay un tutorial NeHe deficiente y algunos ejemplos de widgets OpenGL incrustados en Qt, pero necesito un rendimiento mucho mejor y imágenes mucho más grandes.

Respuesta

10

Suponiendo OpenGL 2.1, utilice un objeto de memoria intermedia del tipo GL_PIXEL_UNPACK_BUFFER para transmitir datos de píxeles a una textura. Es más rápido que cargar datos en cada cuadro, ya que la implementación puede usar DMA para copiar cuando usa glMapBuffer, glMapBufferRange (OpenGL 3.2) o llama directamente a glBufferData. También puede copiar varios fotogramas en cada lote para obtener un equilibrio entre la sobrecarga de copia y la sobrecarga de asignación. Por último, crea un sombreado para convertir YUV o YCbCr a RGB y muestra la textura con una franja triangular.

+0

¿Alguna razón para el triángulo sobre un quad de pantalla completa? –

+3

Sí, los cuádriceps apestan en todos los aspectos y no deben usarse, simplemente olviden que alguna vez existieron. –

2

Lo obvio para hacer con OpenGL sería mostrar el mapa de bits como una textura.

+0

Sí - Solo me preguntaba si había algunos trucos específicos de rendimiento de video, en lugar de solo copiar cada fotograma en un cuadrante de pantalla completa –

+0

@Martin: por lo general, siempre que mantenga toda la memoria arrastrando los pies en la tarjeta en sí misma, casi cualquier tarjeta de video razonable puede proporcionar fácilmente el ancho de banda para reescribir cada bit en la pantalla a la frecuencia de actualización máxima (especialmente ahora, dado que las pantallas LCD casi nunca se actualizan más rápido que 60 Hz) fue más difícil con CRT de gama alta que + Hz actualización). –

+0

Ese es el problema - Necesito hacer 1080p a 120Hz (¡e idealmente dos de ellos!) –

1

¿Desea enviar su video en una textura y procesarlo con fragment shader? Here's un breve tutorial sobre cómo hacer algo similar. Es solo un ejemplo simple de OpenGL 2.0 que crea 2 texturas de tamaño de ventana y las mezcla en shader de fragmento. No hay video involucrado pero no debería ser difícil de modificar si ya tiene los medios para decodificarlo.

0

Si lo desea, he creado una API muy simple que, entre otras cosas, también puede mostrar video como una textura opengl. También puede crear mapas de altura dinámicos usando una transmisión de video en vivo.

Puede comprobar el API en http://www.barbato.us/category/programming-labs/

Muy fácil de usar y hace que el código muy legible.

¡¡Buena suerte !!!

Cuestiones relacionadas