Вставить фильтр между Avi Muxer и File Writer? - PullRequest
0 голосов
/ 26 июня 2018

Можно ли вставить фильтр между фильтром Avi Mux и фильтром средства записи файлов. Построитель графиков вставляет и автоматически соединяет оба фильтра, вызывая ICaptureGraphBuilder2 :: SetOutputFileName. Поскольку интерфейс средства записи файлов относится к типу IFileSinkFilter (не является производным от IBaseFilter), этот интерфейс не предоставляет никаких функций, таких как Disconnect или Connect, или для перечисления выводов фильтра. Поэтому я не нахожу способа вставить фильтр между этими двумя фильтрами. Было ли это намеренно для MS иметь оба фильтра как некий атомный конструкт? Или есть другой способ справиться с этим.

Ответы [ 2 ]

0 голосов
/ 13 июля 2018

Фильтр записи файлов Microsoft предоставляет интерфейс IBaseFilter, а также IFileSinkFilter (и, возможно, другие интерфейсы тоже). Вам просто нужно использовать QueryInterface для получения этого интерфейса (вместо того, чтобы IFileSinkFilter наследовал от IBaseFilter).

IFileSinkFilter *pFileSink;
IBaseFilter* filter = NULL;
hr = pFileSink->QueryInterface( IID_IBaseFilter, (void **)&filter );

Если это неясно, убедитесь, что у вас есть хорошее базовое понимание COM , поскольку оно используется в DirectShow. Также см. документацию Microsoft DirectShow , которая хорошо написана и окончательна:

Если вы работаете в C #, а не в C ++, то, если я правильно помню, вы можете привести между различными объектами-оболочками C # COM автоматически к QueryInterface для соответствующего интерфейса, и в случае сбоя QueryInterface результат будет нулевым (на самом деле это не моя область экспертиза).

В одном из ваших комментариев вы упомянули пример граббера. Если вы пытаетесь захватить кадры аудио или видео, вам нужно будет установить сэмплерный захват перед входными выводами фильтра AVI MUX.

Соединение потока медиатипа между мультиплексором AVI и устройством записи файлов - это на самом деле просто способ отправки простых команд ввода-вывода по контактному соединению для записи / чтения байтового потока (задача мультиплексора AVI - отработать форматирование). Эти вызовы или сэмплы IStream не всегда соответствуют отдельным кадрам аудио или видео.

Фильтр анализа записи файла GraphStudioNext покажет вам отдельные выборки и вызовы IStream.

0 голосов
/ 26 июня 2018

Вы можете вставить фильтр туда, но, как вы заметили, это должен быть другой фильтр. В частности, File Writer Filter * Входной вывод реализует интерфейс IStream. Это то, что AVI Mux Filter также ожидает.

Если вы предоставляете совместимый фильтр, вы можете подключиться через него.

...