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