根据文档显示,内置H264 MFT的最大分辨率似乎为4096×2304像素。 https://msdn.microsoft.com/en-us/library/windows/desktop/dd797815(v=vs.85).aspx
是否可以使用允许更大格式的不同MFT,或者它是否可能?
答案 0 :(得分:3)
限制是针对编码格式和转换,而不是Media Foundation本身。似乎H265 (HEVC)可以支持最高4320p (7680 x 4320),同时提高了H264的图像质量。但是,您可能已经注意到,Windows 10支持H265,但它们当前的H265 decoder实现也有4096 x 2304的限制。可能会购买H265 SDK,其中包含其他版本的转换和接收器Windows,并支持更高的分辨率。
8K UHD [4320p]信息描述here。
有关给定决议here的名称的信息。
Google's VP9项目最多只支持4096 x 2304。 有些人已经注意到并撰写了关于在VP10上工作的Google工程师,并开始将代码推送到VP8和VP9所在的public libvpx repository。但这将是一段时间,并且在它准备好之前会有很多变化。
当然,如果您感觉有点代码疯狂,您可以随时为Media Foundation编写自定义转换和接收器,并在格式和分辨率方面支持您喜欢的任何内容,也许QUHD 16K (15360 x 8640)。
听起来你手上有一个有趣的项目,但你可能有点超前。 希望这会有所帮助。
修改强>
你提出了一个好点(与你的评论)。如果您的颜色格式是标准的,则有可能使用CLSID_CColorConvertDMO执行转换,尽可能使用SIMD寄存器/指令(不确定是否存在大小限制)。它具有双接口作为DMO和MFT。这绝对会让生活变得更轻松。
创建CLSID_CColorConvertDMO实例并设置输入和输出类型(格式,帧大小等)后,创建IMFSample(使用MFCreateSample)和IMFMediaBuffer(使用MFCreateMemoryBuffer })到示例(使用IMFSample::AddBuffer),然后所有必要的是调用ProcessInput和ProcessOutput来转换缓冲区(预先创建所有项目)。
RomanR还提供了一些代码here。
如果您的格式不标准,您仍然有很好的选择。在使用C ++ AMP(它是DirectCompute和HLSL的包装器)之后,我觉得直接使用DirectCompute和HLSL更自然。简单来说,您可以创建从内存中映射到GPU的数据视图,而HLSL非常像C,并且不难学习。
在完成转换之后,您只需要确定存储格式(标题等),并提供源和接收器(用于读取和写入/显示)。我怀疑与H264 / H265(增加的I / O)相比它会有点臃肿,但转换的开销很小。