zoukankan      html  css  js  c++  java
  • ffmpeg中关于ffplay部分的概要分析-2

    1. 全局变量options[] 包含了所支持的所有的命令行选项,可以用来确认所输入的变量是否能对应到options[]中,若解析正确则将得到的值赋予给options[]中所提前指定的变量中,比如video_disable和audio_disable的值就来自于命令行。函数parse_options()会对命令行中输入的参数进行解析,解析的依据就是全局变量 options[]。
    2. 函数SDL_Init(flags),其中flags=SDL_INIT_VIDEO | SDL_INIT_AUDIO | SDL_INIT_TIMER,猜测是初始化SDL中对应的模块,比如Video,Audio等。
    3. 函数: SDL_EventState(SDL_ACTIVEEVENT, SDL_IGNORE);

                SDL_EventState(SDL_SYSWMEVENT, SDL_IGNORE);

                  SDL_EventState(SDL_USEREVENT, SDL_IGNORE); 

        该函数的作用意思是当对应的事件发生时,忽略该事件。

      4.   函数SDL_EnableKeyRepeat(SDL_DEFAULT_REPEAT_DELAY, SDL_DEFAULT_REPEAT_INTERVAL)设定按下按键的时长以及连续按下键的间隔。

      5. 全局变量VideoState{}存储着三个模式(Video, Audio, Subtitle)各自的状态信息,该内存区域被后续开辟的线程所共享。

        它是在函数stream_open()中申请的内存。

    函数avformat_open_input()的调用栈分析:

    1. 在函数init_input()中,当判断是非文件格式的数据流时,则直接调用函数av_probe_input_format2()对该数据流文件的后缀名进行probe探测分析,当判断是文件类的数据流时,会先调用函数s->io_open()先打开该文件,然后再调用函数av_probe_input_buffer2()进行数据流文件后缀名的分析。

    疑问:非文件流的文件也有后缀名吗?

    2. 函数av_iformat_next()从format链表first_iformat中不断的取出链表项。每个链表项中的数据包含一个文件类型比如:avfoundation, lavfi等,同时对每种类型的数据流,链表项中又包含一组API函数可以被调来对该类数据流进行分析,比如 read_probe(), read_header(), read_packet(), read_close(), read_seek(), read_play(), read_pause()等等这些API函数。

    3. 函数ff_guess_image2_codec()使用文件后缀名数组ff_img_tags[]和输入的文件名后缀进行比较,该函数在img_read_probe()中被调用。img_read_probe()在检测完文件后缀名后,会返回一个score评分。如果后缀名匹配,则评分比较高。

    4. 函数s->io_open()映射的是函数io_open_default(),这是该函数调用栈结构

      io_open_default() 

        ffio_open_whitelist()

          ffurl_open_whitelist()

            ffurl_connect()

              uc->prot->url_open()

                file_open()

    file_open()会最终打开由命令行送入的文件,得到文件的句柄。

      io_open_default() 

        ffio_open_whitelist()

          ffurl_open_whitelist()

            ffio_fdopen()

    函数ffio_fdopen()会打开对应的io函数为该文件的操作做准备,这些io函数列表如下:

        io_read_packet()

        io_write_packet()

        io_seek()

        io_read_pause()

        io_read_seek()

  • 相关阅读:
    Vue路由和组件分别在什么场景使用
    mybatis返回集合对象包含List<String>
    vue登录页+验证码+MD5加密
    mybatis 查询树形结构
    解决Vue Router报错 Error: Cannot find module ‘@/views/xxx‘ at webpackEmptyContext
    HttpServletRequest 在Filter中添加header
    CRM体系中的SFA(SaleForce Automation)应该怎么设计?
    Google Analytics Advertisement 广告 URL : 数据产品知识 UTM
    Win11要的TPM 2.0不一定是独立芯片,你的CPU固件可能已经支持 || 杨澜对话尹志尧:美国顶尖半导体专家华人很多,国内却奇缺
    mysql SQL注入攻击 解决Orm工具Hibernate,Mybatis, MiniDao 的 sql 预编译语句 ;解决非Orm工具JDBCTemplate的
  • 原文地址:https://www.cnblogs.com/wzgpeter/p/5823789.html
Copyright © 2011-2022 走看看