×
分享到微信

打开微信,使用扫一扫进入页面后,点击右上角菜单,

点击“发送给朋友”或“分享到朋友圈”完成分享

FFmpeg-ffmpeg.c逻辑梳理 专修缝纫机2021-07-27 16:45:51 回复 查看 经验交流 干货资源
FFmpeg-ffmpeg.c逻辑梳理
分享到:

1.ffmpeg-main的所有函数粗略释义

    init_dynload():如果是win32,则加载动态库

    register_exit(ffmpeg_cleanup):对filtergraph(每个filtergraph对应的inputs、outputs)、outputfile、outputstream、inputfile、inputstream等进行一系列的free

    setvbuf(stderr,NULL,_IONBF,0):win32运行时所需

    av_log_set_flags(AV_LOG_SKIP_REPEATED):设置flags=AV_LOG_SKIP_REPEATED(即为1)

    parse_loglevel(argc, argv, options):检测命令行是否设置loglevel,并进行一系列参数的设置、初始化

    avdevice_register_all():注册所有编码器和解码器

    avformat_network_init():网络功能的初始化,根据不同平台(win需要初始化winsock)和不同编译选择(GNU和openssl)进行不同的初始化

    show_banner(argc, argv, options):打印编译选项、copyright、编译时间、类库信息等

    ffmpeg_parse_options(argc, argv):解析命令行中全部输入选项。调用两次open_file来打开输入文件和输出文件

    transcode():转码

    exit_program(received_nb_signals ? 255 : main_return_code):退出和清理程序

2.main函数主要引用函数详解

①show_banner(argc, argv, options)

    功能:该函数的功能主要为打印版本、版权、调用库、编译时间,具体执行页面在终端中为

②ffmpeg_parse_options(argc, argv)

    功能:该函数功能为解析命令行中全部输入选项,并打开输入输出文件

    函数解析图如下

图片.png

    简要说明

    a.在该函数中调用了两次open_file,分别用于打开输入文件和输出文件,实现方式为调用open_input_file和open_output_file

    b.打开输入文件open_input_file时调用了av_find_input_format和avformat_alloc_context,对输入数据流像素格式进行初始化,随后对AVOption进行设置(av_dict_set、av_dict_set_init),而后寻找编解码器并进行解码器的初始化

    c.打开输出文件open_output_file,该函数首先调用avformat_alloc_output_context2()初始化AVFormatContext结构体,而后根据媒体类型的不同,分别调用new_video_stream(),new_audio_stream(),new_sub _stream()等创建不同的AVStream

③transcode()

    功能:该函数实现转码

    函数解析图如下

图片.png

    简要说明

    a.函数check_keyboard_interaction,根据源代码注释得知其功能为检索键盘输入,当输入Q时,终止转码并退出

    图片.png

    b.transcode_init函数中有一个dump模块,用于打印stream信息

    图片.png

    c.print_report主要实现打印转码执行信息的功能


版权所有 © 2021 寒武纪 Cambricon.com 备案/许可证号:京ICP备17003415号-1
关闭