DirectShow SDK にある ezrgb24 サンプル プロジェクトを正常にビルドしました。しかし、デバッグ中に混乱した問題が発生しました。
次の 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
...
}
assert ステートメントが失敗しました。Grapheditで、フィルターの入力メディアタイプがRGB24で、出力もRGB24であることを確認しました。出力のバッファ サイズが入力の実際のデータ サイズよりも小さくなる理由がわかりません。誰が私を助けることができます?
ありがとう。
-------------------------------------------------- 2009/8/20 編集
おお、実際の入力メディア サブタイプは RGB32 ですが、出力のサブタイプは RGB24 であることがわかりました。しかし、CEZrgb24::CheckInputType メソッドと CEZrgb24::CheckTransform の両方でタイプを RGB32 にできる理由は、RGB24 に対してのみ OK を返すことです。
-------------------------------------------------- 2009/8/21 編集
私は自分で問題にぶつかりました。回答として投稿します。