ffplay源码剖析(3.2.4 + sdl2):函数调用流程图
Posted Ven_J
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ffplay源码剖析(3.2.4 + sdl2):函数调用流程图相关的知识,希望对你有一定的参考价值。
最近在学习ffplay的源码知识,网上关于ffplay的都是老版本的基于sdl1.x版本的,于是自己结合自己的理解分析了一下ffpaly3.2.4(基于sdl2)的源码,并记录下来供自己以后查阅。如果有理解错误,还请指正。
1、总体框架:
ffmpeg3.2.4版本中的ffplay的函数调用图如下所示:
avdevice_register_all()这ffmpeg设备进行初始化与注册。
av_register_all()初始化 libavformat和注册所有的muxers、demuxers和protocols。
avformat_network_init()注册与初始化网络相关的网络传输协议。
init_opts()初始化命令行选项。
show_banner()显示视频信息。
parse_options()解析命令行参数。
SDL_Init()初始化SDL。
stream_open()打开视频进行处理。
event_loop()显示视频并且捕获相关sdl事件。
2、ffpaly线程
ffplay中一共有5个线程,一个解复用线程,三个解码线程,和一个显示线程。 解复用线程: read_thread ——> av_read_frame ——> packet_queue_put 音频解码线程: audio_thread ——> decoder_decode_frame ——> frame_queue_push 视频解码线程:video_thread ——> get_video_frame ——> queue_picture 字幕解码线程:subtitile_thread ——> decoder_decode_frame ——> frame_queue_push 显示线程: event_loop ——> refresh_loop_wait_event ——> video_refresh ——> video_display 步骤: ffplay先调用read_thread函数进行解复用,然后将解复用后的数据包存放到PacketQueue中,同时创建三个解码线程。 三个解码线程分别从各自的PacketQueue中取出AVPacket数据进行解码,得到AVFrame帧数据,然后将解码帧存放到FrameQueue中。 显示线程从FrameQueue中取出AVFrame帧数据,然后调用SDL进行显示。
以上是关于ffplay源码剖析(3.2.4 + sdl2):函数调用流程图的主要内容,如果未能解决你的问题,请参考以下文章
ffplay源码剖析(3.2.4 + sdl2):初始化与解复用