Mostrando entradas con la etiqueta Suspender Vídeo. Mostrar todas las entradas
Mostrando entradas con la etiqueta Suspender Vídeo. Mostrar todas las entradas

lunes, 14 de diciembre de 2009

uvc_video_suspend



Ahora vamos a estudiar uvc_video_suspend:
/* --------------------------------------------------------------------------
 * Suspend/resume
 */

/*
 * Stop streaming without disabling the video queue.
 *
 * To let userspace applications resume without trouble, we must not touch the
 * video buffers in any way. We mark the device as frozen to make sure the URB
 * completion handler won't try to cancel the queue when we kill the URBs.
 */
int uvc_video_suspend(struct uvc_streaming *stream)
{
    if (!uvc_queue_streaming(&stream->queue))
        return 0;

    stream->frozen = 1;
    uvc_uninit_video(stream, 0);
    usb_set_interface(stream->dev->udev, stream->intfnum, 0);
    return 0;
}


Ahora voy a ir comentándolo para hacerlo más legible:
/* --------------------------------------------------------------------------
 * Suspend/resume
 */

/**
 * uvc_video_suspend - Stop streaming without disabling the video queue.
 * @stream: the stream that will be suspended
 *
 * To let userspace applications resume without trouble, we must not touch the
 * video buffers in any way. We mark the device as frozen to make sure the URB
 * completion handler won't try to cancel the queue when we kill the URBs.
 */
int uvc_video_suspend(struct uvc_streaming *stream)
{
    if (!uvc_queue_streaming(&stream->queue))  // if queue is STREAMING
        return 0;

    stream->frozen = 1;  //  uvc_video_device knowns if it's frozen or not
    uvc_uninit_video(stream, 0);  //  it will kill all URBs and free them
        //  it will alternate to the 0 alternative setting
    usb_set_interface(stream->dev->udev, stream->intfnum, 0);
    return 0;
}


No es muy complejo, pero es curioso que exista una alternativa de configuración número 0 que se use en este caso.

Estudiando cómo se suspenden y resumen los flujos de vídeo



Como vimos, el primer paso sería suspender el flujo de vídeo para comenzar nuestra captura de la foto fija.

Para realizar este objetivo, el código de linux-uvc trae dos funciones muy interesantes: uvc_video_suspend y uvc_video_resume.

En próximos artículos explicaré como funcionan.

jueves, 3 de diciembre de 2009

Diagrama de secuencia del método 2 de Imágenes Fijas



Como base para estudiar el método 2 de Imágenes Fijas hice un diagrama de secuencia. Si bien no es 100% acorde a lo que se refiere un diagrama de secuencia, ya que utilizo objetos distintos cuando simplemente son subfunciones, expone los pasos que debe hacerse de una forma muy sencilla y eficaz.

Este diagrama lo he creado a partir de lo expuesto en la especificación de los dispositivos de la clase de vídeo USB (USB Video Class o directamente UVC) y utilizando el programa Umbrello.