2012-03-27 4 views
0

Ich habe meine eigene Videoquelle und VMR7 verwenden. Wenn ich 24 Farbtiefe verwende, enthält mein Graph Color Space Converter-Filter, der 24 Bit in ARGB32 konvertiert. Alles funktioniert gut. Wenn ich 32-Bit-Farbtiefe verwende, sieht mein Bild zerlegt aus. In diesem Fall erzeugt meine Quelle RGB32-Bilder und übergibt sie ohne Farbkonvertierung direkt an VMR7. Bei der Fenstergröße habe ich festgestellt, dass sich das Bild bei einer Änderung der Zielhöhe in einen bestimmten Wert der Zielhöhe "integriert" (normal). Ich weiß nicht wo das Problem ist. Hier sind die Beispielfotos: http://talbot.szm.com/desintegrated.jpg und http://talbot.szm.com/integrated.jpg Vielen Dank für Ihre Hilfe.DirectShow: IVMRWindowlessControl :: SetVideoPosition Schritt (?)

Antwort

0

Sie müssen in Ihrer FillBuffer-Methode nach einer Änderung des Medientyps suchen.

HRESULT hr = pSample->GetMediaType((AM_MEDIA_TYPE**)&pmt); 
if (S_OK == hr) 
{ 
    SetMediaType(pmt); 
    DeleteMediaType(pmt); 
} 

Abhängig von Ihrer Grafik erhalten Sie unterschiedliche Breite für Ihren Puffer. Das heißt, Sie verbinden sich mit einer Bildbreite von 1000 Pixel, aber mit dem ersten Beispiel erhalten Sie eine neue Breite für Ihren Puffer. In meinem Beispiel war es 1024px.

enter image description here

Jetzt haben Sie die neue Bildgröße im BitmapInfoHeader.biWidth und bekam die alte Größe im VideoInfoHeader.rcSource. Eine Zeile Ihres Bildes hat also eine Größe von 1024 Pixel und nicht 1000 Pixel. Wenn Sie sich nicht daran erinnern, können Sie manchmal Bilder wie Sie bekommen.