reference-core.rst 20 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735
  1. OBS Core API Reference
  2. ======================
  3. .. code:: cpp
  4. #include <obs.h>
  5. .. _obs_init_shutdown_reference:
  6. Initialization, Shutdown, and Information
  7. -----------------------------------------
  8. .. function:: bool obs_startup(const char *locale, const char *module_config_path, profiler_name_store_t *store)
  9. Initializes the OBS core context.
  10. :param locale: The locale to use for modules
  11. (E.G. "en-US")
  12. :param module_config_path: Path to module config storage directory
  13. (or *NULL* if none)
  14. :param store: The profiler name store for OBS to use or NULL
  15. :return: *false* if already initialized or failed
  16. to initialize
  17. ---------------------
  18. .. function:: void obs_shutdown(void)
  19. Releases all data associated with OBS and terminates the OBS context.
  20. ---------------------
  21. .. function:: bool obs_initialized(void)
  22. :return: true if the main OBS context has been initialized
  23. ---------------------
  24. .. function:: uint32_t obs_get_version(void)
  25. :return: The current core version
  26. ---------------------
  27. .. function:: const char *obs_get_version_string(void)
  28. :return: The current core version string
  29. ---------------------
  30. .. function:: void obs_set_locale(const char *locale)
  31. Sets a new locale to use for modules. This will call
  32. obs_module_set_locale for each module with the new locale.
  33. :param locale: The locale to use for modules
  34. ---------------------
  35. .. function:: const char *obs_get_locale(void)
  36. :return: The current locale
  37. ---------------------
  38. .. function:: profiler_name_store_t *obs_get_profiler_name_store(void)
  39. :return: The profiler name store (see util/profiler.h) used by OBS,
  40. which is either a name store passed to obs_startup, an
  41. internal name store, or NULL in case obs_initialized()
  42. returns false.
  43. ---------------------
  44. .. function:: int obs_reset_video(struct obs_video_info *ovi)
  45. Sets base video output base resolution/fps/format.
  46. Note: This data cannot be changed if an output is currently active.
  47. Note: The graphics module cannot be changed without fully destroying
  48. the OBS context.
  49. :param ovi: Pointer to an obs_video_info structure containing the
  50. specification of the graphics subsystem,
  51. :return: | OBS_VIDEO_SUCCESS - Success
  52. | OBS_VIDEO_NOT_SUPPORTED - The adapter lacks capabilities
  53. | OBS_VIDEO_INVALID_PARAM - A parameter is invalid
  54. | OBS_VIDEO_CURRENTLY_ACTIVE - Video is currently active
  55. | OBS_VIDEO_MODULE_NOT_FOUND - The graphics module is not found
  56. | OBS_VIDEO_FAIL - Generic failure
  57. Relevant data types used with this function:
  58. .. code:: cpp
  59. struct obs_video_info {
  60. /**
  61. * Graphics module to use (usually "libobs-opengl" or "libobs-d3d11")
  62. */
  63. const char *graphics_module;
  64. uint32_t fps_num; /**< Output FPS numerator */
  65. uint32_t fps_den; /**< Output FPS denominator */
  66. uint32_t base_width; /**< Base compositing width */
  67. uint32_t base_height; /**< Base compositing height */
  68. uint32_t output_width; /**< Output width */
  69. uint32_t output_height; /**< Output height */
  70. enum video_format output_format; /**< Output format */
  71. /** Video adapter index to use (NOTE: avoid for optimus laptops) */
  72. uint32_t adapter;
  73. /** Use shaders to convert to different color formats */
  74. bool gpu_conversion;
  75. enum video_colorspace colorspace; /**< YUV type (if YUV) */
  76. enum video_range_type range; /**< YUV range (if YUV) */
  77. enum obs_scale_type scale_type; /**< How to scale if scaling */
  78. };
  79. ---------------------
  80. .. function:: bool obs_reset_audio(const struct obs_audio_info *oai)
  81. Sets base audio output format/channels/samples/etc.
  82. Note: Cannot reset base audio if an output is currently active.
  83. :return: *true* if successful, *false* otherwise
  84. Relevant data types used with this function:
  85. .. code:: cpp
  86. struct obs_audio_info {
  87. uint32_t samples_per_sec;
  88. enum speaker_layout speakers;
  89. };
  90. ---------------------
  91. .. function:: bool obs_get_video_info(struct obs_video_info *ovi)
  92. Gets the current video settings.
  93. :return: *false* if no video
  94. ---------------------
  95. .. function:: float obs_get_video_sdr_white_level(void)
  96. Gets the current SDR white level.
  97. :return: SDR white level, 300.f if no video
  98. ---------------------
  99. .. function:: float obs_get_video_hdr_nominal_peak_level(void)
  100. Gets the current HDR nominal peak level.
  101. :return: HDR nominal peak level, 1000.f if no video
  102. ---------------------
  103. .. function:: void obs_set_video_sdr_white_level(float sdr_white_level, float hdr_nominal_peak_level)
  104. Sets the current video levels.
  105. ---------------------
  106. .. function:: bool obs_get_audio_info(struct obs_audio_info *oai)
  107. Gets the current audio settings.
  108. :return: *false* if no audio
  109. ---------------------
  110. Libobs Objects
  111. --------------
  112. .. function:: bool obs_enum_source_types(size_t idx, const char **id)
  113. Enumerates all source types (inputs, filters, transitions, etc).
  114. ---------------------
  115. .. function:: bool obs_enum_input_types(size_t idx, const char **id)
  116. Enumerates all available inputs source types.
  117. Inputs are general source inputs (such as capture sources, device sources,
  118. etc).
  119. ---------------------
  120. .. function:: bool obs_enum_filter_types(size_t idx, const char **id)
  121. Enumerates all available filter source types.
  122. Filters are sources that are used to modify the video/audio output of
  123. other sources.
  124. ---------------------
  125. .. function:: bool obs_enum_transition_types(size_t idx, const char **id)
  126. Enumerates all available transition source types.
  127. Transitions are sources used to transition between two or more other
  128. sources.
  129. ---------------------
  130. .. function:: bool obs_enum_output_types(size_t idx, const char **id)
  131. Enumerates all available output types.
  132. ---------------------
  133. .. function:: bool obs_enum_encoder_types(size_t idx, const char **id)
  134. Enumerates all available encoder types.
  135. ---------------------
  136. .. function:: bool obs_enum_service_types(size_t idx, const char **id)
  137. Enumerates all available service types.
  138. ---------------------
  139. .. function:: void obs_enum_sources(bool (*enum_proc)(void*, obs_source_t*), void *param)
  140. Enumerates all input sources.
  141. Callback function returns true to continue enumeration, or false to end
  142. enumeration.
  143. Use :c:func:`obs_source_get_ref()` or
  144. :c:func:`obs_source_get_weak_source()` if you want to retain a
  145. reference after obs_enum_sources finishes.
  146. ---------------------
  147. .. function:: void obs_enum_scenes(bool (*enum_proc)(void*, obs_source_t*), void *param)
  148. Enumerates all scenes.
  149. Callback function returns true to continue enumeration, or false to end
  150. enumeration.
  151. Use :c:func:`obs_source_get_ref()` or
  152. :c:func:`obs_source_get_weak_source()` if you want to retain a
  153. reference after obs_enum_scenes finishes.
  154. ---------------------
  155. .. function:: void obs_enum_outputs(bool (*enum_proc)(void*, obs_output_t*), void *param)
  156. Enumerates outputs.
  157. ---------------------
  158. .. function:: void obs_enum_encoders(bool (*enum_proc)(void*, obs_encoder_t*), void *param)
  159. Enumerates encoders.
  160. ---------------------
  161. .. function:: obs_source_t *obs_get_source_by_name(const char *name)
  162. Gets a source by its name.
  163. Increments the source reference counter, use
  164. :c:func:`obs_source_release()` to release it when complete.
  165. ---------------------
  166. .. function:: obs_source_t *obs_get_transition_by_name(const char *name)
  167. Gets a transition by its name.
  168. Increments the source reference counter, use
  169. :c:func:`obs_source_release()` to release it when complete.
  170. ---------------------
  171. .. function:: obs_scene_t *obs_get_scene_by_name(const char *name)
  172. Gets a scene by its name.
  173. Increments the scene reference counter, use
  174. :c:func:`obs_scene_release()` to release it when complete.
  175. ---------------------
  176. .. function:: obs_output_t *obs_get_output_by_name(const char *name)
  177. Gets an output by its name.
  178. Increments the output reference counter, use
  179. :c:func:`obs_output_release()` to release it when complete.
  180. ---------------------
  181. .. function:: obs_encoder_t *obs_get_encoder_by_name(const char *name)
  182. Gets an encoder by its name.
  183. Increments the encoder reference counter, use
  184. :c:func:`obs_encoder_release()` to release it when complete.
  185. ---------------------
  186. .. function:: obs_service_t *obs_get_service_by_name(const char *name)
  187. Gets an service by its name.
  188. Increments the service reference counter, use
  189. :c:func:`obs_service_release()` to release it when complete.
  190. ---------------------
  191. .. function:: obs_data_t *obs_save_source(obs_source_t *source)
  192. :return: A new reference to a source's saved data
  193. ---------------------
  194. .. function:: obs_source_t *obs_load_source(obs_data_t *data)
  195. :return: A source created from saved data
  196. ---------------------
  197. .. function:: void obs_load_sources(obs_data_array_t *array, obs_load_source_cb cb, void *private_data)
  198. Helper function to load active sources from a data array.
  199. Relevant data types used with this function:
  200. .. code:: cpp
  201. typedef void (*obs_load_source_cb)(void *private_data, obs_source_t *source);
  202. ---------------------
  203. .. function:: obs_data_array_t *obs_save_sources(void)
  204. :return: A data array with the saved data of all active sources
  205. ---------------------
  206. .. function:: obs_data_array_t *obs_save_sources_filtered(obs_save_source_filter_cb cb, void *data)
  207. :return: A data array with the saved data of all active sources,
  208. filtered by the *cb* function
  209. Relevant data types used with this function:
  210. .. code:: cpp
  211. typedef bool (*obs_save_source_filter_cb)(void *data, obs_source_t *source);
  212. ---------------------
  213. Video, Audio, and Graphics
  214. --------------------------
  215. .. function:: void obs_enter_graphics(void)
  216. Helper function for entering the OBS graphics context.
  217. ---------------------
  218. .. function:: void obs_leave_graphics(void)
  219. Helper function for leaving the OBS graphics context.
  220. ---------------------
  221. .. function:: audio_t *obs_get_audio(void)
  222. :return: The main audio output handler for this OBS context
  223. ---------------------
  224. .. function:: video_t *obs_get_video(void)
  225. :return: The main video output handler for this OBS context
  226. ---------------------
  227. .. function:: void obs_set_output_source(uint32_t channel, obs_source_t *source)
  228. Sets the primary output source for a channel.
  229. ---------------------
  230. .. function:: obs_source_t *obs_get_output_source(uint32_t channel)
  231. Gets the primary output source for a channel and increments the reference
  232. counter for that source. Use :c:func:`obs_source_release()` to release.
  233. ---------------------
  234. .. function:: gs_effect_t *obs_get_base_effect(enum obs_base_effect effect)
  235. Returns a commoinly used base effect.
  236. :param effect: | Can be one of the following values:
  237. | OBS_EFFECT_DEFAULT - RGB/YUV
  238. | OBS_EFFECT_DEFAULT_RECT - RGB/YUV (using texture_rect)
  239. | OBS_EFFECT_OPAQUE - RGB/YUV (alpha set to 1.0)
  240. | OBS_EFFECT_SOLID - RGB/YUV (solid color only)
  241. | OBS_EFFECT_BICUBIC - Bicubic downscale
  242. | OBS_EFFECT_LANCZOS - Lanczos downscale
  243. | OBS_EFFECT_BILINEAR_LOWRES - Bilinear low resolution downscale
  244. | OBS_EFFECT_PREMULTIPLIED_ALPHA - Premultiplied alpha
  245. ---------------------
  246. .. function:: void obs_render_main_view(void)
  247. Renders the main view.
  248. Note: This function is deprecated.
  249. ---------------------
  250. .. function:: void obs_render_main_texture(void)
  251. Renders the main output texture. Useful for rendering a preview pane
  252. of the main output.
  253. ---------------------
  254. .. function:: void obs_set_master_volume(float volume)
  255. Sets the master user volume.
  256. ---------------------
  257. .. function:: float obs_get_master_volume(void)
  258. :return: The master user volume
  259. ---------------------
  260. .. function:: bool obs_audio_monitoring_available(void)
  261. :return: Whether audio monitoring is supported and available on the current platform
  262. ---------------------
  263. .. function:: void obs_enum_audio_monitoring_devices(obs_enum_audio_device_cb cb, void *data)
  264. Enumerates audio devices which can be used for audio monitoring.
  265. Relevant data types used with this function:
  266. .. code:: cpp
  267. typedef bool (*obs_enum_audio_device_cb)(void *data, const char *name, const char *id);
  268. ---------------------
  269. .. function:: bool obs_set_audio_monitoring_device(const char *name, const char *id)
  270. Sets the current audio device for audio monitoring.
  271. ---------------------
  272. .. function:: void obs_get_audio_monitoring_device(const char **name, const char **id)
  273. Gets the current audio device for audio monitoring.
  274. ---------------------
  275. .. function:: void obs_add_main_render_callback(void (*draw)(void *param, uint32_t cx, uint32_t cy), void *param)
  276. void obs_remove_main_render_callback(void (*draw)(void *param, uint32_t cx, uint32_t cy), void *param)
  277. Adds/removes a main rendering callback. Allows custom rendering to
  278. the main stream/recording output.
  279. ---------------------
  280. .. function:: void obs_add_raw_video_callback(const struct video_scale_info *conversion, void (*callback)(void *param, struct video_data *frame), void *param)
  281. void obs_remove_raw_video_callback(void (*callback)(void *param, struct video_data *frame), void *param)
  282. Adds/removes a raw video callback. Allows the ability to obtain raw
  283. video frames without necessarily using an output.
  284. :param conversion: Specifies conversion requirements. Can be NULL.
  285. :param callback: The callback that receives raw video frames.
  286. :param param: The private data associated with the callback.
  287. ---------------------
  288. .. function:: void obs_add_raw_audio_callback(size_t mix_idx, const struct audio_convert_info *conversion, audio_output_callback_t callback, void *param)
  289. void obs_remove_raw_raw_callback(size_t track, audio_output_callback_t callback, void *param)
  290. Adds/removes a raw audio callback. Allows the ability to obtain raw
  291. audio data without necessarily using an output.
  292. :param mix_idx: Specifies audio track to get data from.
  293. :param conversion: Specifies conversion requirements. Can be NULL.
  294. :param callback: The callback that receives raw audio data.
  295. :param param: The private data associated with the callback.
  296. Primary signal/procedure handlers
  297. ---------------------------------
  298. .. function:: signal_handler_t *obs_get_signal_handler(void)
  299. :return: The primary obs signal handler
  300. See :ref:`core_signal_handler_reference` for more information on
  301. core signals.
  302. ---------------------
  303. .. function:: proc_handler_t *obs_get_proc_handler(void)
  304. :return: The primary obs procedure handler
  305. .. _core_signal_handler_reference:
  306. Core OBS Signals
  307. ----------------
  308. **source_create** (ptr source)
  309. Called when a source has been created.
  310. **source_destroy** (ptr source)
  311. Called when a source has been destroyed.
  312. **source_remove** (ptr source)
  313. Called when a source has been removed (:c:func:`obs_source_remove()`
  314. has been called on the source).
  315. **source_save** (ptr source)
  316. Called when a source is being saved.
  317. **source_load** (ptr source)
  318. Called when a source is being loaded.
  319. **source_activate** (ptr source)
  320. Called when a source has been activated in the main view (visible on
  321. stream/recording).
  322. **source_deactivate** (ptr source)
  323. Called when a source has been deactivated from the main view (no
  324. longer visible on stream/recording).
  325. **source_show** (ptr source)
  326. Called when a source is visible on any display and/or on the main
  327. view.
  328. **source_hide** (ptr source)
  329. Called when a source is no longer visible on any display and/or on
  330. the main view.
  331. **source_rename** (ptr source, string new_name, string prev_name)
  332. Called when a source has been renamed.
  333. **source_volume** (ptr source, in out float volume)
  334. Called when a source's volume has changed.
  335. **source_transition_start** (ptr source)
  336. Called when a transition has started its transition.
  337. **source_transition_video_stop** (ptr source)
  338. Called when a transition has stopped its video transitioning.
  339. **source_transition_stop** (ptr source)
  340. Called when a transition has stopped its transition.
  341. **channel_change** (int channel, in out ptr source, ptr prev_source)
  342. Called when :c:func:`obs_set_output_source()` has been called.
  343. **master_volume** (in out float volume)
  344. Called when the master volume has changed.
  345. **hotkey_layout_change** ()
  346. Called when the hotkey layout has changed.
  347. **hotkey_register** (ptr hotkey)
  348. Called when a hotkey has been registered.
  349. **hotkey_unregister** (ptr hotkey)
  350. Called when a hotkey has been unregistered.
  351. **hotkey_bindings_changed** (ptr hotkey)
  352. Called when a hotkey's bindings has changed.
  353. ---------------------
  354. .. _display_reference:
  355. Displays
  356. --------
  357. .. function:: obs_display_t *obs_display_create(const struct gs_init_data *graphics_data)
  358. Adds a new window display linked to the main render pipeline. This creates
  359. a new swap chain which updates every frame.
  360. *(Important note: do not use more than one display widget within the
  361. hierarchy of the same base window; this will cause presentation
  362. stalls on Macs.)*
  363. :param graphics_data: The swap chain initialization data
  364. :return: The new display context, or NULL if failed
  365. Relevant data types used with this function:
  366. .. code:: cpp
  367. enum gs_color_format {
  368. [...]
  369. GS_RGBA,
  370. GS_BGRX,
  371. GS_BGRA,
  372. GS_RGBA16F,
  373. GS_RGBA32F,
  374. [...]
  375. };
  376. enum gs_zstencil_format {
  377. GS_ZS_NONE,
  378. GS_Z16,
  379. GS_Z24_S8,
  380. GS_Z32F,
  381. GS_Z32F_S8X24
  382. };
  383. struct gs_window {
  384. #if defined(_WIN32)
  385. void *hwnd;
  386. #elif defined(__APPLE__)
  387. __unsafe_unretained id view;
  388. #elif defined(__linux__) || defined(__FreeBSD__)
  389. uint32_t id;
  390. void *display;
  391. #endif
  392. };
  393. struct gs_init_data {
  394. struct gs_window window;
  395. uint32_t cx, cy;
  396. uint32_t num_backbuffers;
  397. enum gs_color_format format;
  398. enum gs_zstencil_format zsformat;
  399. uint32_t adapter;
  400. };
  401. ---------------------
  402. .. function:: void obs_display_destroy(obs_display_t *display)
  403. Destroys a display context.
  404. ---------------------
  405. .. function:: void obs_display_resize(obs_display_t *display, uint32_t cx, uint32_t cy)
  406. Changes the size of a display context.
  407. ---------------------
  408. .. function:: void obs_display_add_draw_callback(obs_display_t *display, void (*draw)(void *param, uint32_t cx, uint32_t cy), void *param)
  409. Adds a draw callback for a display context, which will be called
  410. whenever the display is rendered.
  411. :param display: The display context
  412. :param draw: The draw callback which is called each time a frame
  413. updates
  414. :param param: The user data to be associated with this draw callback
  415. ---------------------
  416. .. function:: void obs_display_remove_draw_callback(obs_display_t *display, void (*draw)(void *param, uint32_t cx, uint32_t cy), void *param)
  417. Removes a draw callback for a display context.
  418. ---------------------
  419. .. function:: void obs_display_set_enabled(obs_display_t *display, bool enable)
  420. Enables/disables a display context.
  421. ---------------------
  422. .. function:: bool obs_display_enabled(obs_display_t *display)
  423. :return: *true* if the display is enabled, *false* otherwise
  424. ---------------------
  425. .. function:: void obs_display_set_background_color(obs_display_t *display, uint32_t color)
  426. Sets the background (clear) color for the display context.