一、int av_image_get_buffer_size(enum AVPixelFormat pix_fmt, int width, int height, int align);
函数的作用是通过指定像素格式、图像宽、图像高来计算所需的内存大小
重点说明一个参数align:此参数是设定内存对齐的对齐数,也就是按多大的字节进行内存对齐。比如设置为1,表示按1字节对齐,那么得到的结果就是与实际的内存大小一样。再比如设置为4,表示按4字节对齐。也就是内存的起始地址必须是4的整倍数。
二、av_image_alloc()是这样定义的。此函数的功能是按照指定的宽、高、像素格式来分析图像内存。
int av_image_alloc(uint8_t *pointers[4], int linesizes[4], int w, int h, enum AVPixelFormat pix_fmt, int align);
pointers[4]:保存图像通道的地址。如果是RGB,则前三个指针分别指向R,G,B的内存地址。第四个指针保留不用 linesizes[4]:保存图像每个通道的内存对齐的步长,即一行的对齐内存的宽度,此值大小等于图像宽度。
w: 要申请内存的图像宽度。
h: 要申请内存的图像高度。
pix_fmt: 要申请内存的图像的像素格式。
align: 用于内存对齐的值。
返回值:所申请的内存空间的总大小。如果是负值,表示申请失败。
三、int av_image_fill_arrays(uint8_t *dst_data[4], int dst_linesize[4], const uint8_t *src, enum AVPixelFormat pix_fmt, int width, int height, int align);
av_image_fill_arrays()函数自身不具备内存申请的功能,此函数类似于格式化已经申请的内存,即通过av_malloc()函数申请的内存空间。
再者,av_image_fill_arrays()中参数具体说明:
dst_data[4]: [out]对申请的内存格式化为三个通道后,分别保存其地址
dst_linesize[4]: [out]格式化的内存的步长(即内存对齐后的宽度)
*src: [in]av_alloc()函数申请的内存地址。
pix_fmt: [in] 申请 src内存时的像素格式
width: [in]申请src内存时指定的宽度
height: [in]申请scr内存时指定的高度
align: [in]申请src内存时指定的对齐字节数。
通过以上实例可以看到,(a)计算所需内存大小av_image_get_bufferz_size() --> (b) 按计算的内存大小申请所需内存 av_malloc() --> (c) 对申请的内存进行格式化 av_image_fill_arrays();
rtsp://admin:gzzxsy00@192.168.3.64:554/h264/ch1/main/av_stream
rtsp://admin:admin12345@192.168.10.101:554/h264/ch1/main/av_stream