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