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
S_OK
El método se ha llevado a cabo de forma correcta.
MF_E_INDEX_NOT_COMMITTED
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

Consulte también

Objeto de índice de ASF

IMFASFIndexer

Usar el indexador para escribir un nuevo índice