Поделиться через


Создание композиций и дорожек групп

[Функция, связанная с этой страницей DirectShow, является устаревшей функцией. Он был заменен MediaPlayer, IMFMediaEngine, и аудио/ видео захвата в Media Foundation. Эти функции оптимизированы для Windows 10 и Windows 11. Корпорация Майкрософт настоятельно рекомендует использовать в новом коде MediaPlayer, IMFMediaEngine и аудио/видеозахват в Media Foundation вместо DirectShow, когда это возможно. Корпорация Майкрософт предлагает переписать существующий код, в котором используются устаревшие API, чтобы по возможности использовать новые API.]

[Этот API не поддерживается и может быть изменен или недоступен в будущем.]

Группы, композиции и дорожки — это промежуточные уровни между временная шкала и исходными клипами. Они отличаются типом объекта, который они могут содержать.

  • Дорожки содержат исходные объекты.
  • Композиции содержат дорожки и другие композиции, но не исходные объекты.
  • Группы — это композиции верхнего уровня. Группы содержат композиции и дорожки, но композиции не могут содержать группы.
  • Виртуальная дорожка — это любой объект, который может находиться внутри композиции или группы. Сюда входят треки и композиции.

Эти объекты предоставляют следующие интерфейсы:

Интерфейс Предоставлено
IAMTimelineTrack Дорожки
IAMTimelineVirtualTrack Треки, композиции
IAMTimelineComp Композиции, группы
IAMTimelineGroup Группы

 

Эти интерфейсы содержат методы для добавления объектов в временная шкала.

Например, следующий код вставляет новую дорожку в группу. Как показано в предыдущей таблице, группа считается разновидностью композиции, а дорожка — разновидностью виртуальной дорожки. Поэтому, чтобы вставить дорожку в группу, необходимо запросить у группы ее интерфейс IAMTimelineComp и вызвать метод 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);

Второй параметр VTrackInsBefore указывает приоритет виртуальной дорожки. Уровни приоритета начинаются с нуля. Если указать значение –1, виртуальная дорожка вставляется в конец списка приоритетов. Если вы указываете значение, в котором уже есть виртуальная дорожка, все, начиная с этого момента, перемещается вниз по списку на один уровень приоритета. Не вставляйте виртуальную дорожку с приоритетом, превышающим число виртуальных дорожек, так как это приведет к неопределенному поведению.

Чтобы окончательно удалить объект из временная шкала, вызовите для объекта IAMTimelineObj::RemoveAll. Этот метод удаляет объект и все его дочерние элементы. Чтобы удалить объект с целью повторного его создания в другом месте временная шкала, вызовите вместо него метод IAMTimelineObj::Remove. В отличие от RemoveAll, этот метод не удаляет дочерние элементы объекта. Чтобы удалить все данные из временная шкала, вызовите IAMTimeline::ClearAllGroups.

Создание временной шкалы