是否可以从 IMFSourceReader 或 IMFMediaSource 对象获取 MF_SOURCE_READER_ASYNC_CALLBACK 的值?

Is it possible to get the value of MF_SOURCE_READER_ASYNC_CALLBACK from IMFSourceReader or IMFMediaSource object?

我使用 MediaFoundation API 从相机中获取样本并遇到这样的问题。

С创建一个 source reader object (for example, with the function MFCreateSourceReaderFromMediaSource),我们可以在异步模式下使用 IMFSourceReader。为此,我们必须在属性存储上设置 MF_SOURCE_READER_ASYNC_CALLBACK 属性。然后将此属性存储传递给 MFCreateSourceReaderFromMediaSource 函数。

    HRESULT hr = S_OK;
    IMFAttributes *pAttributes = NULL;

    hr = MFCreateAttributes(&pAttributes, 1);

    // set our callback
    hr = pAttributes->SetUnknown(MF_SOURCE_READER_ASYNC_CALLBACK, pCallback);

    // pass attributes and create source reader
    hr = MFCreateSourceReaderFromMediaSource(pMediaSource, pAttributes, ppSourceReader);

从逻辑上讲,我们在创建IMFSourceReader时设置的参数应该存储在其中的某个地方。

其实,问题。是否可以获取我们在 MFCreateSourceReaderFromMediaSource 中传递的 IMFSourceReader 对象的 IMFAttributes(特别是 MF_SOURCE_READER_ASYNC_CALLBACK 属性的值?

我试着用 QueryInterface 获取它们

pSourceReader->QueryInterface(IID_IMFAttributes, (void**)&pAttributes);

但 return 值表示不支持该接口。

媒体源对象 returns 属性但不包含必要的属性。 我认为使用 IMFSourceReader::GetServiceForStream 方法可以得到我想要的东西,但我不知道需要什么服务。

提前致谢,我很乐意提供任何帮助。

没有定义读取回调值的方法。