我正在使用BlackMagic DeckLink卡构建录像机。
程序使用OpenGL显示Frames和FFMPEG(使用glReadPixels()方法)来记录它们。
我在我的程序中设置视口以应用自动字母/柱子,无论图像/监视器是16:9/4:3。
问题在于,当我捕获这个视口的这些帧时,它们当然会记录在我的视口的分辨率中(即全高清源 - >视口由于1600x1200分辨率的监视器 - >信箱低至1600x900)等等FFMPEG在顶部/底部记录那些带有黑条的1600x1200。
是否有可能在通过setViewport函数和所有重新缩放的东西之前获取RAW Frame?
答案 0 :(得分:1)
好吧,在某些时候,图像会传递给OpenGL。为什么不直接将数据传递给FFMPEG,而不是通过OpenGL进行冗长,低效和昂贵的往返。
如果OpenGL用于实时色彩空间转换,我建议您将其渲染到具有附加视频分辨率大小的纹理的FBO,在该FBO上使用glReadPixels(最好是PBO);最后在窗口分辨率中将渲染到纹理的图像绘制到主屏幕上。
但是,如果您可以直接将原始帧直接提供给FFMPEG(也可以进行色彩空间转换),我强烈建议您这样做。