当前位置: 首页 > news >正文

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;   /**< 参数列表 */
};

未完待续

相关文章:

obs-studio 源码学习 obs.h

obs.h 引用头文件介绍 c99defs.h&#xff1a;这个头文件提供了一些 C99 标准的定义和声明&#xff0c;包括一些常用的宏定义和类型定义&#xff0c;用于提高代码的可移植性和兼容性。 bmem.h&#xff1a;这个头文件提供了对内存分配和管理的功能&#xff0c;包括一些内存分配…...

C语言-指针的基本知识(上)

一、关于内存 存储器&#xff1a;存储数据器件 外存 外存又叫外部存储器&#xff0c;长期存放数据&#xff0c;掉电不丢失数据 常见的外存设备&#xff1a;硬盘、flash、rom、u盘、光盘、磁带 内存 内存又叫内部存储器&#xff0c;暂时存放数据&#xff0c;掉电数据…...

4核16G幻兽帕鲁服务器优惠价格表,阿里云和腾讯云报价

幻兽帕鲁服务器价格多少钱&#xff1f;4核16G服务器Palworld官方推荐配置&#xff0c;阿里云4核16G服务器32元1个月、96元3个月&#xff0c;腾讯云幻兽帕鲁服务器服务器4核16G14M带宽66元一个月、277元3个月&#xff0c;8核32G22M配置115元1个月、345元3个月&#xff0c;16核64…...

GitHub 上传文件夹到远程仓库、再次上传修改文件、如何使用lfs上传大文件、github报错一些问题

按照大家的做法&#xff0c;把自己遇到的问题及解决方案写出来&#xff08;注意&#xff1a;Error里面有些方法有时候我用可以成功&#xff0c;有时候我用也不能成功&#xff0c;写出来仅供参考&#xff0c;实在不行重头再clone&#xff0c;add&#xff0c;commit&#xff0c;p…...

一些es的基本操作

目录 给索引增加字段&#xff1a;给索引删除字段[^1]&#xff1a;创建索引&#xff1a;插入document删除document(应该是按ID) : 给索引增加字段&#xff1a; 用postMan: 给名为population_portrait_hash_seven的索引增加了一个text类型的字段。 用chrome插件Elasticvue 的Re…...

酒鬼酒2024年展望:稳发展动能,迈入恢复性增长轨道

文 | 琥珀酒研社 作者 | 渡过 最近几个月来&#xff0c;白酒估值回落到近十年来低位&#xff0c;反映出了整个白酒行业的市场低迷和虚弱现状。不管是头部企业五粮液、泸州老窖&#xff0c;还是区域酒企口子窖、金种子酒等&#xff0c;最近都通过“回购”或“增持”&#xff0…...

1002. HarmonyOS 开发问题:鸿蒙 OS 技术特性是什么?

1002. HarmonyOS 开发问题&#xff1a;鸿蒙 OS 技术特性是什么? 硬件互助&#xff0c;资源共享 分布式软总线 分布式软总线是多种终端设备的统一基座&#xff0c;为设备之间的互联互通提供了统一的分布式通信能力&#xff0c;能够快速发现并连接设备&#xff0c;高效地分发…...

vue-cli 无法安装问题解决

在macOS上安装vue-cli&#xff0c;但一直都失败&#xff0c;最后终于解决。 先后报错了2个问题。 报错无法安装 其实原因是源被切断&#xff0c;默认的源是官方的&#xff0c;但在CN是无法正常访问&#xff0c;各种问题。直接将源修改才可以。但可能需要试多次。 npm config…...

spring-bus消息总线的使用

文章目录 依赖bus应用接口用到的封装参数类 接收的应用监听器定义的事件类 使用bus定义bus远程调用A应用数据更新后通过bus数据同步给B应用 依赖 <dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-bus-amqp…...

isctf---re

crackme 解压得到crackme.exe 运行得到flag babyRe 先猜e65537的rsa 先用Z3强行求出p、q&#xff0c;算出常规rsa中的phi&#xff0c;然后套用公式求出m exp #babyre wp from z3 import * import libnum from Crypto.Util.number import * p,q,cInts(p q c) S Solver() S…...

