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 ...
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: