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 78<br />
La función CoCreateInstance regresa un apuntador a la interfaz IgraphBuil<strong>de</strong>r <strong>de</strong>l<br />
Manejador <strong>de</strong>l gráfico <strong>de</strong> filtros. Utilizamos este apuntador para accesar a las otras dos<br />
interfaces IMediaControl y IMediaEv<strong>en</strong>t:<br />
IMediaControl *pMC = NULL;<br />
IMediaEv<strong>en</strong>tEx *pME = NULL;<br />
pGB->QueryInterface(IID_IMediaControl, (void **)&pMC);<br />
pGB->QueryInterface(IID_IMediaEv<strong>en</strong>tEx, (void **)&pME);<br />
Posteriorm<strong>en</strong>te se coloca el corazón <strong>de</strong>l programa<br />
pGB->R<strong>en</strong><strong>de</strong>rFile(L"C:\\Example.avi", NULL);<br />
pMediaControl->Run();<br />
El método IGraphBuil<strong>de</strong>r::R<strong>en</strong><strong>de</strong>rFile construye un gráfico <strong>de</strong> filtros que<br />
ejecutará el archivo especificado. El prefijo “L” convierte una ca<strong>de</strong>na ASCII a una ca<strong>de</strong>na<br />
Unico<strong>de</strong> .<br />
Después que el Manejador <strong>de</strong>l gráfico <strong>de</strong> filtros ha construido el grafico, este se<br />
<strong>en</strong>cu<strong>en</strong>tra listo para ejecutarse. El método Run lo lleva a cabo, y los datos multimedia<br />
comi<strong>en</strong>zan a circular <strong>en</strong> el grafico <strong>de</strong> filtros.<br />
El gráfico <strong>de</strong> filtros queda configurado <strong>en</strong>tonces como <strong>en</strong> la figura 5.23.<br />
Figura 5.23 Configuración automática <strong>de</strong>l gráfico <strong>de</strong> filtros<br />
En el pres<strong>en</strong>te trabajo se requiere añadir el filtro <strong>de</strong> efectos que construimos por lo<br />
cual se proce<strong>de</strong> a <strong>de</strong>sconectar el filtro r<strong>en</strong><strong>de</strong>rer y <strong>real</strong>izar la conexión <strong>de</strong> nuestro filtro como<br />
sigue:<br />
// Desconectamos los últimos dos filtros <strong>de</strong>l grafico<br />
EnumFilters("MPEG Vi<strong>de</strong>o Deco<strong>de</strong>r", PINDIR_SALIDA); //Busca el salida pin <strong>de</strong>l p<strong>en</strong>ultimo<br />
filtro...<br />
hr = pGB->Disconnect(pOutPin);<br />
EnumFilters("Vi<strong>de</strong>o R<strong>en</strong><strong>de</strong>rer", PINDIR_INPUT); //Busca el <strong>en</strong>tradapin <strong>de</strong>l ultimo filtro...<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,<br />
IID_IBaseFilter, reinterpret_cast(&pFX));<br />
hr = pGB->AddFilter(pFX, L"Image Effects");<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 <strong>en</strong>tradapin <strong>de</strong> filtro Efectos<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_SALIDA);<br />
EnumFilters("Vi<strong>de</strong>o R<strong>en</strong><strong>de</strong>rer", PINDIR_INPUT);<br />
hr = pGB->Connect(pOutPin, pInputPin);<br />
El Gráfico <strong>de</strong> filtros resultante <strong>en</strong>tonces se muestra <strong>en</strong> la figura 5.24.