繁体   English   中英

如何更改Media Foundation Transform输出帧(视频)的大小?

[英]How to change Media Foundation Transform output frame(video) size?

我正在编写一个变换,并且想要更改帧和视频的输出大小。 我检查了样本并找出了函数调用的顺序:

SetInputType
SetOutputType
    GetInputCurrentType
    SetInputType
            UpdateFormatInfo
                GetOutputCurrentType
                SetOutputType
                        GetOutputStreamInfo
                            SetProperties
                                ProcessOutput (THROW NEED INPUT)
                                ProcessInput
                                ProcessOutput
                                ProcessOutput (THROW
                                ....
                                .... repeat until done

我需要在哪一步中修改输出大小以及如何修改?

示例:输入640x480视频,输出480x480视频,不进行拉伸。

在MFT中,有2个步骤可以“更改输出大小”。

1)您需要修改SetOutputType和GetOutputAvailableType例程:

  • 如果SetOutputType当前检查尺寸以验证它们是否与输入相同(您可能会或可能不会这样做),那么您需要对其进行更新。
  • 当要求通过GetOutputAvailableType枚举您支持的输出类型(假设您支持枚举类型)时,您的输出媒体类型必须具有正确的大小。

2)您需要修改ProcessInput / ProcessOutput样品的处理,以实际调整大小。 仅更改媒体类型不会执行任何自动调整大小的操作。 更改尺寸的方式取决于视频数据的实际格式(您未提供),以及如何调整大小的详细信息。 您是否只想剪掉多余的线? 从顶部还是底部? 您还需要支持裁切宽度吗?

我有一个c ++类,该类处理创建MFT的所有开销,以及许多示例MFT,这些示例MFT显示了如何使用该类, 网址http://www.LimeGreenSocks.com/MFT 在撰写本文时,它仍处于测试阶段,但应该可以给您一些想法。

您尝试做的最接近的样本可能是“旋转”。 旋转时,800x600视频可以变成600x800视频。 旋转甚至允许在流传输时更改旋转(请参见异步MFT下的格式更改 )。 c ++旋转mft的注释很长,大约为350行。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM