C++ 如何改变媒体基础转换输出帧(视频)大小?
我正在写一个转换,想改变帧和视频的输出大小。我查看了示例,找到了函数调用的顺序:C++ 如何改变媒体基础转换输出帧(视频)大小?,c++,video-processing,ms-media-foundation,C++,Video Processing,Ms Media Foundation,我正在写一个转换,想改变帧和视频的输出大小。我查看了示例,找到了函数调用的顺序: SetInputType SetOutputType GetInputCurrentType SetInputType UpdateFormatInfo GetOutputCurrentType SetOutputType GetOutputStreamInfo
SetInputType
SetOutputType
GetInputCurrentType
SetInputType
UpdateFormatInfo
GetOutputCurrentType
SetOutputType
GetOutputStreamInfo
SetProperties
ProcessOutput (THROW NEED INPUT)
ProcessInput
ProcessOutput
ProcessOutput (THROW
....
.... repeat until done
我需要在哪一步中修改输出大小?如何修改
示例:输入640x480视频,输出4800x480视频,无需拉伸。在MFT中“更改输出大小”有两个步骤
1) 您需要修改SetOutputType和GetOutputAvailableType例程:
- 如果SetOutputType当前检查维度以验证它们是否与输入相同(您可以这样做,也可以不这样做),则需要更新该维度
- 当要求通过GetOutputAvailableType枚举您支持的输出类型时(假设您支持枚举类型),您的输出媒体类型必须具有正确的大小
我有一个C++类,它处理创建MFT的所有开销,以及一些演示如何使用该类的MFT示例。在撰写本文时,它仍处于测试阶段,但它应该会给你一些想法
对于您尝试执行的操作,最接近的示例可能是旋转。旋转时,800x600视频可以变成600x800视频。Rotate甚至允许在流传输时更改旋转(请参见异步MFT下的)。C++旋转MFT是一个注释良好的350行长。首先,您应该编程转换以在输出上协商480x480视频大小(重载StutOuttType)。然后在ProcessOutput()中,您应该执行真正的调整大小操作。到目前为止你做了什么?你解决问题了吗?你能给我一些提示吗?不幸的是,我也有同样的问题。