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 ...
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>, ¶m1, ¶m2, 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.