Здравствуйте, Melamed, Вы писали:
M>Нужен покадровый просмотр видео. M>Как я понял из документации покадровый просмотр видео можно осуществить либо с помощью интерфейса IVideoFrameStep
Все верно. Это штатное и, пожалуй, единственное средство которое есть из коробки.
M>либо с помощью метода IMediaSeeking::SetPosition, предварительно установив формат времени в TIME_FORMAT_FRAME.
Сам граф и его IMediaSeeking никак не обрабатывают вызов SetPosition, а делегируют его пинам сплитера. Дальше все зависит от него. Подавляющее большинство сплитеров поддерживают только TIME_FORMAT_MEDIA_TIME. Сплитеры же парсят сам видео контейнер, так что на самом деле все зависит от формата и разработчика.
M>В первом случае удается только реализовать только покадровый просмотр вперед и при этом слышны звуки, которые записаны в саундтреке, когда на экране данный кадр.
Ну просто не рендерите цепочку фильтров ответственных за звук.
M>Во втором случае при вызове метода IMediaSeeking::SetTimeFormat c аргументом TIME_FORMAT_FRAME возникает ошибка "Неверный параметр".
Значит ваш сплитер не поддерживает этот формат позиционирования.
M>Желательно организовать покадровый просмотр видео вперед и назад без звукового сопровождения, если на видео имеется саундтрек.
В рамках DirectShow, как готового фреймворка (без программирования собственного движка), проигрывание назад невозможно, в силу особенностей архитектурных решений положенных в его основу.