Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/130.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何改变媒体基础转换输出帧(视频)大小?_C++_Video Processing_Ms Media Foundation - Fatal编程技术网

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枚举您支持的输出类型时(假设您支持枚举类型),您的输出媒体类型必须具有正确的大小
2) 您需要在ProcessInput/ProcessOutput中修改样本的处理,以实际调整大小。仅更改介质类型不会执行任何类型的自动调整大小。如何更改尺寸取决于视频数据的实际格式(您没有提供),以及如何调整大小的详细信息。你只是想把多余的台词删掉吗?从顶部还是底部?您是否也需要支持切割宽度

我有一个C++类,它处理创建MFT的所有开销,以及一些演示如何使用该类的MFT示例。在撰写本文时,它仍处于测试阶段,但它应该会给你一些想法


对于您尝试执行的操作,最接近的示例可能是旋转。旋转时,800x600视频可以变成600x800视频。Rotate甚至允许在流传输时更改旋转(请参见异步MFT下的)。C++旋转MFT是一个注释良好的350行长。

首先,您应该编程转换以在输出上协商480x480视频大小(重载StutOuttType)。然后在ProcessOutput()中,您应该执行真正的调整大小操作。到目前为止你做了什么?你解决问题了吗?你能给我一些提示吗?不幸的是,我也有同样的问题。