Compartilhar via


Gerando um sumário automaticamente

Este tópico demonstra como usar o componente Gerador de Sumário (Gerador de TOC) para gerar automaticamente um sumário para um arquivo de vídeo.

O Gerador TOC é um DMO (Objeto de Mídia DirectX). Para usar o DMO do Gerador TOC, crie um grafo de filtro DirectX que tenha um arquivo de vídeo como sua origem. Insira o DMO do Gerador TOC no grafo de filtro e execute o grafo. Em seguida, você pode obter o sumário gerado automaticamente do DMO do Gerador toc.

O procedimento a seguir fornece as etapas com mais detalhes.

  1. Chame CoCreateInstance para criar um objeto Filter Graph (CLSID_FilterGraph) e obter uma interface IGraphBuilder .

  2. Chame CoCreateInstance para criar um objeto DMO Wrapper Filter (CLSID_DMOWrapperFilter) e obter uma interface IDMOWrapperFilter .

  3. Passe CLSID_CTocGeneratorDmo para o método Init do filtro wrapper de DMO. Isso cria um DMO do Gerador de TOC e o encapsula no filtro de wrapper de DMO.

  4. Chame o método AddFilter da interface IGraphBuilder para adicionar o DMO do gerador TOC encapsulado ao grafo de filtro.

    Observação

    IGraphBuilder herda do IFilterGraph.

     

  5. Chame o método AddSourceFilter da interface IGraphBuilder para criar um filtro souce e adicioná-lo ao grafo.

  6. Enumerar pinos no filtro de wrapper DMO e no filtro de origem. Isso envolve a obtenção de interfaces IEnumPins e interfaces IPin .

  7. Conecte o filtro de origem e o filtro wrapper chamando o método Connect da interface IGraphBuilder .

  8. Conclua o grafo chamando o método Render da interface IGraphBuilder .

  9. Execute o grafo (IMediaControl::Run) e aguarde até que ele seja concluído (IMediaEvent::WaitForCompletion).

  10. Obtenha uma interface IPropertyStore em seu wrapper de filtro DMO e obtenha o valor da propriedade MFPKEY_TOCGENERATOR_TOCREADY . Repita se necessário até que o sumário esteja pronto.

  11. Use sua interface IPropertyStore para obter o valor da propriedade MFPKEY_TOCGENERATOR_TOCOBJECT . Essa propriedade é uma interface IToc que representa o sumário gerado automaticamente.

O código a seguir demonstra o procedimento para gerar um sumário automaticamente. O código usa três funções auxiliares (BuildGraph, RunGraphAndWait e GetToc) que são mostradas em outras páginas desta documentação.

#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();
   }
}

Função BuildGraph para gerar um sumário

Função GetToc para gerar um sumário

Função RunGraphAndWait para gerar um sumário

Guia de Programação do Analisador de Sumário