CoCreateInstance 为 CLSID_WavDest 创建空的 IBaseFilter
CoCreateInstance creates empty IBaseFilter for CLSID_WavDest
我正在尝试在 C++ Visual Studio 2010 项目中使用 directshow framework
来记录 .wav
。我遵循本指南的 WAV 文件部分:https://msdn.microsoft.com/en-us/library/windows/desktop/dd375005(v=vs.85).aspx
我已经构建了WavDest.dll
,将它添加到注册表中,在注册表中找到它,它可以作为过滤器添加到 Graphedit 中。我有未解决的 _CLSID_WavDest
外部符号错误,但通过在我的 StdAfx.h
中包含 InitGuid.h
并通过链接 WavDest.lib
.
修复了它
现在我没有错误,程序没有崩溃,但我得到了 0 字节的 wav 文件。
代码部分:
res = AddFilterByCLSID(dshow_dev->m_pGraph, CLSID_WavDest, (IBaseFilter **)&dshow_dev->m_pWaveDest, L"WavDest");
res = AddFilterByCLSID(dshow_dev->m_pGraph, CLSID_FileWriter, (IBaseFilter **)&dshow_dev->m_pWaveWriter, L"File Writer");
res = dshow_dev->m_pWaveWriter->QueryInterface(IID_IFileSinkFilter, (void**)&dshow_dev->m_pFileSink);
res = dshow_dev->m_pFileSink->SetFileName(L"D:\test.wav", NULL);
res = ConnectFilters(dshow_dev->m_pGraph, dshow_dev->m_pCaptureSourceAudio, dshow_dev->m_pWaveDest);
res = ConnectFilters(dshow_dev->m_pGraph, dshow_dev->m_pWaveDest, dshow_dev->m_pWaveWriter);
AddFilterByCLSID
对于 CLSID_WavDest
returns S_OK 但 dshow_dev->m_pWaveDest
具有以下值:-
[CWavDestFilter] {m_cbWavData=0x00000000 m_cbHeader=0x00000000 } CWavDestFilter
.
因此,ConnectFilters
m_pWaveDest
returns E_Fail
并且没有录制音频。
我已经尝试过注册 WavDest.dll
的调试和发布版本(首先是调试,然后是取消调试和注册发布)。
我已经检查了代码中的其他所有内容,图形 (dshow_dev->m_pGraph
) 可以很好地用于视频预览和写入 AVI 文件(带音频)。
我确定我在 WavDest 集成方面做错了,但我不知道是什么。
感谢任何帮助。
毕竟是我的错。我已更换
assert(pResult != NULL);
在这个函数中
// Match a pin by pin direction and connection state.
HRESULT MatchPin(IPin *pPin, PIN_DIRECTION direction, BOOL bShouldBeConnected, BOOL *pResult)
{
assert(pResult != NULL);
BOOL bMatch = FALSE;
BOOL bIsConnected = FALSE;
HRESULT hr = IsPinConnected(pPin, &bIsConnected);
if (SUCCEEDED(hr))
{
if (bIsConnected == bShouldBeConnected)
{
hr = IsPinDirection(pPin, direction, &bMatch);
}
}
if (SUCCEEDED(hr))
{
*pResult = bMatch;
}
return hr;
}
与
if(pResult == NULL);
{
HRESULT hr = E_FAIL;
return hr;
}
我正在尝试在 C++ Visual Studio 2010 项目中使用 directshow framework
来记录 .wav
。我遵循本指南的 WAV 文件部分:https://msdn.microsoft.com/en-us/library/windows/desktop/dd375005(v=vs.85).aspx
我已经构建了WavDest.dll
,将它添加到注册表中,在注册表中找到它,它可以作为过滤器添加到 Graphedit 中。我有未解决的 _CLSID_WavDest
外部符号错误,但通过在我的 StdAfx.h
中包含 InitGuid.h
并通过链接 WavDest.lib
.
现在我没有错误,程序没有崩溃,但我得到了 0 字节的 wav 文件。
代码部分:
res = AddFilterByCLSID(dshow_dev->m_pGraph, CLSID_WavDest, (IBaseFilter **)&dshow_dev->m_pWaveDest, L"WavDest");
res = AddFilterByCLSID(dshow_dev->m_pGraph, CLSID_FileWriter, (IBaseFilter **)&dshow_dev->m_pWaveWriter, L"File Writer");
res = dshow_dev->m_pWaveWriter->QueryInterface(IID_IFileSinkFilter, (void**)&dshow_dev->m_pFileSink);
res = dshow_dev->m_pFileSink->SetFileName(L"D:\test.wav", NULL);
res = ConnectFilters(dshow_dev->m_pGraph, dshow_dev->m_pCaptureSourceAudio, dshow_dev->m_pWaveDest);
res = ConnectFilters(dshow_dev->m_pGraph, dshow_dev->m_pWaveDest, dshow_dev->m_pWaveWriter);
AddFilterByCLSID
对于 CLSID_WavDest
returns S_OK 但 dshow_dev->m_pWaveDest
具有以下值:-
[CWavDestFilter] {m_cbWavData=0x00000000 m_cbHeader=0x00000000 } CWavDestFilter
.
因此,ConnectFilters
m_pWaveDest
returns E_Fail
并且没有录制音频。
我已经尝试过注册 WavDest.dll
的调试和发布版本(首先是调试,然后是取消调试和注册发布)。
我已经检查了代码中的其他所有内容,图形 (dshow_dev->m_pGraph
) 可以很好地用于视频预览和写入 AVI 文件(带音频)。
我确定我在 WavDest 集成方面做错了,但我不知道是什么。
感谢任何帮助。
毕竟是我的错。我已更换
assert(pResult != NULL);
在这个函数中
// Match a pin by pin direction and connection state.
HRESULT MatchPin(IPin *pPin, PIN_DIRECTION direction, BOOL bShouldBeConnected, BOOL *pResult)
{
assert(pResult != NULL);
BOOL bMatch = FALSE;
BOOL bIsConnected = FALSE;
HRESULT hr = IsPinConnected(pPin, &bIsConnected);
if (SUCCEEDED(hr))
{
if (bIsConnected == bShouldBeConnected)
{
hr = IsPinDirection(pPin, direction, &bMatch);
}
}
if (SUCCEEDED(hr))
{
*pResult = bMatch;
}
return hr;
}
与
if(pResult == NULL);
{
HRESULT hr = E_FAIL;
return hr;
}