Método IMFASFIndexer::GetCompletedIndex (wmcontainer.h)
Recupera el índice completado del objeto indexador ASF.
Sintaxis
HRESULT GetCompletedIndex(
[in] IMFMediaBuffer *pIIndexBuffer,
[in] QWORD cbOffsetWithinIndex
);
Parámetros
[in] pIIndexBuffer
Puntero a la interfaz IMFMediaBuffer de un búfer multimedia que recibe los datos de índice.
[in] cbOffsetWithinIndex
Desplazamiento de los datos que se van a recuperar, en bytes desde el inicio de los datos de índice. Establezca en 0 para la primera llamada. Si se necesitan llamadas posteriores (el búfer no es lo suficientemente grande como para contener todo el índice), establezca en el byte después del último recuperado.
Valor devuelto
El método devuelve un valor HRESULT. Entre los valores posibles se incluyen los que se indican en la tabla siguiente, entre otros.
Código devuelto | Descripción |
---|---|
|
El método se ha llevado a cabo de forma correcta. |
|
El índice no se confirmó antes de intentar obtener el índice completado. Para obtener más información, vea la sección Comentarios. |
Comentarios
Este método usa la mayor parte del búfer posible y actualiza la longitud del búfer adecuadamente.
Si pIIndexBuffer es lo suficientemente grande como para contener todo el búfer, cbOffsetWithinIndex debe ser 0 y la llamada debe realizarse solo una vez. De lo contrario, no debe haber espacios entre los búferes sucesivos.
El usuario debe escribir estos datos en el contenido en bytes cbOffsetFromIndexStart después del final del objeto de datos ASF. Puede llamar a IMFASFIndexer::GetIndexPosition para determinar la posición inicial del índice ASF.
Esta llamada no se realizará correctamente a menos que se haya llamado a IMFASFIndexer::CommitIndex . Después de llamar a GetCompletedIndex, el llamador debe llamar a IMFASFContentInfo::GenerateHeader y sobrescribir el encabezado ASF existente con el nuevo encabezado; de lo contrario, el encabezado ASF no coincidirá con el contenido y no se garantiza que el archivo se reproduzca correctamente.
No puede usar este método en un escenario de lectura de índices. Solo puede usar este método al escribir índices.
Ejemplos
En el ejemplo siguiente se muestra cómo escribir el índice ASF completo en una secuencia de bytes.
HRESULT WriteASFIndex(IMFASFIndexer *pIndex,IMFByteStream *pStream)
{
const DWORD cbChunkSize = 4096;
IMFMediaBuffer *pBuffer = NULL;
QWORD cbIndex = 0;
DWORD cbIndexWritten = 0;
HRESULT hr = pIndex->GetIndexWriteSpace(&cbIndex);
if (FAILED(hr))
{
goto done;
}
hr = MFCreateMemoryBuffer(cbChunkSize, &pBuffer);
if (FAILED(hr))
{
goto done;
}
while (cbIndexWritten < cbIndex)
{
BYTE *pData = NULL;
DWORD cbData = 0;
DWORD cbWritten = 0;
hr = pIndex->GetCompletedIndex(pBuffer, cbIndexWritten);
if (FAILED(hr))
{
goto done;
}
hr = pBuffer->Lock(&pData, NULL, &cbData);
if (FAILED(hr))
{
goto done;
}
hr = pStream->Write(pData, cbData, &cbWritten);
(void)pBuffer->Unlock();
if (FAILED(hr))
{
goto done;
}
cbIndexWritten += cbData;
}
done:
SafeRelease(&pBuffer);
return hr;
};
Requisitos
Requisito | Value |
---|---|
Cliente mínimo compatible | Windows Vista [solo aplicaciones de escritorio] |
Servidor mínimo compatible | Windows Server 2008 [solo aplicaciones de escritorio] |
Plataforma de destino | Windows |
Encabezado | wmcontainer.h |
Library | Mfuuid.lib |