我正在編寫如MSDN教程中所示的自定義轉換篩選器: http://msdn.microsoft.com/en-us/library/windows/desktop/dd391015%28v=vs.85%29.aspx 。項目C++中的DirectShow自定義篩選器
它與我的主要的DirectShow謨寫的(我不是做與過濾器一個DLL)
的問題是我不知道如何創建/使用的過濾器。我曾嘗試CoCreateInstance的
SmartPtr<IFilterRotation> _pRotation = 0; // My custom filter
if(!SUCCEEDED(_mResult = CoCreateInstance(CLSID_FilterRotation, NULL, CLSCTX_INPROC, IID_IBaseFilter, (void**)&_pRotation)))
{
return _mResult;
}
但它返回以下錯誤:REGDB_E_CLASSNOTREG
這裏是我的全部覆蓋的元素的時刻:
#pragma once
// {4A80F8B5-CFB0-4dc6-96C5-DA427B6DB8BD}
DEFINE_GUID(CLSID_FiltreRotation,
0x4a80f8b5, 0xcfb0, 0x4dc6, 0x96, 0xc5, 0xda, 0x42, 0x7b, 0x6d, 0xb8, 0xbd);
class IFilterRotation: public CTransformFilter
{
public:
IFilterRotation(void);
~IFilterRotation(void);
HRESULT IFilterRotation::CheckInputType(const CMediaType *vpMediaTypeIn);
HRESULT IFilterRotation::CheckTransform(const CMediaType *vpMediaTypeIn,
const CMediaType *vpMediaTypeOut);
HRESULT IFilterRotation::DecideBufferSize(IMemAllocator *vpAllocation,
ALLOCATOR_PROPERTIES *vppRequeteProprieteIn);
HRESULT IFilterRotation::GetMediaType(int vPosition,
CMediaType *vpMediaType);
HRESULT IFilterRotation::Transform(IMediaSample *vpMediaSampleIn,
IMediaSample *vpMediaSampleOut);
};
我這麼想嗎? 在此先感謝。
我以爲CFactoryTemplate只能在DLL中使用,所以這就是爲什麼我沒有實現它。我會去看看樣品。我認爲這正是我需要清楚地瞭解自定義轉換過濾器的工作原理。是的,我的班級名稱對於我目前正在做的事情是錯誤的:/。 –
當你使用AddFilter過濾器時,它不是一個COM接口指針,但它不必具有完整的COM註冊和完整的DirectShow註冊。相反,'CoCreateInstance'假設你有這個COM類的COM註冊。 –
感謝您的幫助。不幸的是,當我運行程序時,我有一個錯誤。 (sdkpath)\ baseclasses \ wxdebug.cpp的第892行的[szObjectName^!! wszObjectName繼續? (取消調試)[按鈕]是,不,取消。你有什麼想法是什麼?在wxdebug.cpp中,它鏈接到函數DbgRegisterObjectCreation,所以它看起來像是一個註冊(概率COM?)問題。 –