IPropertyStore_Commit方法 - 它是否需要,为什么不实现?

时间:2013-09-24 08:25:14

标签: winapi wasapi ipropertystorage

我正在尝试更改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);

1 个答案:

答案 0 :(得分:1)

有几个问题:

  1. 我不确定thiz究竟是什么;我很确定它不是一个IMediaObject接口。
  2. 你不能只是从IMediaObject投射到IPropertyStore;您必须QueryInterface指向IMediaObject的{​​{1}}指针。
  3. 您不应该致电IPropertyStore;至少,不是用于设置AGC密钥。
  4. 当您调用IPropertyStore_SetValue时,请确保正确初始化PROPVARIANT。 MFPKEY_WMAAECMA_FEATR_AGC是BOOLEAN属性,因此您的代码需要如下所示:

  5. IPropertyStore_Commit