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;
#endif

	uint32_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 context */

/**
 * 查找核心 libobs 数据文件
 * @param path 基本文件名
 * @return 包含文件完整路径的字符串。
 *          使用后请使用 bfree。
 */
EXPORT char *obs_find_data_file(const char *file);

/**
 * 添加一个路径以在 libobs 数据文件中搜索。
 * @param path 要查找的目录的完整路径。
 *             字符串将被复制。
 */
EXPORT void obs_add_data_path(const char *path);

/**
 * 从 libobs 核心数据路径中删除路径。
 * @param path 与当前设置的路径进行比较的路径。
 *             它不需要是相同的指针,但是
 *             路径字符串必须完全匹配。
 * @return 是否成功删除路径。
 *         如果为 false,则找不到该路径。
 */
EXPORT bool obs_remove_data_path(const char *path);

/**
 * 初始化 OBS
 *
 * @param  locale              用于模块的语言环境
 * @param  module_config_path  模块配置存储目录的路径
 *                             (如果没有则为 NULL)
 * @param  store               OBS 要使用的分析器名称存储,或为 NULL
 */
EXPORT bool obs_startup(const char *locale, const char *module_config_path,
			profiler_name_store_t *store);

/** 释放与 OBS 关联的所有数据并终止 OBS 上下文 */
EXPORT void obs_shutdown(void);

/** @return 主 OBS 上下文是否已初始化 */
EXPORT bool obs_initialized(void);

/** @return 当前核心版本 */
EXPORT uint32_t obs_get_version(void);

/** @return 当前核心版本字符串 */
EXPORT const char *obs_get_version_string(void);

/**
 * 为调用 obs_get_cmdline_args 设置东西。只在启动时调用一次
 * 并安全地从 main() 复制 argv/argc。后续调用不执行任何操作。
 *
 * @param  argc  main() 中的命令行参数计数
 * @param  argv  从 main() 复制的命令行参数数组,以 NULL 结尾。
 */
EXPORT void obs_set_cmdline_args(int argc, const char *const *argv);

/**
 * 获取用于启动 OBS 的 argc/argv
 *
 * @return 用于 main() 的命令行参数。不要修改这个,否则会影响其他调用者。
 */
EXPORT struct obs_cmdline_args obs_get_cmdline_args(void);

/**
 * 设置模块的新语言环境。这将为每个模块调用 obs_module_set_locale。
 *
 * @param  locale  用于模块的语言环境
 */
EXPORT void obs_set_locale(const char *locale);

/** @return 当前语言环境 */
EXPORT const char *obs_get_locale(void);

/** 初始化 Windows 特定的崩溃处理程序 */
#ifdef _WIN32
EXPORT void obs_init_win32_crash_handler(void);
#endif

/**
 * 返回 OBS 使用的分析器名称存储(见 util/profiler.h),
 * 它可以是传递给 obs_startup 的名称存储、内部名称存储,或者在 obs_initialized() 返回 false 时为 NULL。
 */
EXPORT profiler_name_store_t *obs_get_profiler_name_store(void);

/**
 * 设置基本视频输出基本分辨率/fps/格式。
 *
 * @note 如果当前有输出活动,则无法更改此数据。
 * @note 无法更改图形模块,而不完全销毁 OBS 上下文。
 *
 * @param   ovi  包含图形子系统规范的 obs_video_info 结构的指针,
 * @return       如果成功返回 OBS_VIDEO_SUCCESS
 *               如果适配器缺乏功能,则返回 OBS_VIDEO_NOT_SUPPORTED
 *               如果参数无效,则返回 OBS_VIDEO_INVALID_PARAM
 *               如果当前视频活动,则返回 OBS_VIDEO_CURRENTLY_ACTIVE
 *               如果找不到图形模块,则返回 OBS_VIDEO_MODULE_NOT_FOUND
 *               对于一般失败返回 OBS_VIDEO_FAIL
 */
EXPORT int obs_reset_video(struct obs_video_info *ovi);

/**
 * 设置基本音频输出格式/声道/样本等
 *
 * @note 如果当前有输出活动,则无法重置基本音频。
 */
EXPORT bool obs_reset_audio(const struct obs_audio_info *oai);
EXPORT bool obs_reset_audio2(const struct obs_audio_info2 *oai);

/** 获取当前视频设置,如果没有视频则返回 false */
EXPORT bool obs_get_video_info(struct obs_video_info *ovi);

