Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/delphi/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android使用用于ARGB的libavcodec编码h264_Android_Ffmpeg_H.264_Libavcodec_Argb - Fatal编程技术网

Android使用用于ARGB的libavcodec编码h264

Android使用用于ARGB的libavcodec编码h264,android,ffmpeg,h.264,libavcodec,argb,Android,Ffmpeg,H.264,Libavcodec,Argb,我有一个缓冲区内容流,它实际上包含480x800大小的ARGB映像[大小为480*800*4的字节数组]。我想以指定的fps(12)将大约100000个类似的图像编码成一个h.264流。显示如何将图像编码为编码视频,但要求输入为yuv420 现在我有了ARGB图像,我想编码到CODEC_ID_H264中 显示如何为rgb24执行此操作,但如何为rgb32执行此操作,即ARGB图像数据 如何使用libavcodec进行此操作 编辑:我找到了 但我不明白 从第一个链接中,我知道AVFrame str

我有一个缓冲区内容流,它实际上包含480x800大小的ARGB映像[大小为480*800*4的字节数组]。我想以指定的fps(12)将大约100000个类似的图像编码成一个h.264流。显示如何将图像编码为编码视频,但要求输入为yuv420

现在我有了ARGB图像,我想编码到CODEC_ID_H264中 显示如何为rgb24执行此操作,但如何为rgb32执行此操作,即ARGB图像数据

如何使用libavcodec进行此操作

编辑:我找到了 但我不明白

从第一个链接中,我知道AVFrame struct包含数据[0],数据,数据[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通道或任何其他工作


谢谢

只需将像素格式和线条步幅从RGB24切换到ARGB即可

SwsContext * ctx = sws_getContext(imgWidth, imgHeight,
                              AV_PIX_FMT_ARGB, imgWidth, imgHeight,
                              AV_PIX_FMT_YUV420P, 0, 0, 0, 0);
uint8_t * inData[1] = { rgb24Data }; // RGB24 have one plane
int inLinesize[1] = { 4*imgWidth }; // RGB stride
sws_scale(ctx, inData, inLinesize, 0, imgHeight, dst_picture.data, dst_picture.linesize)

谢谢,我将尝试此更新。此外,这意味着如果我的输入是RGB565,我可以尝试AV_PIX_FMT_RGB565,sws_scale是否也支持RGB565?在编译过程中,我得到未知的类型名
SwsContext
,尽管我包括了swscale.ht,但它应该会有自己的问题。结构不是纯C自动类型。两者都可以。RGB不是平面格式(三个颜色平面交错)。所以sws_scale只使用第一个指针。如果您使用的是平面格式,如YUV420P,则需要填写其他指针。