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 64<br />
*ppv = (void *)(IPersistFlujo *)this;<br />
return NOERROR;<br />
} else {<br />
return CTransInPlaceFilter::NonDelegatingQueryInterface(riid, ppv);<br />
}<br />
} // NonDelegatingQueryInterface<br />
5.6.7 Funciones miembro<br />
Se <strong>de</strong>b<strong>en</strong> escribir algunas funciones miembro necesarias para el proceso <strong>de</strong><br />
conexión, tales como ajustar el tamaño <strong>de</strong>l asignador o proveer los tipos <strong>de</strong> media que se<br />
utilizarán.<br />
5.6.7.1 Función miembro Transform<br />
La función miembro Transform <strong>de</strong> nuestra clase <strong>de</strong>rivada se llama cada vez que el<br />
método IMemInputPin::Receive <strong>en</strong> el pin <strong>en</strong>trada <strong>de</strong>l filtro es llamado para transferir otra<br />
muestra. Aquí se coloca el código o <strong>de</strong>s<strong>de</strong> aquí se llaman las funciones que <strong>real</strong>izan las<br />
transformaciones requeridas, <strong>en</strong> nuestro caso los distintos procesami<strong>en</strong>tos sobre el vi<strong>de</strong>o.<br />
5.6.7.2 Función miembro CheckInputType<br />
Durante la conexión <strong>de</strong>l pin, la función miembro CheckMediaType <strong>de</strong>l pin <strong>en</strong>trada<br />
es llamada para <strong>de</strong>terminar cual <strong>de</strong> los tipos <strong>de</strong> media propuestos es aceptable. La función<br />
miembro CTransformInputPin::CheckMediaType es implem<strong>en</strong>tada para llamar a la<br />
función miembro CheckInputType <strong>de</strong> la clase filtro <strong>de</strong>rivada con el tipo <strong>de</strong> media. Se <strong>de</strong>be<br />
implem<strong>en</strong>tar para acomodar los tipos <strong>de</strong> media que nuestro filtro pue<strong>de</strong> manejar. El<br />
sigui<strong>en</strong>te código muestra parte <strong>de</strong> la función miembro Cgargle::CheckInputType, la cual<br />
rechaza cualquier tipo <strong>de</strong> media que no sea MEDIATYPE_Audio:<br />
HRESULT CGargle::CheckInputType(const CMediaType *pmt) {<br />
...<br />
// Reject non-Audio type<br />
if (pmt->majortype != MEDIATYPE_Audio) {<br />
return E_INVALIDARG;<br />
}<br />
5.6.7.3 Función miembro CheckTransform<br />
Los filtros transform pue<strong>de</strong>n modificar el tipo <strong>de</strong> media que va <strong>de</strong>l pin <strong>en</strong>trada hacia<br />
el pin salida. Entonces es necesario revisar con la función miembro CheckTransform para<br />
verificar que la transformación <strong>de</strong>s<strong>de</strong> el pin <strong>en</strong>trada hacia el pin salida es valida.<br />
5.6.7.4 Función miembro Deci<strong>de</strong>BufferSize<br />
Los filtros <strong>de</strong> transformación pue<strong>de</strong>n requerir el ajuste <strong>de</strong> las propieda<strong>de</strong>s <strong>de</strong>l<br />
asignador hacia el cual ellos <strong>real</strong>izarán la copia. En este caso, la función miembro<br />
CBaseSalidaPin::Deci<strong>de</strong>BufferSize es llamada <strong>de</strong>s<strong>de</strong> la función miembro<br />
CBaseSalidaPin::Deci<strong>de</strong>Allocator, y la clase <strong>de</strong>rivada ajusta los requerimi<strong>en</strong>tos para el