2010-02-16 14 views
6

Estoy trabajando en una aplicación y tengo un problema. Parece que no puedo encontrar una solución para. La aplicación está escrita en vC++. Lo que tengo que hacer es mostrar un feed de video YUV con texto encima.Dibujo de video con texto en la parte superior

Ahora funciona correctamente dibujando el texto en el método OnPaint usando GDI y el video en una superposición DirectDraw. Necesito deshacerme de la superposición porque causa muchos problemas. No funcionará en algunas tarjetas de video, vista, 7, etc.

No puedo encontrar la manera de completar la misma cosa de una manera más compatible. Puedo dibujar el video usando DirectDraw con un buffer posterior y copiarlo al buffer primario sin problemas. El problema aquí es que el texto que se dibuja en GDI parpadea debido a la cantidad de veces que se actualiza el video. Realmente me gustaría mantener el código para dibujar el texto intacto si es posible, ya que funciona bien.

¿Hay alguna manera de dibujar el texto directamente en un búfer de DirectDraw o en un búfer de memoria o algo así y luego colocarlo en el búfer posterior? ¿Debo buscar otro método todos juntos? Los dos sistemas operativos importantes son XP y 7. Si alguien tiene alguna idea házmelo saber y los probaré. Gracias.

+0

+1 para la pregunta – gyurisc

Respuesta

2

tratar de buscar en DirectShow y la muestra en microsoft.com Ticker:

DirectShow Ticker sample

este ejemplo se utiliza la mezcla de vídeo para mezclar vídeo y texto. Utiliza la interfaz IVMRMixerBitmap9 para combinar texto en la parte inferior de la ventana de video.

DirectShow es para generar gráficos de filtro para reproducir audio o secuencias de video, agregar filtros diferentes para diferentes efectos y manipular muestras de video y audio.

1

En lugar de utilizar Video Mixing Renderer de DirectShow, también puede usar la interfaz ISampleGrabber. La ventaja es que es un filtro que también se puede usar con otros renderizadores, por ejemplo, cuando no se muestra el video en la pantalla, sino que se transmite por la red o se lo descarga a un archivo.

+1

La desventaja de esto, sin embargo, es que está mezclándose en el software y deshabilitando la descodificación o descodificación asistida por hardware. Si utiliza la API apm de mezclador vmr, puede usar la mezcla alfa asistida por hardware. –

+0

+1 para ISampleGrabber, ya que lo uso extensivamente para pintar video en tiempo real en .NET con GDI +. incluso en superficies YUY2 :) –

Cuestiones relacionadas