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

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

Saved successfully!

Ooh no, something went wrong!