мы создали пользовательский push-фильтр исходного кода / анализатора, который, как ожидается, будет работать в хронологическом порядке
.
Теперь все отлично, за исключением того, что фильтр не останавливаетсядоставить образцы, когда текущий
срез достиг своего конца.Рендеринг останавливается, но нисходящий фильтр продолжает потреблять
выборок.Фильтр доставляет образцы, пока не достигнет EOF.Это приводит к высокой загрузке процессора, поэтому приложение
просто непригодно для использования.
После долгих исследований я не смог найти подходящий механизм, который мог бы информировать мой фильтр
что обрезание закончено, поэтому фильтр необходимо остановить:
- Функция Deliver на подключенных выводах декодера всегда возвращает S_OK, то есть подключенный декодер
такжене знают, что IMediaSamples отбрасываются в нисходящем направлении
в графе фильтра нет очистки
используется интерфейс IMediaSeeking :: SetPositions, но используется только интерфейсСтартовые позиции установлены -
, наш всегда инструктируется воспроизводить до конца файла.
Я ожидаю, что при использовании IAMTimelineSrc :: SetMediaTimes (Start, Stop) из приложения
, это также установит время остановки, но этого не происходит.
Я также пытался манипулировать временной шкалой XTL, добавляя атрибуты «mstop» ко всему клипу в
, надеясь, что это будет означать установку позиции остановки,но безрезультатно
С точки зрения фильтров выходные буферы всегда доступны (поскольку IMediaSamples отбрасываются в нисходящем направлении),
, поэтому фильтр заполняет выборки настолько быстро, насколько это возможно.пока исходный файл не будет завершен.
Есть ли какой-нибудь способ, которым фильтр может определить, когда остановиться, или мы можем сделать что-нибудь со стороны приложения?
Большое спасибо
Tilo