gpt4 book ai didi

opengl - 填充 AVFrame.data 的最佳方法是什么

转载 作者:行者123 更新时间:2023-12-04 23:03:49 26 4
gpt4 key购买 nike

我想尽快将 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];

最佳答案

您可以使用 sws_scale .

事实上,你不需要着色器来转换 RGB->YUV。相信我,它不会有非常不同的表现。

swsContext = sws_getContext(WIDTH, HEIGHT, AV_PIX_FMT_RGBA, WIDTH, HEIGHT, AV_PIX_FMT_YUV, SWS_BICUBIC, 0, 0, 0 );
sws_scale(swsContext, (const uint8_t * const *)sourcePictureRGB.data, sourcePictureRGB.linesize, 0, codecContext->height, destinyPictureYUV.data, destinyPictureYUV.linesize);
destinyPictureYUV中的数据将准备好去编解码器。

在此示例中,命运图片YUV 是 AVFrame你想填满。尝试这样设置:
AVFrame * frame;
AVPicture destinyPictureYUV;

avpicture_alloc(&destinyPictureYUV, codecContext->pix_fmt, newCodecContext->width, newCodecContext->height);

// THIS is what you want probably
*reinterpret_cast<AVPicture *>(frame) = destinyPictureYUV;

通过此设置,您还可以根据需要在 GPU 中填充已转换为 YUV 的数据……您可以选择所需的方式。

关于opengl - 填充 AVFrame.data 的最佳方法是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32701507/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com