我正在编写转换,并希望更改帧和视频的输出大小。我检查了样本并找出了函数调用的顺序:
SetInputType
SetOutputType
GetInputCurrentType
SetInputType
UpdateFormatInfo
GetOutputCurrentType
SetOutputType
GetOutputStreamInfo
SetProperties
ProcessOutput (THROW NEED INPUT)
ProcessInput
ProcessOutput
ProcessOutput (THROW
....
.... repeat until done
我需要在哪一步修改输出大小以及如何修改?
示例:输入640x480视频,输出480x480视频,无需拉伸。
答案 0 :(得分:1)
在MFT中“改变输出大小”有两个步骤。
1)您需要修改SetOutputType和GetOutputAvailableType例程:
2)您需要修改ProcessInput / ProcessOutput中的样本处理,以实际 DO 调整大小。仅更改媒体类型不会执行任何类型的自动调整大小。如何更改尺寸取决于视频数据的实际格式(您未提供),以及您希望如何调整大小的详细信息。你只是想切掉额外的线条吗?从顶部还是底部?你还需要支持切碎宽度吗?
我有一个c ++类来处理创建MFT的所有开销,以及一些示例MFT,它们展示了如何在http://www.LimeGreenSocks.com/MFT使用该类。截至本文撰写时,它仍处于测试阶段,但它应该会给你一些想法。
您尝试做的最接近的样本可能是旋转。旋转时,800x600视频可以成为600x800视频。旋转甚至允许在流式传输时更改旋转(请参阅异步MFT下的Format Changes)。 c ++ rotate mft是一个评论很好的〜350行。