我有一个缓冲区内容流,它实际上包含 480x800 大小的 ARGB 图像[大小为 480*800*4 的字节数组]。我想以指定的 fps(12) 将大约 10,000 个类似图像编码为 h.264 流。这显示了如何将图像编码为编码视频,但需要输入为 yuv420。
现在我有 ARGB 图像,我想编码成 CODEC_ID_H264 如何将 YUV420p 的 RGB 转换为 ffmpeg 编码器?显示如何为 rgb24 执行此操作,但如何为 rgb32 执行此操作,即 ARGB 图像数据
我如何为此使用 libavcodec?
编辑:我发现如何将 YUV420p 的 RGB 转换为 ffmpeg 编码器? 但我不明白。
从第一个链接,我知道 AVFrame 结构包含 data[0]、data 1、data[2] 填充了 Y、U 和 V 值。
在第二个链接中,他们展示了如何使用 sws_scale 将 RGB24 转换为 YUV420
SwsContext * ctx = sws_getContext(imgWidth, imgHeight,
AV_PIX_FMT_RGB24, imgWidth, imgHeight,
AV_PIX_FMT_YUV420P, 0, 0, 0, 0);
uint8_t * inData[1] = { rgb24Data }; // RGB24 have one plane
int inLinesize[1] = { 3*imgWidth }; // RGB stride
sws_scale(ctx, inData, inLinesize, 0, imgHeight, dst_picture.data, dst_picture.linesize)
这里我假设 rgb24Data 是包含 RGB24 图像字节的缓冲区。
那么我如何将这些信息用于 32 位的 ARGB?我是否需要手动剥离 alpha 通道或任何其他解决方法?
谢谢