Создание композиций и дорожек групп
[Функция, связанная с этой страницей DirectShow, является устаревшей функцией. Он был заменен MediaPlayer, IMFMediaEngine, и аудио/ видео захвата в Media Foundation. Эти функции оптимизированы для Windows 10 и Windows 11. Корпорация Майкрософт настоятельно рекомендует использовать в новом коде MediaPlayer, IMFMediaEngine и аудио/видеозахват в Media Foundation вместо DirectShow, когда это возможно. Корпорация Майкрософт предлагает переписать существующий код, в котором используются устаревшие API, чтобы по возможности использовать новые API.]
[Этот API не поддерживается и может быть изменен или недоступен в будущем.]
Группы, композиции и дорожки — это промежуточные уровни между временная шкала и исходными клипами. Они отличаются типом объекта, который они могут содержать.
- Дорожки содержат исходные объекты.
- Композиции содержат дорожки и другие композиции, но не исходные объекты.
- Группы — это композиции верхнего уровня. Группы содержат композиции и дорожки, но композиции не могут содержать группы.
- Виртуальная дорожка — это любой объект, который может находиться внутри композиции или группы. Сюда входят треки и композиции.
Эти объекты предоставляют следующие интерфейсы:
Интерфейс | Предоставлено |
---|---|
IAMTimelineTrack | Дорожки |
IAMTimelineVirtualTrack | Треки, композиции |
IAMTimelineComp | Композиции, группы |
IAMTimelineGroup | Группы |
Эти интерфейсы содержат методы для добавления объектов в временная шкала.
- IAMTimeline::AddGroup: вставляет группу в временная шкала.
- IAMTimelineComp::VTrackInsBefore: вставляет виртуальную дорожку в композицию или группу.
- IAMTimelineTrack::SrcAdd: вставляет источник в дорожку.
Например, следующий код вставляет новую дорожку в группу. Как показано в предыдущей таблице, группа считается разновидностью композиции, а дорожка — разновидностью виртуальной дорожки. Поэтому, чтобы вставить дорожку в группу, необходимо запросить у группы ее интерфейс 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.
Связанные темы