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 113<br />

// Se limpian los reman<strong>en</strong>tes <strong>de</strong> dialogo abiertos antes <strong>de</strong> llamar a R<strong>en</strong><strong>de</strong>rFile()<br />

UpdateWindow(ghApp);<br />

#ifn<strong>de</strong>f UNICODE<br />

MultiByteToWi<strong>de</strong>Char(CP_ACP, 0, szFile, -1, wFile, MAX_PATH);<br />

#else<br />

lstrcpy(wFile, szFile);<br />

#<strong>en</strong>dif<br />

// Se obti<strong>en</strong>e la interfaz para el constructor <strong>de</strong>l grafico <strong>de</strong> filtros GraphBuil<strong>de</strong>r<br />

JIF(CoCreateInstance(CLSID_FilterGraph, NULL, CLSCTX_INPROC_SERVER, IID_IGraphBuil<strong>de</strong>r,<br />

(void **)&pGB));<br />

if(SUCCEEDED(hr))<br />

{<br />

// Se construye automaticam<strong>en</strong>te el grafico <strong>de</strong> filtros que ejecutara el archivo<br />

especificado<br />

JIF(pGB->R<strong>en</strong><strong>de</strong>rFile(wFile, NULL));<br />

// Desconectamos los ultimos dos filtros <strong>de</strong>l grafico<br />

EnumFilters("MPEG Vi<strong>de</strong>o Deco<strong>de</strong>r", PINDIR_OUTPUT); //Busca el output pin<br />

<strong>de</strong>l p<strong>en</strong>ultimo filtro...<br />

hr = pGB->Disconnect(pOutPin); //OK :-)<br />

ultimo filtro...<br />

Efectos<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<br />

hr = pGB->Disconnect(pInputPin); //OK :-)<br />

// pSysDevEnum->CreateClassEnumerator(CLSID_EZrgb24, &pEnumCat, 0);<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,<br />

IID_IBaseFilter, reinterpret_cast(&pFX));<br />

hr = pGB->AddFilter(pFX, L"Image Effects"); //:-) OK<br />

//Conectamos filtro <strong>de</strong> efectos y MPEG vi<strong>de</strong>o <strong>de</strong>co<strong>de</strong>r<br />

EnumFilters("Image Effects", PINDIR_INPUT); // Busca input pin <strong>de</strong> filtro<br />

hr = pGB->Connect(pOutPin, pInputPin);<br />

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

// QueryInterface para las interfaces DirectShow<br />

JIF(pGB->QueryInterface(IID_IMediaControl, (void **)&pMC));<br />

JIF(pGB->QueryInterface(IID_IMediaEv<strong>en</strong>tEx, (void **)&pME));<br />

JIF(pGB->QueryInterface(IID_IMediaSeeking, (void **)&pMS));<br />

// Consulta las interfaces <strong>de</strong> vi<strong>de</strong>o, las cuales pue<strong>de</strong>n no ser relevantes<br />

para archivos <strong>de</strong> audio<br />

JIF(pGB->QueryInterface(IID_IVi<strong>de</strong>oWindow, (void **)&pVW));<br />

JIF(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<br />

para archivos solo <strong>de</strong> vi<strong>de</strong>o<br />

JIF(pGB->QueryInterface(IID_IBasicAudio, (void **)&pBA));<br />

// Es este un archivo solo <strong>de</strong> audio (no hay compon<strong>en</strong>te <strong>de</strong> vi<strong>de</strong>o)?<br />

CheckVisibility();<br />

if (!g_bAudioOnly)<br />

{<br />

JIF(pVW->put_Owner((OAHWND)ghApp));<br />

JIF(pVW->put_WindowStyle(WS_CHILD | WS_CLIPSIBLINGS | WS_CLIPCHILDREN));<br />

}<br />

// Ti<strong>en</strong>e grafico ev<strong>en</strong>tos via llamadas a la v<strong>en</strong>tana por llevar a cabo<br />

JIF(pME->SetNotifyWindow((OAHWND)ghApp, WM_GRAPHNOTIFY, 0));

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

Saved successfully!

Ooh no, something went wrong!