Crear  Editar  FrontPage  Indexes  Buscar  Cambios  History  RSS  Login

tut-gst-threads

Hilos

GStreamer tiene soporte para multithreading gracias al uso del objeto Gst::Thread. De hecho, este objeto es un Gst::Bin especial que se convierte en un nuevo hilo al iniciarse.

Para construir un nuevo hilo actuamos de la siguiente forma:

# crea el objeto thread
thread = Gst::Thread.new

# añadimos algunos plugins
thread.add(funky_src, cool_effect)

# conectamos los elementos
...

# comienza la reproducción
thread.play

El programa anterior creará un hilo con dos elementos dentro de él. Tan pronto como su estado pase a Gst::Element::STATE_PLAYING, el hilo se iniciará por si solo. Nunca es necesario iterar explícitamente un hilo.

Constraints situadas en la tubería por el Gst::Thread

Dentro de la tubería, todo transcurre igual que en cualquier otro contenedor. La diferencia reside en límite de hilos, en la conexión entre el hilo y el mundo exterior (el contenedor). Ya que GStreamer es fundamentalmente orientado a buffers más que orientado a bytes, la solución natural a este problema es un elemento que pueda realizar un buffer de los buffers de cada hilo (valga la redundancia), de un modo seguro ("thread-safe"). Este elemento es la cola (Gst::Queue?), que se descibe en el capítulo Colas. No importa que la cola forme parte del contenedor principal o del hilo mismo, pero es necesario que esté presente en al menos uno de los dos lados para permitir la intercomunicación entre ambos.

¿Cuándo hay que usar hilos?

Si se está escribiendo una aplicación con GUI, haciendo del contenedor principal un hilo se consigue que la GUI tenga mejor respuesta. Si en su lugar tenemos una tubería, esta deberá ser iterada por ciclo de eventos de tu aplicación, lo cual incrementa el tiempo entre eventos (presiones de tecla, por ejemplo) y la respuesta de la GUI. Además, cualquier pequeño retardo en el GUI retrasará la iteración de la tubería, que puede causar (por ejemplo) saltos en la salida por tarjeta de sonido, en el caso de una tubería de audio.

Un hilo se puede visualizar de esta forma:

thread.png

Como ejemplo práctico, puede leer el código fuente de nuestro Simple Audio Player?.

Ultimas actualizaciones:2011/06/05 23:47:32
Clave:
Referencias:[tut-gst]