IMFASFIndexer::GetCompletedIndex 메서드(wmcontainer.h)
ASF 인덱서 개체에서 완료된 인덱스를 검색합니다.
구문
HRESULT GetCompletedIndex(
[in] IMFMediaBuffer *pIIndexBuffer,
[in] QWORD cbOffsetWithinIndex
);
매개 변수
[in] pIIndexBuffer
인덱스 데이터를 수신하는 미디어 버퍼의 IMFMediaBuffer 인터페이스에 대한 포인터입니다.
[in] cbOffsetWithinIndex
검색할 데이터의 오프셋(인덱스 데이터 시작부터 바이트)입니다. 첫 번째 호출에 대해 0으로 설정합니다. 후속 호출이 필요한 경우(버퍼가 전체 인덱스 보유할 만큼 크지 않음) 마지막으로 검색한 후 바이트로 설정합니다.
반환 값
이 메서드는 HRESULT를 반환합니다. 가능한 값에는 다음 표에 있는 값이 포함되지만, 이에 국한되는 것은 아닙니다.
반환 코드 | Description |
---|---|
|
메서드가 성공했습니다. |
|
완료된 인덱스 가져오기 전에 인덱스가 커밋되지 않았습니다. 자세한 내용은 설명 부분을 참조하세요. |
설명
이 메서드는 가능한 한 많은 버퍼를 사용하고 버퍼의 길이를 적절하게 업데이트합니다.
pIIndexBuffer가 전체 버퍼를 포함할 만큼 큰 경우 cbOffsetWithinIndex는 0이어야 하며 호출을 한 번만 수행해야 합니다. 그렇지 않으면 연속 버퍼 사이에 간격이 없어야 합니다.
사용자는 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 |
라이브러리 | Mfuuid.lib |