------------------------------------全系列文章目录------------------------------------
大致流程
- 初始化操作:根据源数据和目标数据的宽高以及像素格式,初始化SwsContext结构体
- 解码操作:对demux出来的数据包进行解码
- 后处理操作:若解码成功,则将源图像数据转换成目标图像数据
解码相关API函数
-
avcodec_decode_video2:将大小为 avpkt->size 的视频帧从 avpkt->data 解码为图片。某些解码器可能支持单个 AVPacket包含多个帧,但解码器将只解码第一帧。
int avcodec_decode_video2(AVCodecContext *avctx, AVFrame *picture, int *got_picture_ptr, const AVPacket *avpkt);
-
AVCodecContext:描述该音频解码器上下文的结构体
-
AVFrame:用于存储解码的数据
-
int * got_frame_ptr:如果当前无法解码帧,则返回0;否则返回非0
-
AVPacket:待解码的数据包
-
返回值:负数表示出现错误,否则为解码时消耗AVPacket的字节数
-
图像后处理相关API函数
-
sws_getContext:分配并返回一个 SwsContext,可使用sws_scale() 执行缩放/转换操作。
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);
- srcW,srcH,srcFormat:源数据宽高及格式
- dstW,dstH,dstFormat:目标数据宽高及格式
- flags:指定用于重新缩放的算法和选项,如SWS_FAST_BILINEAR,SWS_BICUBIC
- srcFilter,dstFilter:源/目标图像的滤波器信息
- param:特定缩放算法需要的参数
-
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[]);
- c:图像后处理结构体SwsContext
- srcSlice:源切片平面的指针数组
- srcStride:源切片平面的步幅(每行数据的字节数)数组
- srcSliceY:要处理的切片在源图像中的位置,即切片第一行在图像中的数量(从零开始计数)
- srcSliceH:源切片的高度,即切片中的行数
- dst:输出图像的切片平面的指针数组
- dstStride:输出图像的切片平面的步幅(每行数据的字节数)数组