/** 获取 SDR 白平衡,如果没有视频则返回 300.f */
EXPORT float obs_get_video_sdr_white_level(void);

/** 获取 HDR 标称峰值水平,如果没有视频则返回 1000.f */
EXPORT float obs_get_video_hdr_nominal_peak_level(void);

/** 设置视频级别 */
EXPORT void obs_set_video_levels(float sdr_white_level,
				 float hdr_nominal_peak_level);

/** 获取当前音频设置,如果没有音频则返回 false */
EXPORT bool obs_get_audio_info(struct obs_audio_info *oai);

/**
 * 直接从特定路径打开一个插件模块。
 *
 * 如果模块已经存在,则函数将返回成功,并且
 * 模块参数将获得指向现有模块的指针。
 *
 * 这不会初始化模块,它只加载模块映像。要
 * 初始化模块,调用 obs_init_module。
 *
 * @param  module     指向已创建模块的指针。
 * @param  path       指定模块库文件的路径。如果
 *                    没有指定扩展名,则将使用适用于操作系统的扩展名。
 * @param  data_path  指定模块数据文件存储的目录的路径。
 * @returns           如果成功则返回 MODULE_SUCCESS
 *                    如果发生一般错误则返回 MODULE_ERROR
 *                    如果找不到模块则返回 MODULE_FILE_NOT_FOUND
 *                    如果缺少必需的导出则返回 MODULE_MISSING_EXPORTS
 *                    如果版本不兼容则返回 MODULE_INCOMPATIBLE_VER
 */
EXPORT int obs_open_module(obs_module_t **module, const char *path,
			   const char *data_path);

/**
 * 初始化模块,调用其 obs_module_load 导出。如果
 * 模块已经加载,则此函数不执行任何操作并返回成功。
 */
EXPORT bool obs_init_module(obs_module_t *module);

/** 根据名称返回模块,如果找不到则返回 NULL */
EXPORT obs_module_t *obs_get_module(const char *name);

/** 获取模块的库 */
EXPORT void *obs_get_module_lib(obs_module_t *module);

/** 从特定模块获取本地化文本 */
EXPORT bool obs_module_get_locale_string(const obs_module_t *mod,
					 const char *lookup_string,
					 const char **translated_string);

EXPORT const char *obs_module_get_locale_text(const obs_module_t *mod,
					      const char *text);

/** 记录已加载的模块 */
EXPORT void obs_log_loaded_modules(void);

/** 返回模块文件名 */
EXPORT const char *obs_get_module_file_name(obs_module_t *module);

/** 返回模块的完整名称 */
EXPORT const char *obs_get_module_name(obs_module_t *module);

/** 返回模块的作者 */
EXPORT const char *obs_get_module_author(obs_module_t *module);

/** 返回模块的描述 */
EXPORT const char *obs_get_module_description(obs_module_t *module);

/** 返回模块的二进制路径 */
EXPORT const char *obs_get_module_binary_path(obs_module_t *module);

/** 返回模块的数据路径 */
EXPORT const char *obs_get_module_data_path(obs_module_t *module);

#ifndef SWIG
/**
 * 添加用于 obs_find_modules 的模块搜索路径。如果搜索
 * 路径字符串包含 %module%,则在使用时将该文本替换为模块
 * 名称。
 *
 * @param  bin   指定模块的二进制目录搜索路径。
 * @param  data  指定模块数据目录搜索路径。
 */
EXPORT void obs_add_module_path(const char *bin, const char *data);

/**
 * 将模块添加到允许在安全模式下加载的模块列表中。
 * 如果列表为空,则允许加载所有模块。
 *
 * @param  name  指定模块的名称(不带扩展名的文件名)。
 */
EXPORT void obs_add_safe_module(const char *name);

/** 自动从模块路径加载所有模块(便利函数) */
EXPORT void obs_load_all_modules(void);

struct obs_module_failure_info {
	char **failed_modules;
	size_t count;
};

/**
 * 释放模块加载失败信息的内存
 *
 * @param mfi 指向模块失败信息结构体的指针
 */
EXPORT void obs_module_failure_info_free(struct obs_module_failure_info *mfi);

/**
 * 加载所有模块
 *
 * @param mfi 指向模块失败信息结构体的指针
 */
EXPORT void obs_load_all_modules2(struct obs_module_failure_info *mfi);

/**
 * 通知所有模块已加载完毕。应在所有模块加载完成后调用。
 */
EXPORT void obs_post_load_modules(void);

/**
 * 模块信息结构体
 */
