Ich habe das Beispielprojekt ezrgb24 erfolgreich erstellt, das im DirectShow-SDK enthalten ist. Aber ich stieß auf ein verwirrtes Problem, wenn ich es debugge.Warum ist die Puffergröße der Ausgabe IMediaSample kleiner als einer der Eingabe?
Die folgende Copy-Methode wurde von der Transform-Methode aufgerufen.
HRESULT CEZrgb24::Copy(IMediaSample *pSource, IMediaSample *pDest) const
{
...
// Copy the sample data
BYTE *pSourceBuffer, *pDestBuffer;
long lSourceSize = pSource->GetActualDataLength();
#ifdef DEBUG
long lDestSize = pDest->GetSize();
ASSERT(lDestSize >= lSourceSize);
#endif
...
}
Die Anweisung zur Bestätigung ist fehlgeschlagen. Mit graphedit habe ich überprüft, ob der Eingangstyp des Filters RGB24 ist und der Ausgang auch RGB24 ist. Ich kann nicht verstehen, warum die Puffergröße der Ausgabe kleiner als die tatsächliche Datengröße der Eingabe ist. Wer kann mir helfen?
Danke.
---------------------------------------------- ---- 2009/8/20 bearbeitet
O, fand ich die tatsächliche Eingabe Medien Subtye ist von RGB32, aber der Untertyp der Ausgabe ist RGB24. Aber warum der Typ RGB32 sowohl für die CEZrgb24 :: CheckInputType-Methode als auch die CEZrgb24 :: CheckTransform sein kann, gibt nur OK für RGB24 zurück.
---------------------------------------------- ---- 2009/8/21 bearbeitet
Ich schlug das Problem selbst. Ich poste als Antwort.
Aber ich weiß nicht, warum pSource-> GetActualDataLength() größer als m_pInput-> CurrentMediaType(). GetSampleSize(). –