ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

int av_image_get_buffer_size(enum AVPixelFormat pix_fmt, int width, int height, int align);

2019-04-07 21:55:58  阅读:347  来源: 互联网

标签:get int align 申请 内存 av 对齐 image


一、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

标签:get,int,align,申请,内存,av,对齐,image
来源: https://blog.csdn.net/m0_37346206/article/details/89074935

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有