我已成功構建了ezrgb24示例項目,該項目位於DirectShow SDK中。但是當我調試時遇到了一個困惑的問題。爲什麼輸出IMediaSample的緩衝區大小小於其中一個輸入?
以下Copy方法是由Transform方法調用的。
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
...
}
斷言陳述失敗。用graphedit,我檢查了過濾器的輸入介質類型是RGB24,輸出也是RGB24。我不明白爲什麼輸出的緩衝區大小會小於輸入的數據大小。誰能幫我?
謝謝。
---------------------------------------------- ----- 2009/8/20編輯
O,我發現實際輸入的媒體子類是RGB32,但輸出的子類型是RGB24。但爲什麼CEZrgb24 :: CheckInputType方法的類型可以是RGB32,CEZrgb24 :: CheckTransform只能爲RGB24返回OK。
---------------------------------------------- ---- 2009/8/21編輯
我自己碰到這個問題。我發佈答案。
但我不知道爲什麼pSource-> GetActualDataLength()大於m_pInput-> CurrentMediaType()。GetSampleSize()。 – 2009-08-21 07:08:07