【发布时间】:2009-08-20 06:11:26
【问题描述】:
我已经成功构建了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 编辑
O,我发现实际输入的媒体子类型是 RGB32,但输出的子类型是 RGB24。但是,为什么 CEZrgb24::CheckInputType 方法和 CEZrgb24::CheckTransform 的类型都可以是 RGB32 只为 RGB24 返回 OK。
----------------------------------- ---2009/8/21 编辑
我自己遇到了问题。我发布作为答案。
【问题讨论】:
-
但是我不知道为什么pSource->GetActualDataLength()大于m_pInput->CurrentMediaType().GetSampleSize()。
标签: windows directx directshow