解码后的数据进行缩放或者格式转换

解码后的数据进行缩放或者格式转换

在这里插入图片描述
(1) int av_image_get_buffer_size(enum AVPixelFormat pix_fmt, int width, int height, int align);

作用:通过指定像素格式、图像宽、图像高来计算所需的内存大小
参数align:指定按多大的字节进行内存对齐。比如设置为4,表示按4字节对齐。也就是内存的起始地址必须是4的整倍数。

(2) void *av_malloc(size_t size)

作用:分配内存的大小

(3)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);

作用:格式化src指定的内存块,即将dst_data指向src的内存。
参数:
dst_data[4]:对申请的内存格式化为三个通道后,分别保存其地址
dst_linesize[4]: 格式化的内存的步长(即内存对齐后的宽度)
*src: av_alloc()函数申请的内存地址。
pix_fmt: 申请 src内存时的像素格式
width:申请src内存时指定的宽度
height:申请scr内存时指定的高度
align:申请src内存时指定的对齐字节数

说明:linesize:⾏字节数,在我们解码出数据后,经常会遇到这个linesize。既然我们知 道了align的概念,就该明⽩这个linesize就是为了让你取出真实的数据。解码后的数据中可能是经过对⻬的,既然有对⻬,那就是数据⾥加多了⼀些为了对⻬⽽多余的字节,如果 我们想最后显示视频数据,那么这些多余的数据势必要进⾏剔除掉,那么怎么剔除呢,linesize就是来帮你 ⼲这事的,有了它,你就可以一行一行⽐较,然后把每⾏最后为了对⻬⽽补的字节删除,还原出视频的真实数据。

(3)struct SwsContext *sws_getContext(int srcW, int srcH, enum AVPixelFormat srcFormat,
int dstW, int dstH, enum AVPixelFormat dstFormat,
int flags, SwsFilter *srcFilter,
SwsFilter *dstFilter, const double *param);
作用:对函数内部定义的 SwsContext 结构体中的各个成员变量进行赋值,成功执行的话返回该 SwsContext,否则返回 NULL,返回的 SwsContext 在之后的 sws_scale() 和 sws_freeContext() 皆会用到。

参数:
flags:选择缩放算法(只有当源图像和目标图像大小不同时有效),一般选择SWS_FAST_BILINEAR ;
srcFilter: 源图像的滤波器信息, 若不需要传NULL ;
dstFilter:目标图像的滤波器信息, 若不需要传NULL;
param: 特定缩放算法需要的参数,默认为NULL ;

(4)int sws_scale(struct SwsContext *c, const uint8_t *const srcSlice[],
const int srcStride[], int srcSliceY, int srcSliceH,
uint8_t *const dst[], const int dstStride[]);
作用: 主要是用来做视频像素格式和分辨率的转换,其优势在于:可以在同一个函数里实现:1.图像色彩空间转换, 2.分辨率缩放,3.前后图像滤波处理。不足之处在于:效率相对较低,不如 libyuv 或 shader。

参数:
c:转换格式的上下文结构体,也就是 sws_getContext() 函数返回的结果。
srcSlice[]:源图像的每个颜色通道的数据指针。其实就是解码后的 AVFrame 中的 data[] 数组。因为不同像素的存储格式不同,所以 srcSlice[] 数组也有可能不同。
srcStride[]:源图像的每个颜色通道的跨度。也就是每个通道的行字节数,对应的是解码后的 AVFrame 中的 linesize[] 数组,根据它可以确立下一行的起始位置。
srcSliceY、int srcSliceH:定义在源图像上处理区域,srcSliceY 是起始位置,srcSliceH 是处理多少行。如果 srcSliceY=0,srcSliceH=height,表示一次性处理完整个图像。这种设置是为了多线程并行,例如可以创建两个线程,第一个线程处理 [0, h/2-1] 行,第二个线程处理 [h/2, h-1] 行,并行处理加快速度。
dst[]、dstStride[]:定义目标图像信息(目标图像输出的每个颜色通道数据指针,每个颜色通道行字节数)。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值