Obter informações de bitmap do Programa MPEG-2 / Fluxo de Transporte?

Para renderizar um gráfico do DirectShow em meu aplicativo WPF, eu uso um grabber de amostra para gravar um bitmap na memória e lê-lo em outro lugar no código. Isso pode parecer uma solução estranha, mas parece ser a única maneira de obter um pincel WPF.

O código a seguir me fornece as informações necessárias sobre o bitmap:

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

Agora,header.BmiHeader é do tipoBitmapInfoHeader e fornece informações como olargura ealtura do bitmap. Eu preciso dessa informação para gravar o bitmap na memória.

No entanto, esse código não parece funcionar sempre. Por exemplo, quando o filtro amostrador é conectado a um pino de fluxo de programa MPEG-2,header seránull. Por que meu código não funciona com determinados tipos de mídia e que outras formas existem para obter sua estrutura BitmapInfoHeader?

Por favor, note que, embora eu esteja usando odirectshow.net biblioteca, respostas em C ++ também são bem vindas.

Editar: É assim que meu gráfico se parece:

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

Eu não tenho permissão para colocar o grabber entre o decodificador e o renderizador. Sobre o pino de vídeo do demux:

Major Type: Video

Sub Type: MPEG2_VIDEO
Format: MPEG2Video

Depois de ter conectado o grabber de amostra, o pino de entrada também possui o tipo de mídia acima. Quando eu abro este arquivo gráfico na minha aplicação e usograbber.GetConnectedMediaType();, Eu também recebo o mesmo tipo de mídia. No entanto, oformatPtr ou (pbFormat em C ++) deste tipo de mídia é 0.

questionAnswers(1)

yourAnswerToTheQuestion