Compartilhar via


Criando composições e faixas de grupos

[O recurso associado a esta página, DirectShow, é um recurso herdado. Ele foi substituído por MediaPlayer, IMFMediaEngine e Captura de Áudio/Vídeo na Media Foundation. Esses recursos foram otimizados para Windows 10 e Windows 11. A Microsoft recomenda fortemente que o novo código use MediaPlayer, IMFMediaEngine e Captura de Áudio/Vídeo no Media Foundation em vez de DirectShow, quando possível. A Microsoft sugere que o código existente que usa as APIs herdadas seja reescrito para usar as novas APIs, se possível.]

[Essa API não tem suporte e pode ser alterada ou indisponível no futuro.]

Grupos, composições e faixas são as camadas intermediárias entre o linha do tempo e os clipes de origem. Eles são diferenciados pelo tipo de objeto que podem conter.

  • As faixas contêm objetos de origem.
  • As composições contêm faixas e outras composições, mas não objetos de origem.
  • Os grupos são composições de nível superior. Os grupos contêm composições e faixas, mas as composições não podem conter grupos.
  • Uma faixa virtual é qualquer objeto que pode residir dentro de uma composição ou um grupo. Isso inclui faixas e composições.

Esses objetos expõem as seguintes interfaces:

Interface Exposto por
IAMTimelineTrack Faixas
IAMTimelineVirtualTrack Faixas, Composições
IAMTimelineComp Composições, Grupos
IAMTimelineGroup Grupos

 

Essas interfaces contêm os métodos para adicionar objetos à linha do tempo.

Por exemplo, o código a seguir insere uma nova faixa em um grupo. Conforme mostrado na tabela anterior, um grupo é considerado uma espécie de composição e uma faixa é uma espécie de faixa virtual. Portanto, para inserir a faixa no grupo, você deve consultar o grupo para sua interface IAMTimelineComp e chamar o método IAMTimelineComp::VTrackInsBefore .

IAMTimelineGroup    *pGroup;
// Create a new group (not shown). 

IAMTimelineComp     *pComp = NULL;
IAMTimelineObj      *pTrackObj = NULL;

pTL->CreateEmptyNode(&pTrackObj, TIMELINE_MAJOR_TYPE_TRACK);
pGroup->QueryInterface(IID_IAMTimelineComp, (void **)&pComp);
pComp->VTrackInsBefore(pTrackObj, 0);

O segundo parâmetro para VTrackInsBefore especifica a prioridade da faixa virtual. Os níveis de prioridade começam em zero. Se você especificar o valor –1, a faixa virtual será inserida no final da lista de prioridades. Se você especificar um valor em que já existe uma faixa virtual, tudo desse ponto em passa para baixo na lista por um nível de prioridade. Não insira uma faixa virtual em uma prioridade maior que o número de faixas virtuais, pois ela causará um comportamento indefinido.

Para excluir um objeto permanentemente do linha do tempo, chame IAMTimelineObj::RemoveAll no objeto . Esse método remove o objeto e todos os seus filhos. Para remover um objeto com a finalidade de reinserir em outro lugar no linha do tempo, chame IAMTimelineObj::Remove. Ao contrário de RemoveAll, esse método não exclui os filhos do objeto. Para remover tudo do linha do tempo, chame IAMTimeline::ClearAllGroups.

Construindo uma linha do tempo