obs-studio 源码学习 obs.h

obs.h 引用头文件介绍

c99defs.h:这个头文件提供了一些 C99 标准的定义和声明,包括一些常用的宏定义和类型定义,用于提高代码的可移植性和兼容性。

bmem.h:这个头文件提供了对内存分配和管理的功能,包括一些内存分配和释放的函数和宏定义,用于方便地进行内存操作。

profiler.h:这个头文件提供了性能分析和调试的功能,包括一些性能分析和调试的函数和宏定义,用于分析和优化程序的性能。

text-lookup.h:这个头文件提供了对文本查找和处理的功能,包括一些文本查找和处理的函数和宏定义,用于方便地处理文本数据。

graphics.h:这个头文件提供了对图形处理的功能,包括一些图形处理的函数和宏定义,用于处理图形数据和图形显示。

vec2.h 和 vec3.h:这两个头文件提供了对二维向量和三维向量的定义和操作,包括向量的创建、计算、转换等功能。

audio-io.h 和 video-io.h:这两个头文件提供了对音频和视频输入输出的功能,包括音频和视频的采集、处理、编码、解码等功能。

signal.h 和 proc.h:这两个头文件提供了对回调函数和信号处理的功能,包括对信号的发送、接收和处理等功能。

obs-config.h 和 obs-defs.h:这两个头文件提供了对 OBS Studio 配置和定义的功能,包括对配置文件的读取、写入和管理等功能。

obs-data.h 和 obs-properties.h:这两个头文件提供了对 OBS Studio 数据和属性的功能,包括对数据的读取、写入和管理,以及对属性的定义和操作等功能。

obs-interaction.h:这个头文件提供了对 OBS Studio 交互的功能,包括对交互的定义和操作,用于实现用户与程序的交互。

obs-missing-files.h:这个头文件可能包含了一些缺失的文件或者需要特别处理的文件。它通常用于处理一些特殊情况或者缺失的文件。

obs-source.h:这个头文件包含了对源(Source)的定义和声明,包括对源的创建、销毁、配置、显示等操作的声明。通过这个头文件,可以实现对视频和音频源的管理和控制。

obs-encoder.h:这个头文件包含了对编码器(Encoder)的定义和声明,包括对编码器的创建、销毁、配置、编码等操作的声明。通过这个头文件,可以实现对视频和音频的编码和处理。

obs-output.h:这个头文件包含了对输出(Output)的定义和声明,包括对输出的创建、销毁、配置、发送等操作的声明。通过这个头文件,可以实现对输出的管理和控制。

obs-service.h:这个头文件包含了对服务(Service)的定义和声明,包括对服务的创建、销毁、配置、连接等操作的声明。通过这个头文件,可以实现对服务的管理和控制。

obs-audio-controls.h:这个头文件包含了对音频控制的定义和声明,包括对音频的采集、处理、控制等操作的声明。通过这个头文件,可以实现对音频的管理和控制。

obs-hotkey.h:这个头文件包含了对热键(Hotkey)的定义和声明,包括对热键的创建、销毁、绑定等操作的声明。通过这个头文件,可以实现对热键的管理和控制。

结构体