C语言第十二弹--扫雷

✨个人主页&#xff1a; 熬夜学编程的小林 &#x1f497;系列专栏&#xff1a; 【C语言详解】 【数据结构详解】 扫雷 1、扫雷游戏分析和设计 1.1、扫雷游戏的功能说明 1.2 游戏的分析和设计 1.2.1、数据结构的分析 1.2.2、文件结构设计 2、扫雷游戏的结构分析 2.1、用…...

网路服务器——线程池技术

文章目录 一、线程池技术二、使用原理三、优点总结 一、线程池技术 预创建原则&#xff0c;线程池内部准备线程备用&#xff0c; 不宜过多。线程应该重用性&#xff0c;可以一对多处理任务或服务不同的客户端。处理单元(线程)数量并不固定&#xff0c;动态扩容与缩减(任务量)。…...

探索设计模式的魅力:深入了解适配器模式-优雅地解决接口不匹配问题

设计模式专栏&#xff1a;http://t.csdnimg.cn/nolNS 目录 一、引言 1. 概述 2. 为什么需要适配器模式 3. 本文的目的和结构 二、简价 1. 适配器模式的定义和特点 定义 特点 2. 适配器模式的作用和适用场景 作用 适用场景 3. 适配器模式与其他设计模式的比较 三、适配…...

matlab窗函数-hann窗和hamming窗函数

窗函数的作用 在时域上&#xff0c;窗函数可以看作是对原始信号进行截断或调制的加权函数。这些窗函数通常在时域上是有限的宽度&#xff0c;并且具有对称性&#xff0c;如矩形窗、汉宁窗、汉明窗和布莱克曼窗等。例如&#xff0c;汉明窗是一种对称窗函数&#xff0c;它可以用…...

Java项目实战--瑞吉外卖DAY03

目录 P22新增员工_编写全局异常处理器 P23新增员工_完善全局异常处理器并测试 p24新增员工_小结 P27员工分页查询_代码开发1 P28员工分页查询_代码开发2 P22新增员工_编写全局异常处理器 在COMMON新增全局异常捕获的类&#xff0c;其实就是代理我们这些controlle。通过aop把…...

docker 里使用vcs 2018 verdi等eda 图形界面

书接上文。之前借用别人的docker&#xff0c;使用EDA工具&#xff0c;苦于没有图形界面。如果只是编码&#xff0c;编译可能问题不大&#xff0c;但是如果要看波形之类的&#xff0c;就没法实现了。 docker 使用 vcs/2018 Verdi等 eda 软件-CSDN博客https://blog.csdn.net/guy…...

OpenHarmony—不支持解构赋值

规则&#xff1a;arkts-no-destruct-assignment 级别&#xff1a;错误 ArkTS不支持解构赋值。可使用其他替代方法&#xff0c;例如&#xff0c;使用临时变量。 TypeScript let [one, two] [1, 2]; // 此处需要分号 [one, two] [two, one];let head, tail [head, ...tail]…...

让AI帮你说话--GPT-SoVITS教程

有时候我们在录制视频的时候&#xff0c;由于周边环境嘈杂或者录音设备问题需要后期配音&#xff0c;这样就比较麻烦。一个比较直观的想法就是能不能将写好的视频脚本直接转换成我们的声音&#xff0c;让AI帮我们完成配音呢&#xff1f;在语音合成领域已经有很多这类工作了&…...

线性回归需要满足的几个假设

线性回归模型是基于一些假设构建的&#xff0c;这些假设有助于确保模型的有效性和可解释性。以下是线性回归需要满足的几个主要假设&#xff1a; 线性关系假设&#xff08;Linearity&#xff09;: 线性回归假设因变量&#xff08;目标变量&#xff09;与自变量&#xff08;特征…...

go语言(十八)---- goroutine

