Uzyskaj informacje o mapie bitowej z MPEG-2 Program / Transport Stream?

Aby wyrenderować wykres DirectShow w mojej aplikacji WPF, używam przykładowego grabbera do zapisania bitmapy w pamięci i przeczytania go w innym miejscu w kodzie. Może to wydawać się dziwnym rozwiązaniem, ale wydaje się, że jest to jedyny sposób, aby uzyskać z niego pędzel WPF.

Poniższy kod daje mi informacje o bitmapie:

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

Teraz,header.BmiHeader jest typuBitmapInfoHeader i dostarcza informacji takich jakszerokość iwysokość mapy bitowej. Potrzebuję tych informacji, aby zapisać bitmapę w pamięci.

Jednak ten kod nie zawsze działa. Na przykład, gdy przykładowy filtr grabbera jest połączony z pinem strumienia programowego MPEG-2,header będzienull. Dlaczego mój kod nie działa z niektórymi typami mediów i jakie są inne sposoby uzyskania struktury BitmapInfoHeader?

Pamiętaj, że mimo że korzystam zdirectshow.net biblioteka, odpowiedzi w C ++ są również mile widziane.

Edytować: Tak wygląda mój wykres:

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

Nie wolno mi umieszczać chwytaka między dekoderem a rendererem. Informacje o pinach wideo demux:

Major Type: Video

Sub Type: MPEG2_VIDEO
Format: MPEG2Video

Po podłączeniu przykładowego chwytaka, jego pin wejściowy ma również powyższy typ nośnika. Kiedy otwieram ten plik wykresu w mojej aplikacji i używamgrabber.GetConnectedMediaType();, Dostaję również ten sam typ mediów. JednakżeformatPtr lub (pbFormat w C ++) tego typu mediów wynosi 0.

questionAnswers(1)

yourAnswerToTheQuestion