Método IMFASFIndexer::GetCompletedIndex (wmcontainer.h)
Recupera o índice concluído do objeto indexador ASF.
Sintaxe
HRESULT GetCompletedIndex(
[in] IMFMediaBuffer *pIIndexBuffer,
[in] QWORD cbOffsetWithinIndex
);
Parâmetros
[in] pIIndexBuffer
Ponteiro para a interface IMFMediaBuffer de um buffer de mídia que recebe os dados do índice.
[in] cbOffsetWithinIndex
O deslocamento dos dados a serem recuperados, em bytes desde o início dos dados do índice. Defina como 0 para a primeira chamada. Se forem necessárias chamadas subsequentes (o buffer não é grande o suficiente para manter o índice inteiro), defina como o byte após o último recuperado.
Retornar valor
O método retorna um HRESULT. Os possíveis valores incluem, mas sem limitação, aqueles na tabela a seguir.
Código de retorno | Descrição |
---|---|
|
O método foi bem-sucedido. |
|
O índice não foi confirmado antes de tentar obter o índice concluído. Para obter mais informações, consulte Comentários. |
Comentários
Esse método usa o máximo possível do buffer e atualiza o comprimento do buffer adequadamente.
Se pIIndexBuffer for grande o suficiente para conter todo o buffer, cbOffsetWithinIndex deverá ser 0 e a chamada precisará ser feita apenas uma vez. Caso contrário, não deve haver lacunas entre buffers sucessivos.
O usuário deve gravar esses dados no conteúdo em cbOffsetFromIndexStart bytes após o final do objeto de dados ASF. Você pode chamar IMFASFIndexer::GetIndexPosition para determinar a posição inicial do índice ASF.
Essa chamada não terá êxito, a menos que IMFASFIndexer::CommitIndex tenha sido chamado. Depois de chamar GetCompletedIndex, o chamador deve chamar IMFASFContentInfo::GenerateHeader e substituir o cabeçalho ASF existente pelo novo cabeçalho; caso contrário, o cabeçalho ASF não corresponderá ao conteúdo e não há garantia de que o arquivo seja reproduzido corretamente.
Você não pode usar esse método em um cenário de leitura de índice. Você só pode usar esse método ao escrever índices.
Exemplos
O exemplo a seguir mostra como gravar o índice ASF completo em um fluxo 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 | Valor |
---|---|
Cliente mínimo com suporte | Windows Vista [somente aplicativos da área de trabalho] |
Servidor mínimo com suporte | Windows Server 2008 [somente aplicativos da área de trabalho] |
Plataforma de Destino | Windows |
Cabeçalho | wmcontainer.h |
Biblioteca | Mfuuid.lib |