我有一个实际包含480x800大小的ARGB图像[字节数组大小为480 * 800 * 4]的缓冲区内容的流。我想将大约10,000个相似的图像编码成指定fps(12)的h.264流。 this显示如何将图像编码为编码视频,但要求输入为yuv420。Android编码h264使用libavcodec ARGB
现在我有ARGB图片,我想编码成CODEC_ID_H264 How to convert RGB from YUV420p for ffmpeg encoder?展示了如何做到这一点为RGB24,但如何做到这一点为RGB32,意ARGB图像数据
如何使用libavcodec的这个?我发现How to convert RGB from YUV420p for ffmpeg encoder? 但我不明白。我知道AVFrame结构包含数据[0],数据1,数据[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图像字节的缓冲区。
那么我如何使用这个信息的ARGB,这是32位?我是否需要手动剥离Alpha通道或任何其他工作?
谢谢
谢谢你,我会尝试这一点,并更新。另外,这意味着我可以尝试AV_PIX_FMT_RGB565如果我的输入是RGB565,sws_scale是否也支持RGB565? – nmxprime
在编译期间,我得到了未知类型名称'SwsContext',尽管我包含了swscale.h – nmxprime
这应该得到它自己的问题。 – szatmary