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):初始化与解复用

ffplay源码剖析(3.2.4 + sdl2):初始化与解复用

ffplay源码剖析(3.2.4 + sdl2):解码

ffplay源码剖析(3.2.4 + sdl2):解码

ffplay源码分析6-音频重采样

ffplay.c函数结构简单分析(绘图)