/** 用于改变项目的顺序(例如,源中的滤镜或场景中的项目)的枚举类型 */
enum obs_order_movement {OBS_ORDER_MOVE_UP,        /**< 将项目向上移动 */OBS_ORDER_MOVE_DOWN,      /**< 将项目向下移动 */OBS_ORDER_MOVE_TOP,       /**< 将项目移动到顶部 */OBS_ORDER_MOVE_BOTTOM,    /**< 将项目移动到底部 */
};/*** 与 obs_source_process_filter 一起使用,用于指定滤镜应该直接使用指定效果渲染源,* 还是应该将其渲染到纹理上*/
enum obs_allow_direct_render {OBS_NO_DIRECT_RENDERING,   /**< 不允许直接渲染 */OBS_ALLOW_DIRECT_RENDERING /**< 允许直接渲染 */
};/** 用于指定缩放类型的枚举类型 */
enum obs_scale_type {OBS_SCALE_DISABLE,    /**< 禁用缩放 */OBS_SCALE_POINT,      /**< 最近邻插值 */OBS_SCALE_BICUBIC,    /**< 双三次插值 */OBS_SCALE_BILINEAR,   /**< 双线性插值 */OBS_SCALE_LANCZOS,    /**< Lanczos 插值 */OBS_SCALE_AREA        /**< 区域插值 */
};/** 用于指定混合方法的枚举类型 */
enum obs_blending_method {OBS_BLEND_METHOD_DEFAULT,   /**< 默认混合方法 */OBS_BLEND_METHOD_SRGB_OFF   /**< 关闭 sRGB */
};/** 用于指定混合类型的枚举类型 */
enum obs_blending_type {OBS_BLEND_NORMAL,     /**< 正常混合 */OBS_BLEND_ADDITIVE,   /**< 加法混合 */OBS_BLEND_SUBTRACT,   /**< 减法混合 */OBS_BLEND_SCREEN,     /**< 屏幕混合 */OBS_BLEND_MULTIPLY,   /**< 乘法混合 */OBS_BLEND_LIGHTEN,    /**< 变亮混合 */OBS_BLEND_DARKEN      /**< 变暗混合 */
};/*** 用于指示场景项使用的边界类型的枚举类型。主要确定图像在这些边界内如何缩放,或者是否使用边界。*/
enum obs_bounds_type {OBS_BOUNDS_NONE,            /**< 没有边界 */OBS_BOUNDS_STRETCH,         /**< 拉伸(忽略基本比例) */OBS_BOUNDS_SCALE_INNER,     /**< 缩放到内部矩形 */OBS_BOUNDS_SCALE_OUTER,     /**< 缩放到外部矩形 */OBS_BOUNDS_SCALE_TO_WIDTH,  /**< 缩放到宽度 */OBS_BOUNDS_SCALE_TO_HEIGHT, /**< 缩放到高度 */OBS_BOUNDS_MAX_ONLY,        /**< 无缩放,仅最大尺寸 */
};/*** 视频转换信息结构体*/
struct obs_transform_info {struct vec2 pos;       /**< 位置 */float rot;             /**< 旋转角度 */struct vec2 scale;     /**< 缩放比例 */uint32_t alignment;    /**< 对齐方式 */enum obs_bounds_type bounds_type;   /**< 边界类型 */uint32_t bounds_alignment;          /**< 边界对齐方式 */struct vec2 bounds;                 /**< 边界尺寸 */
};/*** 视频初始化结构体*/
struct obs_video_info {
#ifndef SWIG/*** 要使用的图形模块(通常为 "libobs-opengl" 或 "libobs-d3d11")*/const char *graphics_module;
#endifuint32_t fps_num;                   /**< 输出帧率的分子 */uint32_t fps_den;                   /**< 输出帧率的分母 */uint32_t base_width;                /**< 基本合成宽度 */uint32_t base_height;               /**< 基本合成高度 */uint32_t output_width;              /**< 输出宽度 */uint32_t output_height;             /**< 输出高度 */enum video_format output_format;    /**< 输出格式 *//** 要使用的视频适配器索引(注意:避免在优化型笔记本电脑上使用) */uint32_t adapter;/** 使用着色器将颜色转换为不同的颜色格式 */bool gpu_conversion;enum video_colorspace colorspace;   /**< YUV 类型(如果是 YUV) */enum video_range_type range;        /**< YUV 范围(如果是 YUV) */enum obs_scale_type scale_type;     /**< 缩放类型 */
};/*** 音频初始化结构体*/
struct obs_audio_info {uint32_t samples_per_sec;   /**< 每秒采样数 */enum speaker_layout speakers;   /**< 扬声器布局 */
};struct obs_audio_info2 {uint32_t samples_per_sec;   /**< 每秒采样数 */enum speaker_layout speakers;   /**< 扬声器布局 */uint32_t max_buffering_ms;   /**< 最大缓冲时间(毫秒) */bool fixed_buffering;   /**< 是否固定缓冲 */
};/*** 通过 filter_audio 回调发送给源滤镜,允许对音频数据进行过滤*/
struct obs_audio_data {uint8_t *data[MAX_AV_PLANES];   /**< 音频数据 */uint32_t frames;   /**< 帧数 */uint64_t timestamp;   /**< 时间戳 */
};/*** 源音频输出结构体。用于 obs_source_output_audio 输出源音频。* 音频会根据需要进行自动重新采样和混音。*/
struct obs_source_audio {const uint8_t *data[MAX_AV_PLANES];   /**< 音频数据 */uint32_t frames;   /**< 帧数 */enum speaker_layout speakers;   /**< 扬声器布局 */enum audio_format format;   /**< 音频格式 */uint32_t samples_per_sec;   /**< 每秒采样数 */uint64_t timestamp;   /**< 时间戳 */
};struct obs_source_cea_708 {const uint8_t *data;   /**< 数据 */uint32_t packets;   /**< 数据包数量 */uint64_t timestamp;   /**< 时间戳 */
};#define OBS_SOURCE_FRAME_LINEAR_ALPHA (1 << 0)   /**< 线性 Alpha 帧 *//*** 用于指定源异步视频输出的结构体。与 obs_source_output_video 一起用于输出异步视频。* 视频根据时间戳进行必要的缓冲以按照时间戳播放。当与音频输出一起使用时,音频将与视频同步播放。** 如果指定了 YUV 格式,它将自动在图形处理器上通过着色器进行上采样和转换为 RGB。** 注意:对于非 YUV 格式,此结构体将始终被视为全范围!* 如果要对非 YUV 视频格式进行部分范围支持,请使用 obs_source_frame2 和 obs_source_output_video2。*/
struct obs_source_frame {uint8_t *data[MAX_AV_PLANES];   /**< 视频数据 */uint32_t linesize[MAX_AV_PLANES];   /**< 每行的大小 */uint32_t width;   /**< 宽度 */uint32_t height;   /**< 高度 */uint64_t timestamp;   /**< 时间戳 */enum video_format format;   /**< 视频格式 */float color_matrix[16];   /**< 颜色矩阵 */bool full_range;   /**< 是否全范围 */uint16_t max_luminance;   /**< 最大亮度 */float color_range_min[3];   /**< 颜色范围的最小值 */float color_range_max[3];   /**< 颜色范围的最大值 */bool flip;   /**< 是否翻转 */uint8_t flags;   /**< 标志位 */uint8_t trc; /**< 视频 TRC(电荷重组时间)的枚举类型 *//* libobs 内部使用 */volatile long refs;   /**< 引用计数 */bool prev_frame;   /**< 上一帧 */
};/*** 源帧结构体,用于 obs_source_output_video2 输出源视频。* 视频根据时间戳进行必要的缓冲以按照时间戳播放。** 注意:对于非 YUV 格式,此结构体将始终被视为全范围!* 如果要对非 YUV 视频格式进行部分范围支持,请使用 obs_source_frame2 和 obs_source_output_video2。*/
struct obs_source_frame2 {uint8_t *data[MAX_AV_PLANES];   /**< 视频数据 */uint32_t linesize[MAX_AV_PLANES];   /**< 每行的大小 */uint32_t width;   /**< 宽度 */uint32_t height;   /**< 高度 */uint64_t timestamp;   /**< 时间戳 */enum video_format format;   /**< 视频格式 */enum video_range_type range;   /**< 视频范围类型 */float color_matrix[16];   /**< 颜色矩阵 */float color_range_min[3];   /**< 颜色范围的最小值 */float color_range_max[3];   /**< 颜色范围的最大值 */bool flip;   /**< 是否翻转 */uint8_t flags;   /**< 标志位 */uint8_t trc; /**< 视频 TRC(电荷重组时间)的枚举类型 */
};/** 获取用于启动 OBS 的 argc/argv。 */
struct obs_cmdline_args {int argc;   /**< 参数数量 */char **argv;   /**< 参数列表 */
};

