如何更改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中有两个步骤可以"更改输出大小"。
1) 您需要修改SetOutputType和GetOutputAvailableType例程:
- 如果SetOutputType当前检查维度以验证它们是否与输入相同(您可能正在或可能没有这样做),那么您需要更新它
- 当被要求通过GetOutputAvailableType枚举您支持的输出类型时(假设您支持枚举类型),您的输出媒体类型必须具有正确的大小
2) 您需要修改ProcessInput/ProcessOutput中样本的处理,以实际DO调整大小。仅仅更改媒体类型并不能自动调整大小。如何更改尺寸取决于视频数据的实际格式(您没有提供),以及如何调整大小的详细信息。你只是想剪掉多余的线条吗?从顶部还是底部?你也需要支持切块宽度吗?
我有一个c++类,它处理创建MFT的所有开销,还有一些示例MFT,它们显示了如何使用该类http://www.LimeGreenSocks.com/MFT.截至本文撰写之时,它仍处于测试阶段,但它应该会给你一些想法。
可能最接近您尝试执行的操作的示例是"旋转"。旋转时,800x600视频可以变成600x800视频。Rotate甚至允许在流式传输时更改旋转(请参阅异步MFT下的格式更改)。c++旋转mft是一个评论良好的~350行长。
相关文章:
- 如何在c++中录制具有精确帧时间戳的视频
- 如何在QT中的自定义视频小工具t上绘制矩形
- 如何使用OpenCV-C++编写*.mp4视频?
- 开放 CV 中的动态内存分配,用于视频处理
- 错误:(-210:不支持的格式或格式组合)功能'create'中的硬件视频解码器不支持视频源
- OpenCV QT,显示视频的帧(不使用while循环)
- FFmpeg——使用硬件加速进行视频解码
- 在 openCV 中手动停止视频
- 强制Qt相机视频格式
- 在macOS Mojave上尝试OpenCV视频捕获时"Abort Trap: 6"
- 应用程序在打开的简历中捕获视频后没有响应
- 使用 IMFSinkWriter 编码的视频的播放速度会根据宽度而变化
- 如何在 c++ 中通过 http 发送大型视频文件?
- 在 QLabel 中显示视频
- OpenGL 调试上下文警告 -"将使用视频内存作为缓冲区异议的来源
- 这个工厂类在这个C++视频中的意义何在?
- 如何使用Windows Media Foundation直接将视频文件直接解码为Direct3D11纹理
- 如何使用Media Foundation从MP4视频中丢弃任意帧
- 如何更改Media Foundation Transform输出帧(视频)的大小
- 使用Media Foundation进行无缝视频播放