ffmpeg图片格式转换

本文介绍了如何使用ffmpeg进行图片格式转换,特别是在视频播放时遇到不支持的采样格式时,通过转换来适应播放器。主要涉及SwrContext和AVFrame结构体,以及音频重采样的相关函数,包括创建转换上下文、初始化帧数据、重采样操作和资源释放等步骤。

图片格式转换,指的是将图片从一种格式转换到另一种格式(如YUV420到RGB888),可以通过ffmpeg实现

图片格式转换的使用场景之一是:当我们要播放一段视频时解封装得到了一段视频原始数据,可是我们使用的播放器(如SDL)不支持该采样格式的视频原始数据,这时就需要进行图片格式转换。

目录

 图片格式转换用到的结构体

音频重采样用到的函数 


 

 图片格式转换用到的结构体

SwrContex     重采样上下文

AVFrame 存放解码后数据的结构体   

音频重采样用到的函数 

1、  创建格式转换上下文

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

2、  初始化帧数据(在堆内开辟空间)

AVFrame *av_frame_alloc(void);

3、  初始化重采样输出AVFrame中data的空间(在堆内开辟空间)

int av_image_alloc(uint8_t *pointers[4], int linesizes[4],

                   int w, int h, enum AVPixelFormat pix_fmt, int align);

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

5、  重采样结束后需要释放相关数据,首先是AVFrame中的data部分

void av_freep(void *ptr);

6、  释放AVFrame

void av_frame_free(AVFrame **frame);

7、  释放重采样上下文

void sws_freeContext(struct SwsContext *swsContext);

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值