Génération automatique d’une table des matières
Cette rubrique montre comment utiliser le composant Générateur de table des matières (GÉNÉRATEUR TOC) pour générer automatiquement une table des matières pour un fichier vidéo.
ToC Generator est un objet multimédia DirectX (DMO). Pour utiliser le DMO du générateur de toc, créez un graphique de filtre DirectX qui a un fichier vidéo comme source. Insérez le DMO du générateur de toc dans le graphe de filtre, puis exécutez le graphique. Vous pouvez ensuite obtenir la table des matières générée automatiquement à partir du DMO du générateur de table des matières.
La procédure suivante décrit les étapes plus en détail.
Appelez CoCreateInstance pour créer un objet Filter Graph (CLSID_FilterGraph) et obtenir une interface IGraphBuilder .
Appelez CoCreateInstance pour créer un objet Wrapper Filter DMO (CLSID_DMOWrapperFilter) et obtenir une interface IDMOWrapperFilter .
Passez CLSID_CTocGeneratorDmo à la méthode Init de votre filtre wrapper DMO. Cela crée un DMO générateur de toc et l’encapsule dans votre filtre de wrapper DMO.
Appelez la méthode AddFilter de votre interface IGraphBuilder pour ajouter le DMO générateur toc encapsulé au graphe de filtre.
Notes
IGraphBuilder hérite d’IFilterGraph.
Appelez la méthode AddSourceFilter de votre interface IGraphBuilder pour créer un filtre de souce et l’ajouter au graphique.
Énumérez les broches sur le filtre wrapper DMO et le filtre source. Cela implique l’obtention d’interfaces IEnumPins et d’interfaces IPin .
Connectez le filtre source et le filtre wrapper en appelant la méthode Connect de votre interface IGraphBuilder .
Terminez le graphe en appelant la méthode Render de votre interface IGraphBuilder .
Exécutez le graphique (IMediaControl::Run) et attendez qu’il se termine (IMediaEvent::WaitForCompletion).
Obtenez une interface IPropertyStore sur votre wrapper de filtre DMO et obtenez la valeur de la propriété MFPKEY_TOCGENERATOR_TOCREADY . Répétez cette opération si nécessaire jusqu’à ce que la table des matières soit prête.
Utilisez votre interface IPropertyStore pour obtenir la valeur de la propriété MFPKEY_TOCGENERATOR_TOCOBJECT . Cette propriété est une interface IToc qui représente la table des matières générée automatiquement.
Le code suivant illustre la procédure de génération automatique d’une table des matières. Le code utilise trois fonctions d’assistance (BuildGraph, RunGraphAndWait et GetToc) affichées dans d’autres pages de cette documentation.
#include <dshow.h>
#include <dmodshow.h>
#include <wmcodecdsp.h>
#include <dmoreg.h>
#include <propsys.h>
#include <propidl.h>
#include <initguid.h>
HRESULT GetToc(IDMOWrapperFilter* pWrap, IToc** ppToc);
HRESULT RunGraphAndWait(IGraphBuilder* pGraph);
HRESULT BuildGraph(IGraphBuilder* pGraph, IDMOWrapperFilter* pWrap);
WCHAR g_sourceFile[] = L"c:\\experiment\\Seattle.wmv";
void main()
{
HRESULT hr = E_FAIL;
hr = CoInitialize(NULL);
if(SUCCEEDED(hr))
{
IGraphBuilder* pBuilder = NULL;
hr = CoCreateInstance(CLSID_FilterGraph, NULL, CLSCTX_INPROC_SERVER,
IID_IGraphBuilder, (VOID**)&pBuilder);
if(SUCCEEDED(hr))
{
IDMOWrapperFilter* pWrap = NULL;
hr = CoCreateInstance(CLSID_DMOWrapperFilter, NULL, CLSCTX_INPROC,
IID_IDMOWrapperFilter, (VOID**)&pWrap);
if(SUCCEEDED(hr))
{
hr = pWrap->Init(CLSID_CTocGeneratorDmo, DMOCATEGORY_VIDEO_EFFECT);
if(SUCCEEDED(hr))
{
hr = BuildGraph(pBuilder, pWrap);
if(SUCCEEDED(hr))
{
hr = RunGraphAndWait(pBuilder);
if(SUCCEEDED(hr))
{
IToc* pToc = NULL;
hr = GetToc(pWrap, &pToc);
if(SUCCEEDED(hr))
{
// Inspect the table of contents by calling IToc methods.
pToc->Release();
pToc = NULL;
}
}
}
}
pWrap->Release();
pWrap = NULL;
}
pBuilder->Release();
pBuilder = NULL;
}
CoUninitialize();
}
}
Rubriques connexes