Как предотвратить сглаживание кадров графа DirectShow при использовании запаздывающего фильтра? - PullRequest
2 голосов
/ 15 января 2009

У меня есть график DirectShow с фильтром SampleGrabber, выполняющим некоторую обработку. Обработка занимает до 50 мс, поэтому часто скорость воспроизведения ниже. Обработка может быть включена и выключена.

Моя проблема в том, что если обработка была включена некоторое время, когда я ее выключал, видео воспроизводилось как можно быстрее, пока не достигло определенной точки. Предположительно, в этой точке время кадра соответствует времени в потоке, и больше нет задержки.

Как я могу предотвратить это, чтобы при выключении обработки воспроизведение происходило с нормальной скоростью? Можно ли отключить часы потока во время обработки данных? Или, возможно, отметка времени сэмплов, выходящих из фильтра SampleGrabber снова, с добавленной дополнительной задержкой?

Кто-нибудь знает правильный способ сделать это?

Edit:

Я использовал метод изменения времени выборки, как показано в ответе ниже, но у меня были некоторые проблемы с поиском, а также с вычислением временных меток выборки.

Я обнаружил, что лучшим способом было бы реализовать собственные опорные часы и остановить их, если обработка заняла слишком много времени.

1 Ответ

0 голосов
/ 15 января 2009

Пока вы используете ISampleGrabberCB :: SampleCB , а не ISampleGrabberCB :: BufferCallback , вы можете просто обновить временные метки представления IMediaSample, чтобы они были такими, какие вы хотите, используя IMediaSample :: SetTime . Вам нужно использовать SampleCB, так как он дает вам указатель на фактические сэмплы, тогда как BufferCB копирует сэмплы до того, как вы их получите, что будет означать, что вы только обновляли копию.

Отключение часов, вероятно, не поможет вам, потому что это просто сделает график максимально быстрым. Вы можете попробовать изменить скорость воспроизведения, используя IMediaSeeking :: SetRate , но имейте в виду, что многие фильтры не поддерживают изменения скорости. Вы также можете реализовать собственные часы, которые варьируются в зависимости от ваших точных требований.

...