IMFSourceReader :: GetNativeMediaType是否等于IMFMediaTypeHandler :: GetMediaTypeByIndex?

时间:2019-06-03 07:15:07

标签: windows ms-media-foundation

假设它们来自同一来源,等等:

IMFMediaTypeHandler::GetMediaTypeByIndex(mediaTypeIndex, mediaType)

等同于:

IMFSourceReader::GetNativeMediaType(streamIndex, mediaTypeIndex, mediaType)

在两种情况下,mediaTypeIndex参数之间是否存在对应关系?对于使用具有以下属性集的MFCreateSourceReaderFromMediaSource()来说,这意味着什么?

attributes->SetUINT32(MF_READWRITE_DISABLE_CONVERTERS, TRUE);

2 个答案:

答案 0 :(得分:1)

我会说:

IMFMediaTypeHandler::GetMediaTypeByIndex

  

从对象的支持的媒体类型列表中检索媒体类型。

IMFSourceReader::GetNativeMediaType

  

但是捕获设备可能提供几种格式。

(在捕获示例中,我认为“支持的媒体类型列表” ==“可能提供几种格式”)。

并且因为两者都实现了GetCurrentMediaType。但是我必须承认,这不能保证。

对于MF_READWRITE_DISABLE_CONVERTERS,如果需要,并且在调用FALSE时,它将在调用SetInput类型时进行一些转换。因此,从我的角度来看,与GetMediaTypeByIndex / GetNativeMediaType没有关系,而仅与GetCurrentMediaType有关系。

答案 1 :(得分:1)

即使不一定必须使用相同的方法。如果您在媒体源顶部使用“源阅读器”,则将对媒体源的控制委派给阅读器实例,并且一般来说,您不应访问IMFMediaTypeHandler,因为源阅读器在假定具有独占控制权的情况下运行在那件事上。

MF_READWRITE_DISABLE_CONVERTERS不太可能影响本机媒体类型的枚举,因为转换器会跳转以将请求的媒体类型与本机媒体类型之一进行匹配。