未完待续

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/654818.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

一个查询IP地理信息和CDN提供商的离线终端工具Nali官方使用指南

Nali 一个查询IP地理信息和CDN提供商的离线终端工具. 功能 支持多种数据库 纯真 IPv4 离线数据库ZX IPv6 离线数据库Geoip2 城市数据库 (可选)IPIP 数据库 (可选)ip2region 数据库 (可选)DB-IP 数据库 (可选)IP2Location DB3 LITE 数据库 (可选)CDN 服务提供商查询支持管道处…

.ui文件相关

目录 ui类生成过程&#xff1a; 提问&#xff1a; 等以后自己熟练了用代码写这些样式内容&#xff0c;尽量用代码写&#xff0c;原因很简单&#xff1a; 用代码写的可以直接修改代码&#xff0c;但是在设计界面修改的东西&#xff0c;电脑没有QC这玩意&#xff0c;还真不好改…

Gitlab7.14 中文版安装教程

Gitlab7.14 中文版安装教程 注&#xff1a; 本教程由羞涩梦整理同步发布&#xff0c;本人技术分享站点&#xff1a;blog.hukanfa.com转发本文请备注原文链接&#xff0c;本文内容整理日期&#xff1a;2024-01-28csdn 博客名称&#xff1a;五维空间-影子&#xff0c;欢迎关注 …

