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

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

<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 43<br />

con los parámetros <strong>de</strong>l ev<strong>en</strong>to. Por ejemplo, un parámetro podría ser un valor BSTR que<br />

fuese localizado por el Gráfico <strong>de</strong> filtros.<br />

El sigui<strong>en</strong>te código provee una guía <strong>de</strong> cómo obt<strong>en</strong>er ev<strong>en</strong>tos <strong>de</strong> una cola.<br />

long evCo<strong>de</strong>, param1, param2;<br />

HRESULT hr;<br />

while (hr = pEv<strong>en</strong>t->GetEv<strong>en</strong>t(&evCo<strong>de</strong>, &param1, &param2, 0), SUCCEEDED(hr))<br />

{<br />

switch(evCo<strong>de</strong>)<br />

{<br />

// Llama a funciones <strong>de</strong>finidas <strong>en</strong> la aplicación para cada<br />

// tipo <strong>de</strong> ev<strong>en</strong>to que se quiera manejar.<br />

}<br />

}<br />

hr = pEv<strong>en</strong>t->FreeEv<strong>en</strong>tParams(evCo<strong>de</strong>, param1, param2);<br />

Para sobrescribir el manejador por <strong>de</strong>fault <strong>de</strong>l Manejador <strong>de</strong>l Gráfico <strong>de</strong> filtros, se<br />

<strong>de</strong>be llamar al método IMediaEv<strong>en</strong>t::CancelDefaultHandling con el código <strong>de</strong>l ev<strong>en</strong>to<br />

como un parámetro. Se pue<strong>de</strong> volver a crear una instancia <strong>de</strong>l manejador por <strong>de</strong>fault<br />

llamando al método IMediaEv<strong>en</strong>t::RestoreDefaultHandling.<br />

3.8.4.2 Saber cuando un ev<strong>en</strong>to ocurre<br />

Adicionalm<strong>en</strong>te a lo <strong>de</strong>scrito, una aplicación necesita una manera <strong>de</strong> saber cuando<br />

los ev<strong>en</strong>tos están esperando <strong>en</strong> la cola. El Manejador <strong>de</strong>l gráfico <strong>de</strong> filtros provee dos<br />

formas <strong>de</strong> hacer esto.<br />

• Usando notificaciones Windows, el Manejador <strong>de</strong>l gráfico <strong>de</strong> filtros <strong>en</strong>vía un<br />

m<strong>en</strong>saje tipo Windows a una v<strong>en</strong>tana <strong>de</strong> aplicación <strong>en</strong> cualquier mom<strong>en</strong>to que<br />

exista un nuevo ev<strong>en</strong>to.<br />

• Usando manejadores <strong>de</strong> ev<strong>en</strong>tos, la aplicación obti<strong>en</strong>e un manejador a un ev<strong>en</strong>to<br />

Windows manual-reset 6 . El Manejador <strong>de</strong>l gráfico <strong>de</strong> filtros señala el ev<strong>en</strong>to<br />

manual-reset cuando haya notificaciones <strong>de</strong> ev<strong>en</strong>tos <strong>en</strong> la cola y reinicializa esta<br />

cuando la cola está vacía.<br />

Veamos cada una <strong>de</strong> las dos opciones.<br />

3.8.4.3 Notificación Windows<br />

Para utilizar una notificación windows, se <strong>de</strong>be llamar al método<br />

IMediaEv<strong>en</strong>tEx::SetNotifyWindow y especificar un m<strong>en</strong>saje privado. Las aplicaciones<br />

pue<strong>de</strong>n usar números <strong>de</strong> m<strong>en</strong>sajes <strong>en</strong> el rango <strong>de</strong> WM_APP hasta 0xBFFF como m<strong>en</strong>sajes<br />

privados. En cualquier mom<strong>en</strong>to el Manejador <strong>de</strong>l gráfico <strong>de</strong> filtros coloca una nueva<br />

notificación <strong>de</strong> ev<strong>en</strong>to <strong>en</strong> la cola, este <strong>en</strong>vía este m<strong>en</strong>saje a la v<strong>en</strong>tana <strong>de</strong>stino. La<br />

aplicación respon<strong>de</strong> al m<strong>en</strong>saje <strong>de</strong>s<strong>de</strong> el lazo(loop) <strong>de</strong> m<strong>en</strong>sajes <strong>de</strong> la v<strong>en</strong>tana.<br />

El sigui<strong>en</strong>te código ejemplifica como ajustar la notificación window.<br />

6 El ev<strong>en</strong>to manual-reset es un tipo <strong>de</strong> ev<strong>en</strong>to creado por la función Windows CreateEv<strong>en</strong>t; esta no ti<strong>en</strong>e<br />

nada que ver con las notificaciones <strong>de</strong> ev<strong>en</strong>tos <strong>de</strong>finidas por DirectShow.

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

Saved successfully!

Ooh no, something went wrong!