IMFASFIndexer::GetCompletedIndex メソッド (wmcontainer.h)
ASF インデクサー オブジェクトから完成したインデックスを取得します。
構文
HRESULT GetCompletedIndex(
[in] IMFMediaBuffer *pIIndexBuffer,
[in] QWORD cbOffsetWithinIndex
);
パラメーター
[in] pIIndexBuffer
インデックス データを受信するメディア バッファーの IMFMediaBuffer インターフェイスへのポインター。
[in] cbOffsetWithinIndex
取得するデータのオフセット (インデックス データの先頭からのバイト単位)。 最初の呼び出しの場合は 0 に設定します。 後続の呼び出しが必要な場合 (バッファーはインデックス全体を保持するのに十分な大きさではありません)、最後に取得されたバイトに設定します。
戻り値
このメソッドは HRESULT を返します。 有効な値を次の表に示しますが、これ以外にもあります。
リターン コード | 説明 |
---|---|
|
メソッドが成功しました。 |
|
完了したインデックスの取得を試みる前に、インデックスがコミットされませんでした。 詳細については、「解説」を参照してください。 |
注釈
このメソッドは、できるだけ多くのバッファーを使用し、バッファーの長さを適切に更新します。
pIIndexBuffer がバッファー全体を格納するのに十分な大きさの場合、cbOffsetWithinIndex は 0 にする必要があり、呼び出しは 1 回だけ行う必要があります。 それ以外の場合は、連続するバッファー間にギャップはありません。
ユーザーは、ASF データ オブジェクトの末尾の後の cbOffsetFromIndexStart バイトのコンテンツにこのデータを書き込む必要があります。 IMFASFIndexer::GetIndexPosition を呼び出して、ASF インデックスの開始位置を決定できます。
IMFASFIndexer::CommitIndex が呼び出されていない限り、この呼び出しは成功しません。 GetCompletedIndex を呼び出した後、呼び出し元は IMFASFContentInfo::GenerateHeader を呼び出し、既存の ASF ヘッダーを新しいヘッダーで上書きする必要があります。それ以外の場合、ASF ヘッダーはコンテンツと一致せず、ファイルが正しく再生されるとは限りません。
このメソッドは、インデックスの読み取りシナリオでは使用できません。 このメソッドは、インデックスを作成する場合にのみ使用できます。
例
次の例は、ASF インデックス全体をバイト ストリームに書き込む方法を示しています。
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;
};
要件
要件 | 値 |
---|---|
サポートされている最小のクライアント | Windows Vista [デスクトップ アプリのみ] |
サポートされている最小のサーバー | Windows Server 2008 [デスクトップ アプリのみ] |
対象プラットフォーム | Windows |
ヘッダー | wmcontainer.h |
Library | Mfuuid.lib |