视频播放器——解码操作-图像后处理

大致流程

  • 初始化操作:根据源数据和目标数据的宽高以及像素格式,初始化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:输出图像的切片平面的步幅(每行数据的字节数)数组

本文福利, 免费领取C++音视频学习资料包、技术视频,内容包括(音视频开发,面试题,FFmpeg webRTC rtmp hls rtsp ffplay srs↓↓↓↓↓↓见下面↓↓文章底部点击免费领取↓↓

猜你喜欢

转载自blog.csdn.net/m0_60259116/article/details/126549566
今日推荐