我正在尝试更改IPropertyStore中的标志值。但是,无论标志的值如何,我的代码似乎都表现得一样。
这是因为我的代码在更改标志后没有调用IPropertyStore_Commit
吗?
我确实尝试调用该方法,但是我收到了错误代码0x80004001
,这意味着“未实现”。因此,我的问题的第二部分:为什么不实施?
更详细地说,我正在研究一种Java软电话,它利用WASAPI(通过JNI)进行一些音频处理。本机代码是用C语言编写的。
最近启用了AES(声学回声抑制),我发现AGC(自动增益控制)也已启用。我试图通过在IPropertyStore对象上设置MFPKEY_WMAAECMA_FEATR_AGC键来禁用AGC。但是,无论我设置的值是什么都没有区别。
相关的代码片段如下:
// Obtain the property store
void *pvObject;
HRESULT hr = IMediaObject_QueryInterface((IMediaObject *) thiz, &iid_, &pvObject);
// Do some checking that the store is valid...
// Set the value of the AGC key:
PROPVARIANT propvar = ...
IPropertyStore_SetValue((IPropertyStore *)pvObject, (REFPROPERTYKEY) key, &propvar);
// Call commit - fails, with 0x80004001:
HRESULT hr = IPropertyStore_Commit((IPropertyStore *)pvObject);
答案 0 :(得分:1)
有几个问题:
thiz
究竟是什么;我很确定它不是一个IMediaObject接口。IMediaObject
投射到IPropertyStore
;您必须QueryInterface
指向IMediaObject
的{{1}}指针。IPropertyStore
;至少,不是用于设置AGC密钥。IPropertyStore_Commit