IMFSourceReader::GetNativeMediaType 等同于 IMFMediaTypeHandler::GetMediaTypeByIndex 吗?

Is IMFSourceReader::GetNativeMediaType equivalent to IMFMediaTypeHandler::GetMediaTypeByIndex?

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

IMFMediaTypeHandler::GetMediaTypeByIndex(mediaTypeIndex, mediaType)

相当于:

IMFSourceReader::GetNativeMediaType(streamIndex, mediaTypeIndex, mediaType)

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

attributes->SetUINT32(MF_READWRITE_DISABLE_CONVERTERS, TRUE);

我会说是的:

IMFMediaTypeHandler::GetMediaTypeByIndex

Retrieves a media type from the object's list of supported media types.

IMFSourceReader::GetNativeMediaType

but capture devices might offer several formats.

(我认为"list of supported media types" == "might offer several formats",在捕获的例子中)。

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

对于MF_READWRITE_DISABLE_CONVERTERS,调用SetInput类型时会做一些转换,如果需要,如果为FALSE。所以从我的角度来看,与 GetMediaTypeByIndex/GetNativeMediaType 没有关系,而只与 GetCurrentMediaType 有关系。

这些方法可能是等价的,即使它们不一定是等价的。如果您在媒体源之上使用 Source Reader,则将媒体源的控制权委托给 reader 实例,一般来说,您不应该访问 IMFMediaTypeHandler,因为 source reader 在假设它对事物具有独占控制权的情况下运行。

MF_READWRITE_DISABLE_CONVERTERS 不太可能对本机媒体类型的枚举产生影响,因为转换器跳入以将请求的媒体类型与一种本机媒体类型相匹配。