首页 > 其他分享 >avdevice_register_all()解析备忘

avdevice_register_all()解析备忘

时间:2023-09-22 23:33:20浏览次数:39  
标签:demuxer const register list 备忘 ff muxer avdevice

以下解析基于fmpeg-6.0。

void avdevice_register_all(void)
{
    avpriv_register_devices(outdev_list, indev_list);
}
从上面可以看出来,avdevice_register_all()通过avpriv_register_device注册所有输入输出列表上的设备。
其中,outdev_list如下:
static const FFOutputFormat * const outdev_list[] = {
    &ff_alsa_muxer,
    &ff_fbdev_muxer,
    &ff_oss_muxer,
    &ff_sdl2_muxer,
    &ff_sndio_muxer,
    &ff_v4l2_muxer,
    &ff_xv_muxer,
    NULL };
indev_list如下:
static const AVInputFormat * const indev_list[] = {
    &ff_alsa_demuxer,
    &ff_fbdev_demuxer,
    &ff_lavfi_demuxer,
    &ff_oss_demuxer,
    &ff_sndio_demuxer,
    &ff_v4l2_demuxer,
    &ff_xcbgrab_demuxer,
    NULL };
可见avpriv_register_device处理的是两个列表,一个是FFOutputormat列表,一个是AVInputFormat列表。下面看一下,具体如何做的,如下
void avpriv_register_devices(const FFOutputFormat * const o[], const AVInputFormat * const i[])

{

    atomic_store_explicit(&outdev_list_intptr, (uintptr_t)o, memory_order_relaxed);

    atomic_store_explicit(&indev_list_intptr,  (uintptr_t)i, memory_order_relaxed);

}
其中的注册输入设备列表和输出设备列表的函数是宏定义函数,主要功能是将输入输出设备列表地址赋予静态变量outdev_list_intptr和indev_list_intptr。
uintptr_t是ISO C99定义的数据类型在stdint.h中,该类型长度始终和设备指针长度一致,故用于需要夸平台的指针和整数相互转换。
所以avdevice_register_all函数的主要功能是将输入输出format的指针赋值。






 

标签:demuxer,const,register,list,备忘,ff,muxer,avdevice
From: https://www.cnblogs.com/uuvv/p/17723681.html

相关文章

  • 高中数学 - 集合相关数学符号备忘
    元素与集合集合一般用A,B,C,D等这样的大写字母表示。常见的数集:C-复数集,R-实数集, N-非负整数集, Q-有理数集,Z-整数集集合元素一般用a,b,c,d等这样的小写字母表示元素a属于集合A,用a∈A表示元素a不属于集合A,用a∉A表示 集合运算两个集合的交集:∩两个集合的并集:......
  • js触发事件备忘
    一般事件事件浏览器支持描述onClick: 鼠标点击事件,多用在某个对象控制的范围内的鼠标点击onDblClick: 鼠标双击事件onMouseDown: 鼠标上的按钮被按下了onMouseUp: 鼠标按下后,松开时激发的事件onMouseOver: 当鼠标移动到某对象范围的上方时触发的事件onMouseMove:......
  • oracle 内置函数备忘录
    这两天在写oracle包,蛮大的一个,为了方便查找,就丢上来个。黄色是经常用到的,顺便看看对大家有没有帮助。  SQL中的单记录函数1.ASCII返回与指定的字符对应的十进制数;SQL>selectascii('A')A,ascii('a')a,ascii('0')zero,ascii('')spacefromdual;       A    ......
  • sql语句备忘(dba)
    user_tab_comments;表注释   user_col_comments;表字段注释   以上两个只能获取自己用户的表的注释信息,如果要访问自己能够访问的其他用户的表,则需要使用:   all_tab_comments;表注释   all_col_comments;表字段注释   当然,如果有DBA权限,则可以使用   dba_tab_co......
  • js语法备忘
    一.js的数据类型和变量JavaScript有六种数据类型。主要的类型有number、string、object以及Boolean类型,其他两种类型为null和undefined。String字符串类型:字符串是用单引号或双引号来说明的。(使用单引号来输入包含引号的字符串。)如:“Thecowjumpedoverthemoon......
  • 解决安装wsl时候报错的问题: WslRegisterDistribution failed with error: 0x800701bc
    在Win10或者Win11上安装wsl的时候,可能会遇到如下的错误信息:Error:0x800701bcWSL2??????????????????https://aka.ms/wsl2kernelPressanykeytocontinue...  这个是由于系统内置的WSL内核过低导致的,可以到如下的网址下载升级包:https://learn.microsoft.com/zh-cn......
  • RDLC报表设计与打印相关备忘
    1、RDLC报表设计在最新VSTS集成环境(IDE),如VS2019及以上,不能打开Designer(设计器);VS2015可以(默认已安装)用图形化界面进行设计;2、“报表数据”页签显示:主菜单“视图”->“ReportData”3、设计界面显示标尺,以便直观看到报表的宽度(如下报表宽度27cm+,所以该表设计是横向A4纸张页面布局......
  • k8s集群-spring cloud 集成seata的时候:can not register RM,err:can not connect to s
    背景说明seate和其他微服务在k8s集群中部署,都在同一个命名空间。注册到nacos的同一个命名空间seate是官方提供,无改动k8s中部署情况:报错提示core服务的报错内容:2023-09-1211:07:06.524ERROR7---[eoutChecker_2_1]i.s.c.r.netty.NettyClientChannelManager:0101c......
  • 手机换机备忘
    通讯录联系人转移SIM卡转移方式微信公众号搜索“QQ同步助手”照片视频如何保存阿里云盘手机远程控制软件ToDeskAirDroid向日葵......
  • 【设计模式】备忘录模式Memento - 在聊天会话中记录历史消息
    (目录)相较于其他设计模式,备忘录模式不算太常用,但好在这个模式理解、掌握起来并不难,代码实现也比较简单,应用场景更是比较明确和有限。一般应用于编辑器或会话上下文中防丢失、撤销、恢复等场景中。模式原理分析备忘录模式的原始定义是:捕获并外部化对象的内部状态,以便以后可......