Конфигурация IMFTransform - PullRequest
1 голос
/ 17 июня 2020

Я хочу написать IMFTransform, который будет смешивать 2 аудиопотока. Но в идеале я бы хотел применить его в режиме c, специфичного для потока. Например, я хочу смешивать только определенную продолжительность потоков. Повторюсь, точное время и продолжительность будут разными в каждом случае.

Проблема в том, что я не вижу в интерфейсе IMFTransform какой-либо функции, которая позволяет мне передавать эту информацию. Я что-то упускаю? Стоит ли расширять интерфейс IMFTransform некоторыми пользовательскими методами или функциями? Каков приемлемый путь вперед?

Ответы [ 2 ]

0 голосов
/ 23 июня 2020

Я использую аналогичный подход с этим проектом: MFSkVideoRenderer

  • VideoShaderEffect.idl: объявить COM-объект (интерфейс / метод / библиотека)
  • SinkVideoRenderer. h: добавить publi c IMFVideoShaderEffect и объявить метод (STDMETHOD (FunctionName) ();)
  • SinkVideoRenderer. cpp: реализовать метод HRESULT CSinkVideoRenderer :: FunctionName () {return S_OK:} (также может быть встроенным в SinkVideoRenderer.h, если простой код)
  • include: #include "VideoShaderEffect_h.h" (будет сгенерирован из .idl)
  • для использования внутри другой программы: #include " VideoShaderEffect_i. c "(также будет сгенерирован из .idl) см. MFNodePlayer для примера

Вам нужно будет немного узнать о MIDL

0 голосов
/ 18 июня 2020

Вам не нужно расширять интерфейс IMFTransform, это не то, как все должно быть сделано. Обычно вы реализуете другой частный интерфейс в том же классе преобразования и делаете его доступным с помощью обычного COM IUnknown::QueryInterface (или, в некотором смысле, аналогичного IMFGetService). Приложение создаст экземпляр transofrm, запросит этот дополнительный интерфейс и передаст необходимую конфигурацию.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...