封装了几个小函数,备用


static int image_scale(unsigned char* src, int src_width, int src_height, int src_format, unsigned char* dst, int dst_width, int dst_height, int dst_format)
{
AVFrame src_frame = { 0 }, dst_frame = { 0 };
struct SwsContext* img_convert_ctx = NULL;


av_image_fill_arrays(src_frame.data, src_frame.linesize, src, (AVPixelFormat)src_format, src_width, src_height, 1);
av_image_fill_arrays(dst_frame.data, dst_frame.linesize, dst, (AVPixelFormat)dst_format, dst_width, dst_height, 1);


img_convert_ctx = sws_getContext(src_width, src_height, (AVPixelFormat)src_format, dst_width, dst_height, (AVPixelFormat)dst_format, SWS_BICUBIC, NULL, NULL, NULL);
sws_scale(img_convert_ctx, src_frame.data, src_frame.linesize, 0, src_height, dst_frame.data, dst_frame.linesize);
sws_freeContext(img_convert_ctx);


return 0;

}


 

static int image_scale_bgr24_to_yuv420p(unsigned char* src, int src_width, int src_height, unsigned char* dst, int dst_width, int dst_height)
{
struct SwsContext* img_convert_ctx = NULL;


unsigned char* src_planes[3] = { src, NULL, NULL };
int src_stride[3] = { src_width * 3, 0, 0 };


unsigned char* dst_planes[3] = { dst, dst + dst_width * dst_height, dst + (dst_width * dst_height * 5 / 4) };
int dest_stride[3] = { dst_width, dst_width / 2, dst_width / 2 };


img_convert_ctx = sws_getContext(src_width, src_height, AV_PIX_FMT_BGR24, dst_width, dst_height, AV_PIX_FMT_YUV420P, SWS_BICUBIC, NULL, NULL, NULL);
sws_scale(img_convert_ctx, src_planes, src_stride, 0, src_height, dst_planes, dest_stride);
sws_freeContext(img_convert_ctx);


return 0;
}

static int image_scale_yuv420p_to_bgr24(unsigned char* src, int src_width, int src_height, unsigned char* dst, int dst_width, int dst_height)
{
struct SwsContext* img_convert_ctx = NULL;


unsigned char* src_planes[3] = { src, src + src_width * src_height, src + (src_width * src_height * 5 / 4) };
int src_stride[3] = { src_width, src_width / 2, src_width / 2 };


unsigned char* dst_planes[3] = { dst, NULL, NULL };
int dst_stride[3] = { dst_width * 3, 0, 0 };


img_convert_ctx = sws_getContext(src_width, src_height, AV_PIX_FMT_YUV420P, dst_width, dst_height, AV_PIX_FMT_BGR24, SWS_BICUBIC, NULL, NULL, NULL);
sws_scale(img_convert_ctx, src_planes, src_stride, 0, src_height, dst_planes, dst_stride);
sws_freeContext(img_convert_ctx);


return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值