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 83<br />
El sigui<strong>en</strong>te paso es seleccionar un dispositivo <strong>de</strong> captura, utilizando el System<br />
Device Enumerator. El sigui<strong>en</strong>te código <strong>en</strong>umera los dispositivos <strong>de</strong> captura <strong>de</strong> vi<strong>de</strong>o y<br />
selecciona el primer dispositivo:<br />
// Crea el system <strong>de</strong>vice <strong>en</strong>umerator.<br />
ICreateDevEnum *pDevEnum = NULL;<br />
CoCreateInstance(CLSID_SystemDeviceEnum, NULL, CLSCTX_INPROC, IID_ICreateDevEnum, (void<br />
**)&pDevEnum);<br />
// Crea un <strong>en</strong>umerador para vi<strong>de</strong>o capture <strong>de</strong>vices.<br />
IEnumMoniker *pClassEnum = NULL;<br />
pDevEnum->CreateClassEnumerator(CLSID_Vi<strong>de</strong>oInputDeviceCategory, &pClassEnum, 0);<br />
ULONG cFetched;<br />
IMoniker *pMoniker = NULL;<br />
IBaseFilter *pSrc = NULL;<br />
if (pClassEnum->Next(1, &pMoniker, &cFetched) == S_OK)<br />
{<br />
// Liga el primer moniker a un objeto filtro.<br />
pMoniker->BindToObject(0, 0, IID_IBaseFilter, (void**)&pSrc);<br />
pMoniker->Release();<br />
}<br />
pClassEnum->Release();<br />
pDevEnum->Release();<br />
Ahora se aña<strong>de</strong> el filtro <strong>de</strong> captura al gráfico:<br />
// Se aña<strong>de</strong> el filtro <strong>de</strong> captura a nuestro gráfico<br />
hr = pGB->AddFilter(pSrc, L"Vi<strong>de</strong>o Capture");<br />
El paso final <strong>en</strong> la construcción <strong>de</strong> un grafico <strong>de</strong> captura es pres<strong>en</strong>tar el flujo. El<br />
método ICaptureGraphBuil<strong>de</strong>r2::R<strong>en</strong><strong>de</strong>rFlujo <strong>real</strong>iza dicha función.<br />
// Muestra el pin <strong>de</strong> captura <strong>en</strong> el filtro <strong>de</strong> captura <strong>de</strong> vi<strong>de</strong>o.<br />
// Se usa esta instrucción <strong>en</strong> lugar <strong>de</strong> pBuil<strong>de</strong>r->R<strong>en</strong><strong>de</strong>rFile<br />
hr = pBuil<strong>de</strong>r->R<strong>en</strong><strong>de</strong>rFlujo (&PIN_CATEGORY_CAPTURE , &MEDIATYPE_Vi<strong>de</strong>o,<br />
pSrc, NULL, NULL);<br />
Los primeros dos parámetros especifican el pin category y el tipo <strong>de</strong> media. Los<br />
sigui<strong>en</strong>tes tres parámetros son apuntadores a los sigui<strong>en</strong>tes filtros:<br />
• El filtro <strong>de</strong> captura<br />
• Un filtro <strong>de</strong> compresión adicional (no usado)<br />
• El multiplexor o filtro r<strong>en</strong><strong>de</strong>rer. (no usado)<br />
Finalm<strong>en</strong>te y como <strong>en</strong> el apartado 5.7.1 se incorpora el filtro multiefectos.<br />
5.8 Resultados<br />
Se logró la elaboración <strong>de</strong>l filtro aunque su inclusión <strong>en</strong> la aplicación resultó<br />
problemática, <strong>de</strong>bido a que no se quería reconocer la exist<strong>en</strong>cia <strong>de</strong>l filtro como librería <strong>de</strong><br />
<strong>en</strong>lace dinámico, sin embargo se pudo finalm<strong>en</strong>te resolver el problema con ayuda <strong>de</strong>l grupo<br />
<strong>de</strong> usuarios especificado <strong>en</strong> el anexo.<br />
En la figura 5.27 se muestra una imag<strong>en</strong> <strong>en</strong> pantalla completa <strong>de</strong>l vi<strong>de</strong>owall<br />
funcionando. El vi<strong>de</strong>o ofrece una pres<strong>en</strong>tación aceptable aunque se observa cierto retardo<br />
<strong>en</strong> la actualización <strong>de</strong> la imag<strong>en</strong>, sobre todo <strong>en</strong> las pantallas secundarias. Al ser reproducido