Creación y configuración del indexador
El indexador ASF es un componente de capa WMContainer que se usa para leer o escribir objetos de índice en un archivo de formato de sistemas avanzados (ASF). En este tema se proporciona información sobre cómo crear el objeto de indexador predeterminado proporcionado por Media Foundation.
Para obtener información sobre la estructura de un archivo ASF, vea Estructura de archivos ASF.
Para crear e inicializar el indexador ASF
Llame a la función MFCreateASFIndexer para recibir un puntero IMFASFIndexer al objeto indexador.
Llame a IMFASFIndexer::SetFlags para especificar el modo de lectura o escritura para el objeto indexador. De forma predeterminada, el indexador está configurado para la búsqueda directa.
Uso Marca Lectura (búsqueda hacia delante) Cero (valor predeterminado) Lectura (búsqueda inversa) MFASF_INDEXER_READ_FOR_REVERSEPLAYBACK Escritura MFASF_INDEXER_WRITE_NEW_INDEX Nota:
No se puede usar la misma instancia del indexador para leer y escribir. Debe configurar el indexador para uno u otro.
Llame a IMFASFIndexer::Initialize para inicializar el indexador especificando el puntero IMFASFContentInfo del objeto ContentInfo que describe el archivo que se va a escribir o leer. El objeto ContentInfo contiene información que constituye el objeto de encabezado ASF. El objeto indexador requiere un objeto ContentInfo válido antes de generar o leer entradas de índice de un archivo ASF.
En el ejemplo de código siguiente se muestra cómo una aplicación puede crear e inicializar el objeto indexador para trabajar con contenido asF específico. El objeto ContentInfo representa el objeto de encabezado ASF; el contenido se pasa como una secuencia de bytes.
HRESULT CreateASFIndexer(
IMFASFContentInfo* pContentInfo,
DWORD dwFlags,
IMFASFIndexer** ppIndexer
)
{
*ppIndexer = NULL;
IMFASFIndexer *pIndexer = NULL;
HRESULT hr = MFCreateASFIndexer(&pIndexer);
if (FAILED(hr))
{
goto done;
}
hr = pIndexer->SetFlags(dwFlags);
if (FAILED(hr))
{
goto done;
}
hr = pIndexer->Initialize(pContentInfo);
if (FAILED(hr))
{
goto done;
}
// Return the object to the caller.
*ppIndexer = pIndexer;
(*ppIndexer)->AddRef();
done:
// Clean up.
SafeRelease(&pIndexer);
return hr;
}
Temas relacionados