一、goroutine package mainimport ("fmt""time" )func main() {//用go创建承载一个形参为空&#xff0c;返回值为空的一个函数go func() {defer fmt.Println("A.defer")func() {defer fmt.Println("B.defer")//退出当前goroutinefmt…...

Linux应用开发之网络套接字编程(实例篇)

服务端与客户端单连接 服务端代码 #include <sys/socket.h> #include <sys/types.h> #include <netinet/in.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <arpa/inet.h> #include <pthread.h> …...

内存分配函数malloc kmalloc vmalloc

内存分配函数malloc kmalloc vmalloc malloc实现步骤: 1)请求大小调整:首先,malloc 需要调整用户请求的大小,以适应内部数据结构(例如,可能需要存储额外的元数据)。通常,这包括对齐调整,确保分配的内存地址满足特定硬件要求(如对齐到8字节或16字节边界)。 2)空闲…...

PHP和Node.js哪个更爽?

先说结论&#xff0c;rust完胜。 php&#xff1a;laravel&#xff0c;swoole&#xff0c;webman&#xff0c;最开始在苏宁的时候写了几年php&#xff0c;当时觉得php真的是世界上最好的语言&#xff0c;因为当初活在舒适圈里&#xff0c;不愿意跳出来&#xff0c;就好比当初活在…...

大数据零基础学习day1之环境准备和大数据初步理解

学习大数据会使用到多台Linux服务器。 一、环境准备 1、VMware 基于VMware构建Linux虚拟机 是大数据从业者或者IT从业者的必备技能之一也是成本低廉的方案 所以VMware虚拟机方案是必须要学习的。 &#xff08;1&#xff09;设置网关 打开VMware虚拟机&#xff0c;点击编辑…...

C# SqlSugar:依赖注入与仓储模式实践

C# SqlSugar&#xff1a;依赖注入与仓储模式实践 在 C# 的应用开发中&#xff0c;数据库操作是必不可少的环节。为了让数据访问层更加简洁、高效且易于维护&#xff0c;许多开发者会选择成熟的 ORM&#xff08;对象关系映射&#xff09;框架&#xff0c;SqlSugar 就是其中备受…...

云原生安全实战:API网关Kong的鉴权与限流详解

&#x1f525;「炎码工坊」技术弹药已装填&#xff01; 点击关注 → 解锁工业级干货【工具实测|项目避坑|源码燃烧指南】 一、基础概念 1. API网关&#xff08;API Gateway&#xff09; API网关是微服务架构中的核心组件&#xff0c;负责统一管理所有API的流量入口。它像一座…...

基于IDIG-GAN的小样本电机轴承故障诊断

目录 🔍 核心问题 一、IDIG-GAN模型原理 1. 整体架构 2. 核心创新点 (1) ​梯度归一化(Gradient Normalization)​​ (2) ​判别器梯度间隙正则化(Discriminator Gradient Gap Regularization)​​ (3) ​自注意力机制(Self-Attention)​​ 3. 完整损失函数 二…...

Python+ZeroMQ实战:智能车辆状态监控与模拟模式自动切换

目录 关键点 技术实现1 技术实现2 摘要&#xff1a; 本文将介绍如何利用Python和ZeroMQ消息队列构建一个智能车辆状态监控系统。系统能够根据时间策略自动切换驾驶模式&#xff08;自动驾驶、人工驾驶、远程驾驶、主动安全&#xff09;&#xff0c;并通过实时消息推送更新车…...

群晖NAS如何在虚拟机创建飞牛NAS

套件中心下载安装Virtual Machine Manager 创建虚拟机 配置虚拟机 飞牛官网下载 https://iso.liveupdate.fnnas.com/x86_64/trim/fnos-0.9.2-863.iso 群晖NAS如何在虚拟机创建飞牛NAS - 个人信息分享...

Python 实现 Web 静态服务器(HTTP 协议)

目录 一、在本地启动 HTTP 服务器1. Windows 下安装 node.js1&#xff09;下载安装包2&#xff09;配置环境变量3&#xff09;安装镜像4&#xff09;node.js 的常用命令 2. 安装 http-server 服务3. 使用 http-server 开启服务1&#xff09;使用 http-server2&#xff09;详解 …...