struct obs_module_info {
    const char *bin_path; // 模块的二进制路径
    const char *data_path; // 模块的数据路径
};

/**
 * 模块查找回调函数类型
 */
typedef void (*obs_find_module_callback_t)(void *param,
                                           const struct obs_module_info *info);

/**
 * 在搜索路径中查找模块
 *
 * @param callback 回调函数,用于在找到模块时调用
 * @param param    传递给回调函数的参数
 */
EXPORT void obs_find_modules(obs_find_module_callback_t callback, void *param);

/**
 * 更详细的模块信息结构体,包含模块的二进制路径、数据路径和名称
 */
struct obs_module_info2 {
    const char *bin_path; // 模块的二进制路径
    const char *data_path; // 模块的数据路径
    const char *name; // 模块名称
};

/**
 * 更详细的模块查找回调函数类型
 */
typedef void (*obs_find_module_callback2_t)(
    void *param, const struct obs_module_info2 *info);

/**
 * 在搜索路径中查找模块
 *
 * @param callback 回调函数,用于在找到模块时调用
 * @param param    传递给回调函数的参数
 */
EXPORT void obs_find_modules2(obs_find_module_callback2_t callback,
                              void *param);

/**
 * 模块枚举回调函数类型
 */
typedef void (*obs_enum_module_callback_t)(void *param, obs_module_t *module);

/**
 * 枚举所有加载的模块
 *
 * @param callback 回调函数,用于枚举每个加载的模块
 * @param param    传递给回调函数的参数
 */
EXPORT void obs_enum_modules(obs_enum_module_callback_t callback, void *param);

/**
 * 使用默认模块语言环境的辅助函数
 *
 * @param module OBS 模块指针
 * @param default_locale 默认语言环境
 * @param locale 语言环境
 * @return lookup_t 结构体指针
 */
EXPORT lookup_t *obs_module_load_locale(obs_module_t *module,
					const char *default_locale,
					const char *locale);

/**
 * 返回插件模块数据文件的位置
 *
 * @note 模块应使用 obs_module_file 函数(在 obs-module.h 中定义)作为更加优雅的方式获取它们的文件,而无需指定模块参数。
 *
 * @param module 要定位文件的模块
 * @param file 要定位的文件
 * @return 路径字符串,如果找不到则为 NULL。使用 bfree 释放字符串。
 */
EXPORT char *obs_find_module_file(obs_module_t *module, const char *file);

/**
 * 返回插件模块配置文件的路径(无论是否存在)
 *
 * @note 模块应使用 obs_module_config_path 函数(在 obs-module.h 中定义)作为更加优雅的方式获取它们的文件,而无需指定模块参数。
 *
 * @param module 与路径关联的模块
 * @param file 要获取路径的文件
 * @return 路径字符串,如果找不到则为 NULL。使用 bfree 释放字符串。
 */
EXPORT char *obs_module_get_config_path(obs_module_t *module, const char *file);

/** 枚举所有源类型(输入、滤镜、转场等) */
EXPORT bool obs_enum_source_types(size_t idx, const char **id);

/**
 * 枚举所有可用的输入源类型
 *
 * 输入是通用的源输入(例如捕获源、设备源等)。
 */
EXPORT bool obs_enum_input_types(size_t idx, const char **id);
EXPORT bool obs_enum_input_types2(size_t idx, const char **id,
				  const char **unversioned_id);

EXPORT const char *obs_get_latest_input_type_id(const char *unversioned_id);

/**
 * 枚举所有可用的滤镜源类型
 *
 * 滤镜是用于修改其他源的视频/音频输出的源。
 */
EXPORT bool obs_enum_filter_types(size_t idx, const char **id);

/**
 * 枚举所有可用的转场源类型
 *
 * 转场是用于在两个或多个其他源之间进行转换的源。
 */
EXPORT bool obs_enum_transition_types(size_t idx, const char **id);

/** 枚举所有可用的输出类型 */
EXPORT bool obs_enum_output_types(size_t idx, const char **id);

/** 枚举所有可用的编码器类型 */
EXPORT bool obs_enum_encoder_types(size_t idx, const char **id);

/** 枚举所有可用的服务类型 */
EXPORT bool obs_enum_service_types(size_t idx, const char **id);

/** 进入 OBS 图形上下文的辅助函数 */
EXPORT void obs_enter_graphics(void);

/** 离开 OBS 图形上下文的辅助函数 */
EXPORT void obs_leave_graphics(void);

