如何改变媒体基金会变换输出帧(视频)的大小?(How to change Media Foundat

2019-10-21 06:22发布

我写的变换,并希望改变帧和视频的输出尺寸。 我检查了样品,发现函数调用的顺序:

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

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

例如:输入640×480视频,输出小480x480视频,不拉伸。

Answer 1:

有2个步骤,以在您的MFT“改变输出大小”。

1)您需要修改SetOutputType和GetOutputAvailableType套路:

  • 如果SetOutputType目前检查的尺寸,以验证它们是相同的输入(您可能会或可能不会做),那么你就需要更新。
  • 当记者问到枚举您通过GetOutputAvailableType支持的输出类型(假设你支持枚举类型),您的输出介质类型必须有正确的尺寸。

2)您需要修改ProcessInput / ProcessOutput样品的处理,以实际调整大小。 只是改变了媒体类型不执行任何种类的自动调整大小的。 如何更改尺寸取决于视频数据(你没有提供),以及你希望怎样做大小调整细节的实际格式。 你只是想砍掉多余的行? 从顶部或底部? 你需要支持斩波宽度呢?

我有一个C ++类,它处理创建MFTS的所有开销,提供了若干显示了如何使用可用的类在样品MFTS沿http://www.LimeGreenSocks.com/MFT 。 它仍处于测试阶段写这篇文章的,但它应该给你一些想法。

可能是你正在尝试做的最接近的样品是旋转。 当旋转时,800x600的视频可以成为一个600X800的视频。 该旋转甚至允许流传输的同时改变旋转(见格式更改下异步MFTS)。 ++旋转MFT的c是一个良好注释〜350线长。



文章来源: How to change Media Foundation Transform output frame(video) size?