Посмотрите пример PushSource в DirectShow SDK. В этом примере показано, как создать исходный фильтр, который можно визуализировать. Все дело в том, чтобы правильно настроить тип выходного носителя вашего фильтра, чтобы можно было визуализировать остальную часть графика. В примере также показано, как передать образцы мультимедиа в остальную часть конвейера мультимедиа. В вашем случае, что вы декодируете? Пример PushSource выводит RGB24 IIRC.
Кроме того, похоже, что вы декодируете в том же фильтре, что и принимаемые байты? Обычно в DirectShow вы пишете фильтр источника, который может принимать байты из сети и выводить выборки в закодированном формате. Затем вы должны подключить этот фильтр к настраиваемому фильтру декодера, который затем выводит либо RGB24, либо какой-либо формат необработанного мультимедиа, понятный DirectShow. Аналогично для аудио, вы можете вывести, скажем, PCM.
Edit:
Я использовал тот же подход (CSource, CSourceStream). Это верно, DoBufferProcessingLoop вызывает FillBuffer. Мой общий подход состоял в том, чтобы использовать шаблон производитель-потребитель. Поток сетевого чтения заполняет очередь примерами, и в моем переопределенном DoBufferProcessingLoop я проверяю, есть ли в очереди какие-либо данные, вызывая FillBuffer, если есть данные. Конечно, вы можете попробовать другие методы, такие как ожидание событий (доступность кадра). Чтобы увидеть подход, который я использовал, вы можете скачать исходный код примера исходного фильтра RTSP по адресу http://sourceforge.net/projects/videoprocessing/ и посмотреть, подходит ли вам это. Лучшее, что я могу сказать, - это просто пробовать что-то и учиться на ходу.