# Espejo mágico (Vala)

Utilice su cámara web como un espejo usando el entorno de trabajo GStreamer y GTK+
Daniel G. Siegel
dgsiegel@gnome.org
Johannes Schmid
jhs@gnome.org
Marta Maria Casetti
mmcasetti@gmail.com 2013
Daniel Mustieles
daniel.mustieles@gmail.com 2011 - 2020
Nicolás Satragno
nsatragno@gmail.com 2012 - 2013
Jorge González
jorgegonz@svn.gnome.org 2011

# Espejo mágico

      Su espejo se ha caído al suelo y se ha roto en miles de pedazos; pero necesita un espejo para afeitarse o para maquillarse. Solo tiene 15 minutos antes de coger el autobús para ir al trabajo. ¿Qué puede hacer?
      En este tutorial se va a hacer un programa que le permite usar su cámara web como un espejo. Aprenderá a:

        Crear una aplicación GTK+
        Acceder a su cámara web usando GStreamer y empotrar el resultado en una ventana
        Obtener las fotos de su cámara web

      Necesitará lo siguiente para poder seguir este tutorial:

        Una copia instalada del EID Anjuta
        Copias instaladas de GTK, GStreamer y de un compilador de Vala
        Conocimientos básico de un lenguaje de programación orientado a objetos

# Crear un proyecto en Anjuta

Antes de empezar a programar, deberá configurar un proyecto nuevo en Anjuta. Esto creará todos los archivos que necesite para construir y ejecutar el código más adelante. También es útil para mantener todo ordenado.

Inicie Anjuta y pulse ArchivoNuevoProyecto para abrir el asistente de proyectos.

Elija GTK+ (simple) de la pestaña Vala, pulse Adelante y rellene los detalles en las siguientes páginas. Use espejo-magico como nombre de proyecto y de carpeta.

Desactive la opción Usar GtkBuilder para la interfaz del usuario, ya que, en este tutorial, la interfaz de usuario se creará manualmente. Revise el tutorial afinador-guitarra usando el constructor de interfaces.

Asegúrese de que Configurar paquetes externos está seleccionada. En la siguiente página, seleccione gstreamermm-0.10 de la lista para incluir la biblioteca GStreamer en su proyecto.

Pulse Aplicar y se creará el proyecto. Abra src/espejo-magico.vala desde las pestañas Proyecto o Archivo. Debería ver algo de código que comience con las líneas:

using GLib; using Gtk;

# Construir el código por primera vez

El código carga una ventana (vacía) y la muestra. A continuación hay más detalles; omita esta lista si entiende los conceptos básicos:

Las dos líneas `using` importan espacios de nombres, por lo que no hay que nombrarlas explícitamente.

El constructor de la clase `Main` crea una ventana nueva y establece su título. Después se muestra la ventana y se conecta una señal que cierra la aplicación si se cierra la ventana. Se verán más señales más adelante.

La función estática `main` se ejecuta de manera predeterminada cuando inicia una aplicación en Vala. Llama a unas pocas funciones que crean la clase «Main», la configuran y ejecutan la aplicación. La función `Gtk.Main` inicia el bucle principal de GTK+, que ejecuta la interfaz de usuario y empieza a escuchar eventos (como pulsaciones del ratón y del teclado).

Este código está listo para usarse, por lo que puede compilarlo pulsando ConstruirConstruir proyecto (o pulsando MayúsF7).

Cambie la Configuración a Predeterminada y pulse Ejecutar para configurar la carpeta de construcción. Sólo necesita hacer esto una vez, para la primera construcción.

# Acceder al flujo de vídeo de la cámara web con GStreamer

El entorno multimedia de trabajo GStreamer es capaz de manejar vídeo desde cámaras web. Añada GStreamer a su aplicación y podrá acceder al flujo de vídeo.

using GLib; using Gtk;

public class Main : Object { private Gst.Element camerabin;

public Main () { this.camerabin = Gst.ElementFactory.make ("camerabin", "camera"); this.camerabin.set_state (Gst.State.PLAYING); }

static int main (string[] args) { Gtk.init (ref args); Gst.init (ref args); var app = new Main ();

Gtk.main ();

return 0; } }

Primero se quita la ventana creada anteriormente, ya que GStreamer se encargará de mostrar la imagen en la pantalla.

Ahora se va a crear un elemento de GStreamer que accede a la cámara web. Se va a usar el elemento «Camerabin», que es un elemento de cámara todo en uno capaz de hacer fotos, vídeos, aplicar efectos y mucho más. Perfecto para nuestro caso de uso. Con `this.camerabin.set_state (Gst.State.PLAYING)` se indica a la tubería de GStreamer que se acaba de crear que empiece a reproducir. Fácil, ¿no?

Por supuesto, también es posible integrar el vídeo más ajustadamente en otras ventanas, pero esto es un tema avanzado que incluye algunos detalles sobre el sistema «X-Window» que aquí se omiten.

Compile y ejecute de nuevo. Acabará teniendo dos ventanas. En el siguiente paso, se integrará el vídeo en una ventana de GTK+.

# Implementación de referencia

Si tiene problemas con este tutorial, compare su código con este código de referencia. También hay una implemnetación más amplia que empotra la ventana en una ventana GTK regular que implica algunas técnicas avanzadas, y añade botones para iniciar/parar la imagen.

# Lectura complementaria

Para obtener más información sobre el lenguaje de programación Vala, puede querer revisar el tutorial de Vala.

# Conclusión

Ya está, ha conseguido crear una aplicación de cámara web con todas las funciones de fotos en 15 minutos. Ahora puede afeitarse la barba o maquillar su bonita cara justo antes de tener un gran día en su trabajo, donde puede impresionar a sus amigos y colegas con una impresionante aplicación que ha hecho en 15 minutos.