/** 获取此 OBS 上下文的主要音频输出处理程序 */
EXPORT audio_t *obs_get_audio(void);

/** 获取此 OBS 上下文的主要视频输出处理程序 */
EXPORT video_t *obs_get_video(void);

/** 如果视频处于活动状态则返回 true,否则返回 false */
EXPORT bool obs_video_active(void);

/** 为通道设置主要输出源 */
EXPORT void obs_set_output_source(uint32_t channel, obs_source_t *source);

/**
 * 获取通道的主要输出源,并增加该源的引用计数。使用 obs_source_release 释放。
 */
EXPORT obs_source_t *obs_get_output_source(uint32_t channel);

/**
 * 枚举所有输入源
 *
 * 回调函数返回 true 以继续枚举,或者返回 false 以结束枚举。
 *
 * 如果您希望在 obs_enum_sources 完成后保留引用,请使用 obs_source_get_ref 或 obs_source_get_weak_source。
 */
EXPORT void obs_enum_sources(bool (*enum_proc)(void *, obs_source_t *),
			     void *param);

/** 枚举场景 */
EXPORT void obs_enum_scenes(bool (*enum_proc)(void *, obs_source_t *),
			    void *param);

/** 枚举所有源(不考虑类型) */
EXPORT void obs_enum_all_sources(bool (*enum_proc)(void *, obs_source_t *),
				 void *param);

/** 枚举输出 */
EXPORT void obs_enum_outputs(bool (*enum_proc)(void *, obs_output_t *),
			     void *param);

/** 枚举编码器 */
EXPORT void obs_enum_encoders(bool (*enum_proc)(void *, obs_encoder_t *),
			      void *param);

/** 枚举服务 */
EXPORT void obs_enum_services(bool (*enum_proc)(void *, obs_service_t *),
			      void *param);

/**
 * 根据名称获取源
 *
 * 增加源的引用计数,使用 obs_source_release 释放。
 */
EXPORT obs_source_t *obs_get_source_by_name(const char *name);

/**
 * 根据 UUID 获取源
 *
 * 增加源的引用计数,使用 obs_source_release 释放。
 */
EXPORT obs_source_t *obs_get_source_by_uuid(const char *uuid);

/** 根据名称获取转场源 */
EXPORT obs_source_t *obs_get_transition_by_name(const char *name);

/** 根据 UUID 获取转场源 */
EXPORT obs_source_t *obs_get_transition_by_uuid(const char *uuid);

/** 根据名称获取输出 */
EXPORT obs_output_t *obs_get_output_by_name(const char *name);

/** 根据名称获取编码器 */
EXPORT obs_encoder_t *obs_get_encoder_by_name(const char *name);

/** 根据名称获取服务 */
EXPORT obs_service_t *obs_get_service_by_name(const char *name);

/** 常用基础效果 */
enum obs_base_effect {
	OBS_EFFECT_DEFAULT,         /**< RGB/YUV */
	OBS_EFFECT_DEFAULT_RECT,    /**< RGB/YUV(使用 texture_rect) */
	OBS_EFFECT_OPAQUE,          /**< RGB/YUV(alpha 设置为 1.0) */
	OBS_EFFECT_SOLID,           /**< RGB/YUV(仅固体颜色) */
	OBS_EFFECT_BICUBIC,         /**< 双三次下采样 */
	OBS_EFFECT_LANCZOS,         /**< Lanczos 下采样 */
	OBS_EFFECT_BILINEAR_LOWRES, /**< 双线性低分辨率下采样 */
	OBS_EFFECT_PREMULTIPLIED_ALPHA, /**< 预乘 alpha */
	OBS_EFFECT_REPEAT,              /**< RGB/YUV(重复) */
	OBS_EFFECT_AREA,                /**< 区域重新缩放 */
};

/** 获取常用基础效果 */
EXPORT gs_effect_t *obs_get_base_effect(enum obs_base_effect effect);

#ifndef SWIG
/* 不推荐使用:获取 texture_rect 默认效果 */
OBS_DEPRECATED
EXPORT gs_effect_t *obs_get_default_rect_effect(void);
#endif

/** 返回主要的 OBS 信号处理程序 */
EXPORT signal_handler_t *obs_get_signal_handler(void);

/** 返回主要的 OBS 过程处理程序 */
EXPORT proc_handler_t *obs_get_proc_handler(void);

#ifndef SWIG
/** 渲染主视图 */
OBS_DEPRECATED
EXPORT void obs_render_main_view(void);
#endif


  • 19
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值