MÉTHODE IMFASFIndexer ::GetCompletedIndex (wmcontainer.h)
Récupère l’index terminé à partir de l’objet d’indexeur ASF.
Syntaxe
HRESULT GetCompletedIndex(
[in] IMFMediaBuffer *pIIndexBuffer,
[in] QWORD cbOffsetWithinIndex
);
Paramètres
[in] pIIndexBuffer
Pointeur vers l’interface IMFMediaBuffer d’une mémoire tampon multimédia qui reçoit les données d’index.
[in] cbOffsetWithinIndex
Décalage des données à récupérer, en octets à partir du début des données d’index. Définissez sur 0 pour le premier appel. Si les appels suivants sont nécessaires (la mémoire tampon n’est pas suffisamment grande pour contenir l’index entier), définissez sur l’octet suivant le dernier récupéré.
Valeur retournée
Cette méthode retourne un code HRESULT. Les valeurs possibles sont notamment celles figurant dans le tableau suivant.
Code de retour | Description |
---|---|
|
S_OK |
|
L’index n’a pas été commité avant de tenter d’obtenir l’index terminé. Pour plus d'informations, consultez la section Notes. |
Remarques
Cette méthode utilise autant de mémoire tampon que possible et met à jour la longueur de la mémoire tampon de manière appropriée.
Si pIIndexBuffer est suffisamment grand pour contenir la mémoire tampon entière, cbOffsetWithinIndex doit être 0 et l’appel ne doit être effectué qu’une seule fois. Sinon, il ne doit y avoir aucun écart entre les mémoires tampons successives.
L’utilisateur doit écrire ces données dans le contenu dans les octets cbOffsetFromIndexStart après la fin de l’objet de données ASF. Vous pouvez appeler IMFASFIndexer ::GetIndexPosition pour déterminer la position de début de l’index ASF.
Cet appel ne réussira que si IMFASFIndexer ::CommitIndex a été appelé. Après avoir appelé GetCompletedIndex, l’appelant doit appeler IMFASFContentInfo ::GenerateHeader et remplacer l’en-tête ASF existant par le nouvel en-tête ; sinon, l’en-tête ASF ne correspond pas au contenu et la lecture du fichier n’est pas garantie.
Vous ne pouvez pas utiliser cette méthode dans un scénario de lecture d’index. Vous ne pouvez utiliser cette méthode que lors de l’écriture d’index.
Exemples
L’exemple suivant montre comment écrire l’index ASF complet dans un flux d’octets.
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;
};
Configuration requise
Condition requise | Valeur |
---|---|
Client minimal pris en charge | Windows Vista [applications de bureau uniquement] |
Serveur minimal pris en charge | Windows Server 2008 [applications de bureau uniquement] |
Plateforme cible | Windows |
En-tête | wmcontainer.h |
Bibliothèque | Mfuuid.lib |