Получить растровую информацию из MPEG-2 Program / Transport Stream?

Чтобы отобразить граф DirectShow в моем приложении WPF, я использую образец граббера, чтобы записать растровое изображение в память и прочитать его в другом месте кода. Это может показаться странным решением, но, похоже, это единственный способ извлечь из него кисть WPF.

Следующий код дает мне необходимую информацию о растровом изображении:

AMMediaType mt = grabber.GetConnectedMediaType();
VideoInfoHeader header = (VideoInfoHeader)Marshal.PtrToStructure(mt.formatPtr, typeof VideoInfoHeader);
header.BmiHeader // ...

В настоящее время,header.BmiHeader имеет типBITMAPINFOHEADER и предоставляет такую информацию, какширина а такжевысота растрового изображения. Мне нужна эта информация, чтобы записать растровое изображение в память.

Тем не менее, этот код не всегда работает. Например, когда фильтр захвата образца подключен к выводу программного потока MPEG-2,header будетnull, Почему мой код не работает с определенными типами мультимедиа, и какие еще есть способы получить его структуру BitmapInfoHeader?

Обратите внимание, что хотя я используюdirectshow.net библиотека, ответы на C ++ также приветствуются.

редактировать: Так выглядит мой график:

*source* -> MPEG2-Demultiplexer -> SampleGrabber -> MS DTV-DVD Video Decoder -> Video Renderer

Мне не разрешено размещать граббер между декодером и рендерером. О видео-пин-демке:

Major Type: Video

Sub Type: MPEG2_VIDEO
Format: MPEG2Video

После того, как я подключил пробоотборник, его входной контакт также имеет вышеуказанный тип носителя. Когда я открываю этот граф в моем приложении и используюgrabber.GetConnectedMediaType();Я также получаю тот же тип носителя. ОднакоformatPtr или же (pbFormat в C ++) для этого типа медиа это 0.

Ответы на вопрос(1)

Ваш ответ на вопрос