【发布时间】:2015-12-18 12:34:54
【问题描述】:
我想尽快将 opengl 帧缓冲数据传输到 AVCodec。
我已经使用着色器将 RGB 转换为 YUV 并使用 glReadPixels 读取它
我仍然需要手动填充 AVFrame 数据。有没有更好的办法?
AVFrame *frame;
// Y
frame->data[0][y*frame->linesize[0]+x] = data[i*3];
// U
frame->data[1][y*frame->linesize[1]+x] = data[i*3+1];
// V
frame->data[2][y*frame->linesize[2]+x] = data[i*3+2];
【问题讨论】:
-
我认为应该可以将数据读回 PBO 并将其映射到客户端地址空间,并在 AVFrame 结构中直接引用该内存。
-
但是数据格式是YUV数组。我需要单独的数组
-
您已经可以在着色器中根据需要组织数据。乍一看可能有点不直观,但绝对有可能。
标签: opengl ffmpeg libavcodec avcodec