JWT(JSON Web Token)详解以及在go-zero中配置的方法

目的 对用户进行身份认证和信息交换 RFC 7519 传统方式 通过session保存对话信息&#xff0c;服务端返回一个session id&#xff0c;用户保存这个id在cookie内&#xff0c;然后每次请求都传给服务端 局限性 对于服务器集群难以向每个服务器共享同一session jwt的方式是…

【vue】vue.config.js里面获取本机ip:

文章目录 一、效果&#xff1a;二、实现&#xff1a; 一、效果&#xff1a; 二、实现&#xff1a; const os require(os);function getLocalIpAddress() {const interfaces os.networkInterfaces();for (let key in interfaces) {const iface interfaces[key];for (let i …

第九节HarmonyOS 常用基础组件16-Blank

1、描述 空白填充组件&#xff0c;在容器主轴方向上&#xff0c;空白填充组件具有自动填充容器空余部分的能力。仅当父组件为Row/Column/Flex时生效。 2、接口 Blank(min?: number | string) 3、参数 参数名 参数类型 必填 描述 min number|string 否 空白填充组件…

牛客周赛 Round 30(A~E)

A A题签到题直接输出0和2即可 #include <bits/stdc.h> #define rep(i,a,b) for(int i (a); i < (b); i) #define fep(i,a,b) for(int i (a); i > (b); --i) #define ls p<<1 #define rs p<<1|1 #define PII pair<int, int> #define ll long …

写静态页面——前端总结

0、怎么写一个前端页面: HTML是超文本标记语言,它用来写前端的内容和框架,CSS是层叠样式表,它用来给前端写样式,让内容变漂亮。1、要写前端页面需要用VScode代码编辑器: VScode当中可以下载汉化插件、快捷键插件(eclipse)浏览器用于解析html/css/js代码,浏览器是从上往…

数据分析入门指南:用 Python 开启数据之旅

文章目录 前言发现宝藏为什么选择 Python 进行数据分析&#xff1f;准备工作数据分析基础1. 数据加载2. 数据探索3. 数据清洗4. 数据可视化 探索更多可能性好书推荐总结 前言 为了巩固所学的知识&#xff0c;作者尝试着开始发布一些学习笔记类的博客&#xff0c;方便日后回顾。…

成都直播产业园核心优势全面解读,入驻天府锋巢直播产业基地都有哪些好处?

一文讲清&#xff01;成都直播产业园核心优势全面解读 企业入驻天府锋巢直播产业基地能获得哪些好处&#xff1f; 锋巢资讯&#xff5e;又来了&#xff5e;&#xff5e;&#xff5e; 今天&#xff0c;将为您全面解读成都产业园重点特色产业服务&#xff08;上&#xff09; 什…

