Partager via


Création et configuration de l’indexeur

L’indexeur ASF est un composant de couche WMContainer utilisé pour lire ou écrire des objets index dans un fichier ASF (Advanced Systems Format). Cette rubrique fournit des informations sur la création de l’objet d’indexeur par défaut fourni par Media Foundation.

Pour plus d’informations sur la structure d’un fichier ASF, consultez Structure de fichier ASF.

Pour créer et initialiser l’indexeur ASF

  1. Appelez la fonction MFCreateASFIndexer pour recevoir un pointeur IMFASFIndexer vers l’objet indexeur.

  2. Appelez IMFASFIndexer::SetFlags pour spécifier le mode de lecture ou d’écriture pour l’objet indexeur. Par défaut, l’indexeur est configuré pour la recherche vers l’avant.

    Utilisation Indicateur
    Lecture (recherche vers l’avant) Zéro (valeur par défaut)
    Lecture (recherche inversée) MFASF_INDEXER_READ_FOR_REVERSEPLAYBACK
    Écriture MFASF_INDEXER_WRITE_NEW_INDEX

     

    Notes

    La même instance de l’indexeur ne peut pas être utilisée pour la lecture et l’écriture. Vous devez configurer l’indexeur pour l’un ou l’autre.

     

  3. Appelez IMFASFIndexer::Initialize pour initialiser l’indexeur en spécifiant le pointeur IMFASFContentInfo de l’objet ContentInfo qui décrit le fichier à écrire ou à lire. L’objet ContentInfo contient des informations qui constituent l’objet d’en-tête ASF. L’objet indexeur nécessite un objet ContentInfo valide avant de générer ou de lire des entrées d’index d’un fichier ASF.

L’exemple de code suivant montre comment une application peut créer et initialiser l’objet d’indexeur pour fonctionner avec du contenu ASF spécifique. L’objet ContentInfo représente l’objet d’en-tête ASF ; le contenu est passé en tant que flux d’octets.

HRESULT CreateASFIndexer(
    IMFASFContentInfo* pContentInfo, 
    DWORD dwFlags,
    IMFASFIndexer** ppIndexer
    )
{
    *ppIndexer = NULL;

    IMFASFIndexer *pIndexer = NULL;

    HRESULT hr = MFCreateASFIndexer(&pIndexer);
    if (FAILED(hr))
    {
        goto done;
    }

    hr = pIndexer->SetFlags(dwFlags);
    if (FAILED(hr))
    {
        goto done;
    }

    hr =  pIndexer->Initialize(pContentInfo);
    if (FAILED(hr))
    {
        goto done;
    }

    // Return the object to the caller.
    *ppIndexer = pIndexer;
    (*ppIndexer)->AddRef();

done:
    // Clean up.
    SafeRelease(&pIndexer);
    return hr;
}

Indexeur ASF

Utilisation de l’indexeur pour rechercher dans un fichier ASF

Utilisation de l’indexeur pour écrire un nouvel index