Я успешно создал пример проекта ezrgb24, который находится в DirectShow SDK. Но я столкнулся с запутанной проблемой при отладке.
Следующий метод 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 отредактировано
О, я обнаружил, что на самом деле подтип медиа является RGB32, но подтип вывода RGB24. Но почему типом может быть RGB32 как для метода CEZrgb24 :: CheckInputType, так и для CEZrgb24 :: CheckTransform только возвращают OK для RGB24.
----------------------------------------------- --- 2009/8/21 отредактировано
Я сам столкнулся с проблемой. Выкладываю как ответ.