介绍
在本系列,我打算花大篇幅讲解我的 gitee 项目音视频播放器,在这个项目,您可以学到音视频解封装,解码,SDL渲染相关的知识。您对源代码感兴趣的话,请查看基于FFmpeg和SDL的音视频播放器
如果您不理解本文,可参考我的前一篇文章音视频项目---基于FFmpeg和SDL的音视频播放器解析(十八)
解析
接着上文,我们继续解析 videooutput 的函数
首先,我们看构造函数
cpp
VideoOutput::VideoOutput(AVSync* avsync, AVRational time_base, AVFrameQueue* frame_queue, int video_width, int video_height){
this->avsync = avsync;
this->time_base = time_base;
this->frame_queue = frame_queue;
this->video_width = video_width;
this->video_height = video_height;
}
这比较好理解,就是一些私有成员变量的赋值
Init 函数
cpp
int VideoOutput::Init(){
if(SDL_Init(SDL_INIT_VIDEO)){
return -1;
}
win = SDL_CreateWindow("player", SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED, video_width, video_height, SDL_WINDOW_OPENGL | SDL_WINDOW_RESIZABLE);
if(!win){
return -1;
}
renderer = SDL_CreateRenderer(win, -1, 0);
if(!renderer){
return -1;
}
texture = SDL_CreateTexture(renderer, SDL_PIXELFORMAT_IYUV, SDL_TEXTUREACCESS_STREAMING, video_width, video_height);
if(!texture){
return -1;
}
yuv_buf_size = video_width * video_height * 1.5;
yuv_buf = new uint8_t[yuv_buf_size];
}
SDL_Init 初始化视频设备
SDL_CreateWindow 创建窗口,后面是参数,这里不做深究。
SDL_CreateRenderer 创建渲染器,后面的参数也不做深究
SDL_CreateTexture 创建纹理
然后,赋值 yuv 数组长度为 1.5 倍,这设计到 YUV420 原理,这篇文章不做深究
最后,创建 yuv 数组
好了,今天就解析到这里。下文解析后面的函数。
欲知后事如何,请听下回分解。