ffmpeg 视频像素尺寸转换SwsContext、sws_scale 函数解释

函数介绍

SwsContext

格式转换的上下文,下面是

初始化函数

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);
struct SwsContext *sws_getCachedContext(struct SwsContext *context,
                                        int srcW, int srcH, enum AVPixelFormat srcFormat,
                                        int dstW, int dstH, enum AVPixelFormat dstFormat,
                                        int flags, SwsFilter *srcFilter,
                                        SwsFilter *dstFilter, const double *param);

注意

1、区别:第二个会到缓冲区里面去寻找第一个参数传入的SwsContext,若后面的格式参数都一样就返回,不一样则会重新创建,当然如果传入NULL,则和第一个一样重新创建一个新的。建议在单线程单视频解码用第二个,多视频播放用第一个。而且2个函数都会有较大开销,最好只初始化一次。

2、SwsContext 初始化会有一点时间开销。会创建像素格式转化的表。

3、在指定outWidth 时候又一些坑需要注意,参考:SwsContext、sws_scale缩放失败,或者缩放后视频乱码

参数:

flag: 缩放的算法,一般选1 性能高,快速线性插值

srcFilter 过滤器

dstFilter过滤器

param 和flag使用算法相关。传入空,使用默认。

清理函数

void sws_freeContext(struct SwsContext *swsContext);

note:这里是 不是指针的指针,这里可能清理空间,引用计数没有清零,清理的时候注意。

缩放函数sws_scale

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[]);

srcSlice 对应具体数据的数组,二维数组,如果是平面存储的则有3个一维数组,如果是rgba交错的,则一个

srcStride 一行的数据大小,srcSlice 可能有三个

srcSliceY 深度,这里用不到

srcSliceH 图像高度

dst[]存储的空间,

dstStride存储的一行的大小

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值