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

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

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

Saved successfully!

Ooh no, something went wrong!