Могу ли я с уверенностью предположить, что в образце назначения, полученном моим DirectShow Transform Filter, уже будет выделена память?

Я написал фильтр DirectShow Transform, используя Delphi 6 и библиотеку DSPACK. Я рассмотрел базовые классы фильтров DSPACK и код, принадлежащий их образцу приложения "WAV Dest", которое является примером фильтра Transform. Насколько я могу судить, принимающий фильтр не выделяет память ни для исходного IMediaSample фильтра Transform, ни для целевых параметров IMediaSample, хотя я вижу, что длина целевого IMediaSample может быть скорректирована с помощью IMediaSample.SetActualLength().

Я просто хочу убедиться, что могу положиться на код, вызывающий мой фильтр Transform, который уже выделил память для этих двух параметров, поэтому мне не нужно этого делать, если это действительно является частью спецификации API DirectShow. В противном случае, я предполагаю, что мне нужно было бы сделать это распределение самостоятельно, используя CoTaskMemAlloc(). Может ли кто-нибудь дать мне окончательный ответ здесь?

1 ответ

Решение

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

Вы просто не можете выделить себя CoTaskMemAlloc как вы предложили.

Другие вопросы по тегам