Получить растровую информацию из 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

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

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

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