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

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

Saved successfully!

Ooh no, something went wrong!