Можно ли вставить фильтр между фильтром Avi Mux и фильтром записи файлов. Построитель графов вставляет и автоматически подключает оба фильтра, вызывая ICaptureGraphBuilder2::SetOutputFileName. Поскольку интерфейс средства записи файлов имеет тип IFileSinkFilter (не производный от IBaseFilter), этот интерфейс не предоставляет никаких функций, таких как Disconnect или Connect, или для перечисления выводов фильтра. Следовательно, я не могу вставить фильтр между этими обоими фильтрами. Было ли это преднамеренно со стороны MS, чтобы оба фильтра были своего рода атомарной конструкцией? Или есть другой способ управлять этим.
Вставить фильтр между Avi Muxer и File Writer?
Ответы (2)
Вы можете вставить туда фильтр, но, как вы заметили, это должен быть другой фильтр. В частности, ввод File Writer Filter pin реализует интерфейс IStream
. Это то, что также ожидает AVI Mux Filter. .
Если вы предоставляете совместимый фильтр, вы можете подключиться через него.
Фильтр записи файлов 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.
Соединение потока медиатипа между мультиплексором AVI и устройством записи файлов на самом деле является просто способом отправки простых команд ввода-вывода через контактное соединение для записи/чтения потока байтов (работа мультиплексора AVI заключается в разработке форматирования). Эти вызовы или образцы IStream не всегда будут соответствовать отдельным кадрам аудио или видео.
Фильтр анализатора записи файла GraphStudioNext покажет вам отдельные примеры и вызовы IStream.