我已经成功构建了 ezrgb24 示例项目,它位于 DirectShow SDK 中。但是我在调试时遇到了一个困惑的问题。
Transform 方法调用了以下 Copy 方法。
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。我不明白为什么输出的缓冲区大小会小于输入的 acural 数据大小。谁能帮我?
谢谢。
-------------------------------------------------- 2009/8/20 编辑
哦,我发现实际输入的媒体子类型是 RGB32,但输出的子类型是 RGB24。但是,为什么 CEZrgb24::CheckInputType 方法和 CEZrgb24::CheckTransform 的类型都可以是 RGB32 只为 RGB24 返回 OK。
-------------------------------------------------- 2009/8/21 编辑
我自己遇到了问题。我张贴作为答案。