Android 13以上版本读写SD卡权限适配

如题&#xff0c;最近工作上处理的问题&#xff0c;把解决方案简单逻列出来&#xff0c;供有需要的朋友参考之 解决方案&#xff1a; 1、配置权限 <uses-permission android:name"android.permission.READ_MEDIA_IMAGES" /><uses-permission android:name&q…

C++从零开始的打怪升级之路(day25)

这是关于一个普通双非本科大一学生的C的学习记录贴 在此前&#xff0c;我学了一点点C语言还有简单的数据结构&#xff0c;如果有小伙伴想和我一起学习的&#xff0c;可以私信我交流分享学习资料 那么开启正题 今天分享的是关于vector的题目 1.两数之和 1. 两数之和 给定一…

(自用)learnOpenGL学习总结-高级OpenGL-立方体贴图

ok终于来到了立方体贴图了&#xff0c;在这里面我们可以加入好看的天空包围盒&#xff0c;这样的画我们的背景就不再是黑色的了&#xff01; 首先&#xff0c;立方体贴图和前面的sampler2D贴图一样&#xff0c;不过是6个2D组成的立方体而已。 那么为什么要把6个组合在一起呢&…

树莓派部署Nginx服务结合内网穿透实现远程访问本地站点

文章目录 1. Nginx安装2. 安装cpolar3.配置域名访问Nginx4. 固定域名访问5. 配置静态站点 安装 Nginx&#xff08;发音为“engine-x”&#xff09;可以将您的树莓派变成一个强大的 Web 服务器&#xff0c;可以用于托管网站或 Web 应用程序。相比其他 Web 服务器&#xff0c;Ngi…

怎样用流程自定义表单提升办公效率?

如果想要提升办公协作效率&#xff0c;可以试试低代码技术平台及流程自定义表单工具。不可否认的是&#xff0c;随着社会的进步和发展&#xff0c;传统的表单制作工具已经没有办法再满足业务量不断上涨的办公需求了&#xff0c;但是&#xff0c;借助专业的流程自定义表单工具就…

AES 加解密python实现

1. 要求 编程实现AES-128的加解密算法&#xff0c;满足给定明文和密钥加密得到密文&#xff0c;给定密文和密钥解密得到明文&#xff0c;最终用界面化的形式呈现。 2. 算法流程 程序主要分为加密与解密两个大模块。在加密模块中包括四个小模块&#xff0c;分别为轮密钥加、字…

Android 系统启动流程

依旧是带着问题再去学习 首先&#xff0c;Android是怎么启动的&#xff1f; Android服务是怎么启动的&#xff1f; Android线程是怎么切换的&#xff1f; Android ApplicationThread是怎么创建的&#xff1f; 那么接下来开始分析Android的启动流程 还是一步一图 先画一张流…

vp9协议梳理-header头文件

vp9协议梳理-header头文件 本文是对vp9视频码流中header中包含的语法元素的一个分类整理&#xff0c;及其对具体的解码过程的影响的分析。 这里写目录标题 vp9协议梳理-header头文件1. Vp9码流中的header头文件2. profile3. show_existing_frame, frame_to_show_map_idx4. fr…

What is Rust? Why Rust?

why Rust&#xff1f; 目前&#xff0c;Rust 变得越来越流行。然而&#xff0c;仍然有很多人&#xff08;和公司&#xff01;&#xff09;误解了 Rust 的主张价值是什么&#xff0c;甚至误解了它是什么。在本文中&#xff0c;我们将讨论 Rust 是什么以及为什么它是一种可以增强…

面试 CSS 框架八股文十问十答第一期

面试 CSS 框架八股文十问十答第一期 作者&#xff1a;程序员小白条&#xff0c;个人博客 相信看了本文后&#xff0c;对你的面试是有一定帮助的&#xff01;关注专栏后就能收到持续更新&#xff01; ⭐点赞⭐收藏⭐不迷路&#xff01;⭐ 1&#xff09;CSS选择器及其优先级 C…