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 117<br />
pGB->QueryInterface(IID_IBasicVi<strong>de</strong>o, (void **)&pBV);<br />
// Consulta por interfaces <strong>de</strong> audio, las cuales no pue<strong>de</strong>n ser relevantes para<br />
archivos solo <strong>de</strong> vi<strong>de</strong>o<br />
pGB->QueryInterface(IID_IBasicAudio, (void **)&pBA);<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,<br />
(void **)&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 />
// 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 />
// 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>rStream (&PIN_CATEGORY_CAPTURE , &MEDIATYPE_Vi<strong>de</strong>o,<br />
pSrc, NULL, NULL);<br />
// Ahora que el filtro se ha añadido al gráfico y hemos pres<strong>en</strong>tado<br />
// su stream, po<strong>de</strong>mos actualizar esta refer<strong>en</strong>cia al filtro.<br />
pSrc->Release();<br />
// Desconectamos los ultimos dos filtros <strong>de</strong>l grafico<br />
EnumFilters("Color Space Converter", PINDIR_OUTPUT); //Busca el output pin <strong>de</strong>l<br />
p<strong>en</strong>ultimo filtro...<br />
hr = pGB->Disconnect(pOutPin);<br />
filtro...<br />
EnumFilters("Vi<strong>de</strong>o R<strong>en</strong><strong>de</strong>rer", PINDIR_INPUT); //Busca el input pin <strong>de</strong>l ultimo<br />
hr = pGB->Disconnect(pInputPin);<br />
// Añadimos el filtro <strong>de</strong> efectos <strong>en</strong> la imag<strong>en</strong><br />
hr = CoCreateInstance(CLSID_EZrgb24, NULL, CLSCTX_INPROC_SERVER, IID_IBaseFilter,<br />
reinterpret_cast(&pFX));<br />
hr = pGB->AddFilter(pFX, L"Image Effects");<br />
//Conectamos filtro <strong>de</strong> efectos y Color Space converter<br />
EnumFilters("Image Effects", PINDIR_INPUT); // Busca input pin <strong>de</strong> filtro Efectos<br />
hr = pGB->Connect(pOutPin, pInputPin);<br />
//Reconexion automatica <strong>en</strong>tre Image Effects y vi<strong>de</strong>o r<strong>en</strong><strong>de</strong>r<br />
EnumFilters("Image Effects", PINDIR_OUTPUT);<br />
EnumFilters("Vi<strong>de</strong>o R<strong>en</strong><strong>de</strong>rer", PINDIR_INPUT);<br />
hr = pGB->Connect(pOutPin, pInputPin);<br />
#if<strong>de</strong>f REGISTER_FILTERGRAPH<br />
hr = AddGraphToRot(pGB, &g_dwGraphRegister);<br />
#<strong>en</strong>dif<br />
pVW->put_Owner((OAHWND)ghApp);<br />
pVW->put_WindowStyle(WS_CHILD | WS_CLIPSIBLINGS | WS_CLIPCHILDREN);<br />
InitVi<strong>de</strong>oWindow(1, 1);