28.11.2012 Views

Procesamiento digital de video en tiempo real y - Maestría en ...

Procesamiento digital de video en tiempo real y - Maestría en ...

Procesamiento digital de video en tiempo real y - Maestría en ...

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

<strong>Procesami<strong>en</strong>to</strong> <strong>digital</strong> <strong>de</strong> vi<strong>de</strong>o <strong>en</strong> <strong>tiempo</strong> <strong>real</strong> y “vi<strong>de</strong>o wall” con la PC 79<br />

Figura 5.24 Gráfico con el filtro <strong>de</strong> efectos incorporado<br />

5.7.2 Ajuste <strong>de</strong> la v<strong>en</strong>tana <strong>de</strong> vi<strong>de</strong>o<br />

Cuando se pres<strong>en</strong>ta un archivo <strong>de</strong> vi<strong>de</strong>o, el grafico <strong>de</strong> filtros cont<strong>en</strong>drá un filtro<br />

vi<strong>de</strong>o r<strong>en</strong><strong>de</strong>rer. El vi<strong>de</strong>o r<strong>en</strong><strong>de</strong>rer toma datos <strong>de</strong> vi<strong>de</strong>o sin comprimir como <strong>en</strong>trada y<br />

pres<strong>en</strong>ta estos hacia la pantalla <strong>de</strong>ntro <strong>de</strong> una v<strong>en</strong>tana. La v<strong>en</strong>tana <strong>de</strong> vi<strong>de</strong>o playback es una<br />

v<strong>en</strong>tana totalm<strong>en</strong>te in<strong>de</strong>p<strong>en</strong>di<strong>en</strong>te con sus propios bor<strong>de</strong>s y barra <strong>de</strong> titulo. Pero si se<br />

requiere que aparezca <strong>en</strong> una v<strong>en</strong>tana creada por nuestra aplicación, se <strong>de</strong>be hacer que la<br />

v<strong>en</strong>tana <strong>de</strong> vi<strong>de</strong>o sea una hija <strong>de</strong> la v<strong>en</strong>tana <strong>de</strong> la aplicación. Esto se logra ajustando las<br />

propieda<strong>de</strong>s <strong>de</strong> la v<strong>en</strong>tana <strong>de</strong> vi<strong>de</strong>o para especificar el propietario, el estilo, y posición <strong>de</strong> la<br />

v<strong>en</strong>tana, mediante la interfaz IVi<strong>de</strong>oWindow.<br />

Para pegar la v<strong>en</strong>tana <strong>de</strong> vi<strong>de</strong>o <strong>en</strong> la <strong>de</strong> la aplicación <strong>en</strong>tonces se llama al método<br />

IVi<strong>de</strong>oWindow::put_Owner y se le pasa un handle a la v<strong>en</strong>tana propietaria. Este método<br />

toma una variable <strong>de</strong>l tipo OAHWND.<br />

IVi<strong>de</strong>oWindow *pVW = NULL;<br />

pGB->QueryInterface(IID_IVi<strong>de</strong>oWindow, (void **)&pVW);<br />

JIF(pVW->put_Owner((OAHWND)ghApp));<br />

Se cambia el estilo <strong>de</strong> la v<strong>en</strong>tana <strong>de</strong> vi<strong>de</strong>o a una v<strong>en</strong>tana hija. Esto mediante el<br />

método IVi<strong>de</strong>oWindow::put_WindowStyle pasándole una combinación <strong>de</strong> ban<strong>de</strong>ras. La<br />

ban<strong>de</strong>ra WS_CHILD indica que la v<strong>en</strong>tana es una v<strong>en</strong>tana hija; la v<strong>en</strong>tana<br />

WS_CLIPSIBLINGS previ<strong>en</strong>e a la v<strong>en</strong>tana <strong>de</strong> dibujar <strong>de</strong>ntro <strong>de</strong>l área cli<strong>en</strong>te <strong>de</strong> otra<br />

v<strong>en</strong>tana hija.<br />

pVW->put_WindowStyle(WS_CHILD | WS_CLIPSIBLINGS | WS_CLIPCHILDREN);<br />

Se ajusta la posición <strong>de</strong> la v<strong>en</strong>tana <strong>de</strong> vi<strong>de</strong>o mediante una llamada al método<br />

IVi<strong>de</strong>oWindow::SetWindowPosition. Este método toma las coor<strong>de</strong>nadas <strong>de</strong>l dispositivo<br />

especificando la esquina superior izquierda, ancho y alto <strong>de</strong> la v<strong>en</strong>tana.<br />

RECT rect;<br />

GetCli<strong>en</strong>tRect(ghApp, &rect);<br />

pVW->SetWindowPosition(rect.left, rect.top, rect.right, rect.bottom);<br />

Antes <strong>de</strong> que la aplicación salga, es importante que se ajuste la visibilidad <strong>de</strong> la<br />

v<strong>en</strong>tana <strong>de</strong> vi<strong>de</strong>o a false. De otro modo, un reman<strong>en</strong>te <strong>de</strong> imag<strong>en</strong> <strong>de</strong> vi<strong>de</strong>o quedaría <strong>en</strong> la<br />

pantalla y el usuario no podría quitarlo. Después se restaura el valor <strong>de</strong> owner a NULL; <strong>de</strong><br />

otro modo los m<strong>en</strong>sajes serán <strong>en</strong>viados a la v<strong>en</strong>tana equivocada causando errores.

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!