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

pVW->put_Visible(OAFALSE);<br />

hr = pVW->put_Owner(NULL);<br />

5.7.3 Despliegue <strong>de</strong> la pagina propietaria<br />

El filtro <strong>de</strong> efectos múltiples que añadimos soporta una pagina propietaria mediante<br />

la cual po<strong>de</strong>mos cambiar los efectos.<br />

Los filtros con pagina propietaria expon<strong>en</strong> la interfaz ISpecifyPropertyPages. Para<br />

<strong>de</strong>terminar si un filtro <strong>de</strong>fine una pagina propietaria, se consulta al filtro mediante<br />

QueryInterface.<br />

Dado que nosotros creamos una instancia <strong>de</strong>l filtro, ya t<strong>en</strong>emos un apuntador al<br />

filtro <strong>de</strong> efectos, <strong>en</strong>tonces solo requerimos llamar al método<br />

ISpecifyPropertyPages::GetPages. Este método ll<strong>en</strong>a un arreglo <strong>de</strong> conteo <strong>de</strong><br />

i<strong>de</strong>ntificadores globales únicos (GUIDs) con los i<strong>de</strong>ntificadores <strong>de</strong> clases (CLSID) <strong>de</strong> cada<br />

pagina propietaria. Un arreglo <strong>de</strong> conteo es <strong>de</strong>finido por una estructura CAUUID, la cual se<br />

<strong>de</strong>be asignar pero no utilizar. El método GetPages localiza el arreglo, el cual está cont<strong>en</strong>ido<br />

<strong>en</strong> el miembro pElems <strong>de</strong> la estructura CAUUID. Cuando esto se haya <strong>real</strong>izado, se libera<br />

el arreglo mediante una llamada a la función CoTaskMemFree.<br />

La función OleCreatePropertyFrame provee una forma simple <strong>de</strong> <strong>de</strong>splegar la<br />

pagina propietaria <strong>de</strong>ntro <strong>de</strong> una caja <strong>de</strong> dialogo.<br />

// Muestra la pagina propietaria<br />

// Obti<strong>en</strong>e el nombre <strong>de</strong>l filtro y un apuntador IUnknown.<br />

FILTER_INFO FilterInfo;<br />

pFX->QueryFilterInfo(&FilterInfo);<br />

IUnknown *pFilterUnk;<br />

pFX->QueryInterface(IID_IUnknown, (void **)&pFilterUnk);<br />

CAUUID caGUID;<br />

pProp->GetPages(&caGUID);<br />

pProp->Release();<br />

OleCreatePropertyFrame(<br />

hWnd, // V<strong>en</strong>tana padre<br />

0, 0, // (Reservado)<br />

FilterInfo.achName, // Captura para la caja <strong>de</strong> dialogo<br />

1, // Numero <strong>de</strong> objetos (solo <strong>de</strong>l filtro)<br />

&pFilterUnk, // Arreglo <strong>de</strong> apuntadores a objetos<br />

caGUID.cElems, // Numero <strong>de</strong> paginas propietarias<br />

caGUID.pElems, // Arreglo <strong>de</strong> CLSIDs <strong>de</strong> paginas propietarias<br />

0, // I<strong>de</strong>ntificador local<br />

0, NULL // Reservado<br />

);<br />

// Limpieza.<br />

pFilterUnk->Release();<br />

FilterInfo.pGraph->Release();<br />

CoTaskMemFree(caGUID.pElems);<br />

Esta es nuestra pagina propietaria con 9 efectos posibles:

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

Saved successfully!

Ooh no, something went wrong!