【发布时间】:2015-11-03 22:00:22
【问题描述】:
我的要求:尽快将图形(带有 alpha/抗锯齿)叠加到 UYVY 图像上。渲染必须在 UYVY 中进行,因为我需要同时渲染和编码(H.264 和 ffmpeg)。
我应该使用什么框架(最好是跨平台,但仅限 Windows)来渲染图像以供以后渲染/编码?
我查看了openvc,似乎绘图发生在BGR中,这需要将每个帧从UYVY(2通道)转换为BGR(3通道),然后再转换回来。
我查看了使用硬件加速的 SDL。它支持具有不同颜色空间的多种纹理。但是,我需要得到合成图像的方法 SDL_RenderReadPixels 在文档中提到“警告这是一个非常慢的操作,不应该经常使用。”
是否有一个框架可以绘制到 YUV 的 BYTE 数组上,可以使用 alpha 混合/抗锯齿?
【问题讨论】:
-
大多数“快速”YUV(有硬件支持)存储为 Y、U、V 的“块”。所以不是线性形式。大多数硬件将支持快速绘制此类表面。但是,我认为您的问题不是软件框架之一,而是找到满足您需求的软件和硬件的组合。
-
您可以使用互操作 OpenCL / CUDA 内核设置 OpenGL,您可以在缓冲区中传递 YUV 值,然后计算新的纹理输出。内核动态转换每个像素的值(以 RGB(A) 格式存储),以便可以渲染它。这可以并行完成,尽管需要一些调整才能找到正确的同步平衡。 FreeImage 不支持它,但 libyuv 可能正是你想要的。