我创建了以下MF拓扑结构:MF_TOPOLOGY_SOURCESTREAM_NODE -> MF_TOPOLOGY_TRANSFORM_NODE(Microsoft H264视频解码器MFT)-> MF_TOPOLOGY_TRANSFORM_NODE(Resizer MFT)-> MF_TOPOLOGY_TRANSFORM_NODE(Color Converter MFT)-> MF_TOPOLOGY_OUTPUT_NODE(SampleGrabberSink)。
当我在我的应用程序中播放某些视频时,发生了以下情况(通过mftrace工具从MF跟踪中获取):
MF创建变换节点,MFTransform和Resizer MFT的MediaObject:
COle32ExportDetours::CoCreateInstance @ Created {1EA1EA14-48F4-4054-AD1A-E8AEE10AC805} Resizer DMO (C:\Windows\SysWOW64\vidreszr.dll) @0561F060 - 跟踪接口: IMFTransform @0561F060, IMediaObject @0561F078
MF设置调整器变换的输入类型和输出类型:
CMFTransformDetours::SetInputType @0561F060 成功 MT: MF_MT_MAJOR_TYPE=MEDIATYPE_Video; MF_MT_SUBTYPE=MFVideoFormat_YV12; MF_MT_FRAME_SIZE=3092376453526 (720,406); MF_MT_FRAME_RATE=107374182401(25,1); MF_MT_PIXEL_ASPECT_RATIO=1743756722581(406,405); MF_MT_INTERLACE_MODE=7; MF_MT_AVG_BITRATE=639540; MF_MT_DEFAULT_STRIDE=720; MF_MT_ALL_SAMPLES_INDEPENDENT=1; MF_MT_FIXED_SIZE_SAMPLES=1; MF_MT_SAMPLE_SIZE=438480
CMFTransformDetours::SetOutputType @0561F060 成功 MT: MF_MT_MAJOR_TYPE=MEDIATYPE_Video; MF_MT_SUBTYPE=MFVideoFormat_YV12; MF_MT_FRAME_SIZE=3092376453526 (720,406); MF_MT_FRAME_RATE=42949672960400000 (10000000,400000); MF_MT_GEOMETRIC_APERTURE=00 00 00 00 00 00 00 00 d0 02 00 00 96 01 00 00 ; MF_MT_PIXEL_ASPECT_RATIO=1743756722581(406,405); MF_MT_INTERLACE_MODE=7; MF_MT_DEFAULT_STRIDE=720; MF_MT_ALL_SAMPLES_INDEPENDENT=1; MF_MT_FIXED_SIZE_SAMPLES=1;MF_MT_SAMPLE_SIZE=438480
用户开始视频播放。
MF再次设置调整器变换的输入类型和输出类型:
CMFTransformDetours::SetInputType @0561F060 成功 MT: MF_MT_MAJOR_TYPE=MEDIATYPE_Video; MF_MT_SUBTYPE=MFVideoFormat_YV12; MF_MT_FRAME_SIZE=3092376453536 (720,416); MF_MT_FRAME_RATE=107374182401 (25,1); MF_MT_GEOMETRIC_APERTURE=00 00 00 00 00 00 00 00 d0 02 00 00 96 01 00 00 ; MF_MT_MINIMUM_DISPLAY_APERTURE=00 00 00 00 00 00 00 00 d0 02 00 00 96 01 00 00 ; MF_MT_PAN_SCAN_APERTURE=00 00 00 00 00 00 00 00 d0 02 00 00 96 01 00 00 ; MF_MT_PIXEL_ASPECT_RATIO=1743756722581 (406,405); MF_MT_VIDEO_PRIMARIES=2; MF_MT_INTERLACE_MODE=7; MF_MT_VIDEO_NOMINAL_RANGE=2; MF_MT_TRANSFER_FUNCTION=5; MF_MT_YUV_MATRIX=1; MF_MT_AVG_BITRATE=639540; MF_MT_DEFAULT_STRIDE=720; MF_MT_ALL_SAMPLES_INDEPENDENT=1; MF_MT_FIXED_SIZE_SAMPLES=1; MF_MT_SAMPLE_SIZE=449280; MF_MT_COMPRESSED=0; MF_MT_AVG_BIT_ERROR_RATE = 0
CMFTransformDetours::SetOutputType @0561F060 成功 MT: MF_MT_MAJOR_TYPE=MEDIATYPE_Video; MF_MT_SUBTYPE=MFVideoFormat_YV12; MF_MT_FRAME_SIZE=3092376453526 (720,406); MF_MT_FRAME_RATE=42949672960400000 (10000000,400000); MF_MT_GEOMETRIC_APERTURE=00 00 00 00 00 00 00 00 d0 02 00 00 a0 01 00 00 ; MF_MT_MINIMUM_DISPLAY_APERTURE=00 00 00 00 00 00 00 00 d0 02 00 00 96 01 00 00 ; MF_MT_PAN_SCAN_APERTURE=00 00 00 00 00 00 00
在第二次设置其输入和输出类型后,ResizerMFT无法处理输出的原因是什么?这与输出类型的属性有关吗?有没有方法可以获取有关此错误的更多信息?
任何答案将不胜感激。