forked from obsproject/obs-studio
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathobs.h
More file actions
1772 lines (1401 loc) · 62 KB
/
Copy pathobs.h
File metadata and controls
1772 lines (1401 loc) · 62 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
/******************************************************************************
Copyright (C) 2013-2014 by Hugh Bailey <jim@obsproject.com>
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 2 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
******************************************************************************/
#pragma once
#include "util/c99defs.h"
#include "util/bmem.h"
#include "util/profiler.h"
#include "util/text-lookup.h"
#include "graphics/graphics.h"
#include "graphics/vec2.h"
#include "graphics/vec3.h"
#include "media-io/audio-io.h"
#include "media-io/video-io.h"
#include "callback/signal.h"
#include "callback/proc.h"
#include "obs-config.h"
#include "obs-defs.h"
#include "obs-data.h"
#include "obs-ui.h"
#include "obs-properties.h"
#include "obs-interaction.h"
struct matrix4;
/* opaque types */
struct obs_display;
struct obs_view;
struct obs_source;
struct obs_scene;
struct obs_scene_item;
struct obs_output;
struct obs_encoder;
struct obs_service;
struct obs_module;
struct obs_fader;
struct obs_volmeter;
typedef struct obs_display obs_display_t;
typedef struct obs_view obs_view_t;
typedef struct obs_source obs_source_t;
typedef struct obs_scene obs_scene_t;
typedef struct obs_scene_item obs_sceneitem_t;
typedef struct obs_output obs_output_t;
typedef struct obs_encoder obs_encoder_t;
typedef struct obs_service obs_service_t;
typedef struct obs_module obs_module_t;
typedef struct obs_fader obs_fader_t;
typedef struct obs_volmeter obs_volmeter_t;
typedef struct obs_weak_source obs_weak_source_t;
typedef struct obs_weak_output obs_weak_output_t;
typedef struct obs_weak_encoder obs_weak_encoder_t;
typedef struct obs_weak_service obs_weak_service_t;
#include "obs-source.h"
#include "obs-encoder.h"
#include "obs-output.h"
#include "obs-service.h"
#include "obs-audio-controls.h"
#include "obs-hotkey.h"
/**
* @file
* @brief Main libobs header used by applications.
*
* @mainpage
*
* @section intro_sec Introduction
*
* This document describes the api for libobs to be used by applications as well
* as @ref modules_page implementing some kind of functionality.
*
*/
#ifdef __cplusplus
extern "C" {
#endif
/** Used for changing the order of items (for example, filters in a source,
* or items in a scene) */
enum obs_order_movement {
OBS_ORDER_MOVE_UP,
OBS_ORDER_MOVE_DOWN,
OBS_ORDER_MOVE_TOP,
OBS_ORDER_MOVE_BOTTOM
};
/**
* Used with obs_source_process_filter to specify whether the filter should
* render the source directly with the specified effect, or whether it should
* render it to a texture
*/
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
};
/**
* Used with scene items to indicate the type of bounds to use for scene items.
* Mostly determines how the image will be scaled within those bounds, or
* whether to use bounds at all.
*/
enum obs_bounds_type {
OBS_BOUNDS_NONE, /**< no bounds */
OBS_BOUNDS_STRETCH, /**< stretch (ignores base scale) */
OBS_BOUNDS_SCALE_INNER, /**< scales to inner rectangle */
OBS_BOUNDS_SCALE_OUTER, /**< scales to outer rectangle */
OBS_BOUNDS_SCALE_TO_WIDTH, /**< scales to the width */
OBS_BOUNDS_SCALE_TO_HEIGHT, /**< scales to the height */
OBS_BOUNDS_MAX_ONLY, /**< no scaling, maximum size 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;
};
/**
* Video initialization structure
*/
struct obs_video_info {
/**
* Graphics module to use (usually "libobs-opengl" or "libobs-d3d11")
*/
const char *graphics_module;
uint32_t fps_num; /**< Output FPS numerator */
uint32_t fps_den; /**< Output FPS denominator */
uint32_t base_width; /**< Base compositing width */
uint32_t base_height; /**< Base compositing height */
uint32_t output_width; /**< Output width */
uint32_t output_height; /**< Output height */
enum video_format output_format; /**< Output format */
/** Video adapter index to use (NOTE: avoid for optimus laptops) */
uint32_t adapter;
/** Use shaders to convert to different color formats */
bool gpu_conversion;
enum video_colorspace colorspace; /**< YUV type (if YUV) */
enum video_range_type range; /**< YUV range (if YUV) */
enum obs_scale_type scale_type; /**< How to scale if scaling */
};
/**
* Audio initialization structure
*/
struct obs_audio_info {
uint32_t samples_per_sec;
enum speaker_layout speakers;
};
/**
* Sent to source filters via the filter_audio callback to allow filtering of
* audio data
*/
struct obs_audio_data {
uint8_t *data[MAX_AV_PLANES];
uint32_t frames;
uint64_t timestamp;
};
/**
* Source audio output structure. Used with obs_source_output_audio to output
* source audio. Audio is automatically resampled and remixed as necessary.
*/
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;
};
/**
* Source asynchronous video output structure. Used with
* obs_source_output_video to output asynchronous video. Video is buffered as
* necessary to play according to timestamps. When used with audio output,
* audio is synced to video as it is played.
*
* If a YUV format is specified, it will be automatically upsampled and
* converted to RGB via shader on the graphics processor.
*/
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;
float color_range_min[3];
float color_range_max[3];
bool flip;
/* used internally by libobs */
volatile long refs;
bool prev_frame;
};
/* ------------------------------------------------------------------------- */
/* OBS context */
/**
* Initializes OBS
*
* @param locale The locale to use for modules
* @param module_config_path Path to module config storage directory
* (or NULL if none)
* @param store The profiler name store for OBS to use or NULL
*/
EXPORT bool obs_startup(const char *locale, const char *module_config_path,
profiler_name_store_t *store);
/** Releases all data associated with OBS and terminates the OBS context */
EXPORT void obs_shutdown(void);
/** @return true if the main OBS context has been initialized */
EXPORT bool obs_initialized(void);
/** @return The current core version */
EXPORT uint32_t obs_get_version(void);
/**
* Sets a new locale to use for modules. This will call obs_module_set_locale
* for each module with the new locale.
*
* @param locale The locale to use for modules
*/
EXPORT void obs_set_locale(const char *locale);
/** @return the current locale */
EXPORT const char *obs_get_locale(void);
/**
* Returns the profiler name store (see util/profiler.h) used by OBS, which is
* either a name store passed to obs_startup, an internal name store, or NULL
* in case obs_initialized() returns false.
*/
EXPORT profiler_name_store_t *obs_get_profiler_name_store(void);
/**
* Sets base video ouput base resolution/fps/format.
*
* @note This data cannot be changed if an output is corrently active.
* @note The graphics module cannot be changed without fully destroying the
* OBS context.
*
* @param ovi Pointer to an obs_video_info structure containing the
* specification of the graphics subsystem,
* @return OBS_VIDEO_SUCCESS if sucessful
* OBS_VIDEO_NOT_SUPPORTED if the adapter lacks capabilities
* OBS_VIDEO_INVALID_PARAM if a parameter is invalid
* OBS_VIDEO_CURRENTLY_ACTIVE if video is currently active
* OBS_VIDEO_MODULE_NOT_FOUND if the graphics module is not found
* OBS_VIDEO_FAIL for generic failure
*/
EXPORT int obs_reset_video(struct obs_video_info *ovi);
/**
* Sets base audio output format/channels/samples/etc
*
* @note Cannot reset base audio if an output is currently active.
*/
EXPORT bool obs_reset_audio(const struct obs_audio_info *oai);
/** Gets the current video settings, returns false if no video */
EXPORT bool obs_get_video_info(struct obs_video_info *ovi);
/** Gets the current audio settings, returns false if no audio */
EXPORT bool obs_get_audio_info(struct obs_audio_info *oai);
/**
* Opens a plugin module directly from a specific path.
*
* If the module already exists then the function will return successful, and
* the module parameter will be given the pointer to the existing module.
*
* This does not initialize the module, it only loads the module image. To
* initialize the module, call obs_init_module.
*
* @param module The pointer to the created module.
* @param path Specifies the path to the module library file. If the
* extension is not specified, it will use the extension
* appropriate to the operating system.
* @param data_path Specifies the path to the directory where the module's
* data files are stored.
* @returns MODULE_SUCCESS if successful
* MODULE_ERROR if a generic error occurred
* MODULE_FILE_NOT_FOUND if the module was not found
* MODULE_MISSING_EXPORTS if required exports are missing
* MODULE_INCOMPATIBLE_VER if incompatible version
*/
EXPORT int obs_open_module(obs_module_t **module, const char *path,
const char *data_path);
/**
* Initializes the module, which calls its obs_module_load export. If the
* module is alrady loaded, then this function does nothing and returns
* successful.
*/
EXPORT bool obs_init_module(obs_module_t *module);
/** Logs loaded modules */
EXPORT void obs_log_loaded_modules(void);
/** Returns the module file name */
EXPORT const char *obs_get_module_file_name(obs_module_t *module);
/** Returns the module full name */
EXPORT const char *obs_get_module_name(obs_module_t *module);
/** Returns the module author(s) */
EXPORT const char *obs_get_module_author(obs_module_t *module);
/** Returns the module description */
EXPORT const char *obs_get_module_description(obs_module_t *module);
/** Returns the module binary path */
EXPORT const char *obs_get_module_binary_path(obs_module_t *module);
/** Returns the module data path */
EXPORT const char *obs_get_module_data_path(obs_module_t *module);
/**
* Adds a module search path to be used with obs_find_modules. If the search
* path strings contain %module%, that text will be replaced with the module
* name when used.
*
* @param bin Specifies the module's binary directory search path.
* @param data Specifies the module's data directory search path.
*/
EXPORT void obs_add_module_path(const char *bin, const char *data);
/** Automatically loads all modules from module paths (convenience function) */
EXPORT void obs_load_all_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);
/** Finds all modules within the search paths added by obs_add_module_path. */
EXPORT void obs_find_modules(obs_find_module_callback_t callback, void *param);
typedef void (*obs_enum_module_callback_t)(void *param, obs_module_t *module);
/** Enumerates all loaded modules */
EXPORT void obs_enum_modules(obs_enum_module_callback_t callback, void *param);
/** Helper function for using default module locale */
EXPORT lookup_t *obs_module_load_locale(obs_module_t *module,
const char *default_locale, const char *locale);
/**
* Returns the location of a plugin module data file.
*
* @note Modules should use obs_module_file function defined in obs-module.h
* as a more elegant means of getting their files without having to
* specify the module parameter.
*
* @param module The module associated with the file to locate
* @param file The file to locate
* @return Path string, or NULL if not found. Use bfree to free string.
*/
EXPORT char *obs_find_module_file(obs_module_t *module, const char *file);
/**
* Returns the path of a plugin module config file (whether it exists or not)
*
* @note Modules should use obs_module_config_path function defined in
* obs-module.h as a more elegant means of getting their files without
* having to specify the module parameter.
*
* @param module The module associated with the path
* @param file The file to get a path to
* @return Path string, or NULL if not found. Use bfree to free string.
*/
EXPORT char *obs_module_get_config_path(obs_module_t *module, const char *file);
/** Enumerates all source types (inputs, filters, transitions, etc). */
EXPORT bool obs_enum_source_types(size_t idx, const char **id);
/**
* Enumerates all available inputs source types.
*
* Inputs are general source inputs (such as capture sources, device sources,
* etc).
*/
EXPORT bool obs_enum_input_types(size_t idx, const char **id);
/**
* Enumerates all available filter source types.
*
* Filters are sources that are used to modify the video/audio output of
* other sources.
*/
EXPORT bool obs_enum_filter_types(size_t idx, const char **id);
/**
* Enumerates all available transition source types.
*
* Transitions are sources used to transition between two or more other
* sources.
*/
EXPORT bool obs_enum_transition_types(size_t idx, const char **id);
/** Enumerates all available output types. */
EXPORT bool obs_enum_output_types(size_t idx, const char **id);
/** Enumerates all available encoder types. */
EXPORT bool obs_enum_encoder_types(size_t idx, const char **id);
/** Enumerates all available service types. */
EXPORT bool obs_enum_service_types(size_t idx, const char **id);
/** Helper function for entering the OBS graphics context */
EXPORT void obs_enter_graphics(void);
/** Helper function for leaving the OBS graphics context */
EXPORT void obs_leave_graphics(void);
/** Gets the main audio output handler for this OBS context */
EXPORT audio_t *obs_get_audio(void);
/** Gets the main video output handler for this OBS context */
EXPORT video_t *obs_get_video(void);
/** Sets the primary output source for a channel. */
EXPORT void obs_set_output_source(uint32_t channel, obs_source_t *source);
/**
* Gets the primary output source for a channel and increments the reference
* counter for that source. Use obs_source_release to release.
*/
EXPORT obs_source_t *obs_get_output_source(uint32_t channel);
/**
* Enumerates all input sources
*
* Callback function returns true to continue enumeration, or false to end
* enumeration.
*
* Use obs_source_get_ref or obs_source_get_weak_source if you want to retain
* a reference after obs_enum_sources finishes
*/
EXPORT void obs_enum_sources(bool (*enum_proc)(void*, obs_source_t*),
void *param);
/** Enumerates outputs */
EXPORT void obs_enum_outputs(bool (*enum_proc)(void*, obs_output_t*),
void *param);
/** Enumerates encoders */
EXPORT void obs_enum_encoders(bool (*enum_proc)(void*, obs_encoder_t*),
void *param);
/** Enumerates encoders */
EXPORT void obs_enum_services(bool (*enum_proc)(void*, obs_service_t*),
void *param);
/**
* Gets a source by its name.
*
* Increments the source reference counter, use obs_source_release to
* release it when complete.
*/
EXPORT obs_source_t *obs_get_source_by_name(const char *name);
/** Gets an output by its name. */
EXPORT obs_output_t *obs_get_output_by_name(const char *name);
/** Gets an encoder by its name. */
EXPORT obs_encoder_t *obs_get_encoder_by_name(const char *name);
/** Gets an service by its 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 (using texture_rect) */
OBS_EFFECT_OPAQUE, /**< RGB/YUV (alpha set to 1.0) */
OBS_EFFECT_SOLID, /**< RGB/YUV (solid color only) */
OBS_EFFECT_BICUBIC, /**< Bicubic downscale */
OBS_EFFECT_LANCZOS, /**< Lanczos downscale */
OBS_EFFECT_BILINEAR_LOWRES, /**< Bilinear low resolution downscale */
OBS_EFFECT_PREMULTIPLIED_ALPHA,/**< Premultiplied alpha */
};
/** Returns a commonly used base effect */
EXPORT gs_effect_t *obs_get_base_effect(enum obs_base_effect effect);
/* DEPRECATED: gets texture_rect default effect */
DEPRECATED_START EXPORT gs_effect_t *obs_get_default_rect_effect(void)
DEPRECATED_END;
/** Returns the primary obs signal handler */
EXPORT signal_handler_t *obs_get_signal_handler(void);
/** Returns the primary obs procedure handler */
EXPORT proc_handler_t *obs_get_proc_handler(void);
/** Renders the main view */
EXPORT void obs_render_main_view(void);
/** Sets the master user volume */
EXPORT void obs_set_master_volume(float volume);
/** Gets the master user volume */
EXPORT float obs_get_master_volume(void);
/** Saves a source to settings data */
EXPORT obs_data_t *obs_save_source(obs_source_t *source);
/** Loads a source from settings data */
EXPORT obs_source_t *obs_load_source(obs_data_t *data);
typedef void (*obs_load_source_cb)(void *private_data, obs_source_t *source);
/** Loads sources from a data array */
EXPORT void obs_load_sources(obs_data_array_t *array, obs_load_source_cb cb,
void *private_data);
/** Saves sources to a data array */
EXPORT obs_data_array_t *obs_save_sources(void);
typedef bool (*obs_save_source_filter_cb)(void *data, obs_source_t *source);
EXPORT obs_data_array_t *obs_save_sources_filtered(obs_save_source_filter_cb cb,
void *data);
enum obs_obj_type {
OBS_OBJ_TYPE_INVALID,
OBS_OBJ_TYPE_SOURCE,
OBS_OBJ_TYPE_OUTPUT,
OBS_OBJ_TYPE_ENCODER,
OBS_OBJ_TYPE_SERVICE
};
EXPORT enum obs_obj_type obs_obj_get_type(void *obj);
EXPORT const char *obs_obj_get_id(void *obj);
EXPORT bool obs_obj_invalid(void *obj);
/* ------------------------------------------------------------------------- */
/* View context */
/**
* Creates a view context.
*
* A view can be used for things like separate previews, or drawing
* sources separately.
*/
EXPORT obs_view_t *obs_view_create(void);
/** Destroys this view context */
EXPORT void obs_view_destroy(obs_view_t *view);
/** Sets the source to be used for this view context. */
EXPORT void obs_view_set_source(obs_view_t *view, uint32_t channel,
obs_source_t *source);
/** Gets the source currently in use for this view context */
EXPORT obs_source_t *obs_view_get_source(obs_view_t *view,
uint32_t channel);
/** Renders the sources of this view context */
EXPORT void obs_view_render(obs_view_t *view);
EXPORT uint64_t obs_get_video_frame_time(void);
EXPORT double obs_get_active_fps(void);
/* ------------------------------------------------------------------------- */
/* Display context */
/**
* Adds a new window display linked to the main render pipeline. This creates
* a new swap chain which updates every frame.
*
* @param graphics_data The swap chain initialization data.
* @return The new display context, or NULL if failed.
*/
EXPORT obs_display_t *obs_display_create(
const struct gs_init_data *graphics_data);
/** Destroys a display context */
EXPORT void obs_display_destroy(obs_display_t *display);
/** Changes the size of this display */
EXPORT void obs_display_resize(obs_display_t *display, uint32_t cx,
uint32_t cy);
/**
* Adds a draw callback for this display context
*
* @param display The display context.
* @param draw The draw callback which is called each time a frame
* updates.
* @param param The user data to be associated with this draw callback.
*/
EXPORT void obs_display_add_draw_callback(obs_display_t *display,
void (*draw)(void *param, uint32_t cx, uint32_t cy),
void *param);
/** Removes a draw callback for this display context */
EXPORT void obs_display_remove_draw_callback(obs_display_t *display,
void (*draw)(void *param, uint32_t cx, uint32_t cy),
void *param);
EXPORT void obs_display_set_enabled(obs_display_t *display, bool enable);
EXPORT bool obs_display_enabled(obs_display_t *display);
EXPORT void obs_display_set_background_color(obs_display_t *display,
uint32_t color);
/* ------------------------------------------------------------------------- */
/* Sources */
/** Returns the translated display name of a source */
EXPORT const char *obs_source_get_display_name(const char *id);
/**
* Creates a source of the specified type with the specified settings.
*
* The "source" context is used for anything related to presenting
* or modifying video/audio. Use obs_source_release to release it.
*/
EXPORT obs_source_t *obs_source_create(const char *id, const char *name,
obs_data_t *settings, obs_data_t *hotkey_data);
EXPORT obs_source_t *obs_source_create_private(const char *id,
const char *name, obs_data_t *settings);
/* if source has OBS_SOURCE_DO_NOT_DUPLICATE output flag set, only returns a
* reference */
EXPORT obs_source_t *obs_source_duplicate(obs_source_t *source,
const char *desired_name, bool create_private);
/**
* Adds/releases a reference to a source. When the last reference is
* released, the source is destroyed.
*/
EXPORT void obs_source_addref(obs_source_t *source);
EXPORT void obs_source_release(obs_source_t *source);
EXPORT void obs_weak_source_addref(obs_weak_source_t *weak);
EXPORT void obs_weak_source_release(obs_weak_source_t *weak);
EXPORT obs_source_t *obs_source_get_ref(obs_source_t *source);
EXPORT obs_weak_source_t *obs_source_get_weak_source(obs_source_t *source);
EXPORT obs_source_t *obs_weak_source_get_source(obs_weak_source_t *weak);
EXPORT bool obs_weak_source_references_source(obs_weak_source_t *weak,
obs_source_t *source);
/** Notifies all references that the source should be released */
EXPORT void obs_source_remove(obs_source_t *source);
/** Returns true if the source should be released */
EXPORT bool obs_source_removed(const obs_source_t *source);
/** Returns capability flags of a source */
EXPORT uint32_t obs_source_get_output_flags(const obs_source_t *source);
/** Returns capability flags of a source type */
EXPORT uint32_t obs_get_source_output_flags(const char *id);
/** Gets the default settings for a source type */
EXPORT obs_data_t *obs_get_source_defaults(const char *id);
/** Returns the property list, if any. Free with obs_properties_destroy */
EXPORT obs_properties_t *obs_get_source_properties(const char *id);
/** Returns whether the source has custom properties or not */
EXPORT bool obs_is_source_configurable(const char *id);
EXPORT bool obs_source_configurable(const obs_source_t *source);
/**
* Returns the properties list for a specific existing source. Free with
* obs_properties_destroy
*/
EXPORT obs_properties_t *obs_source_properties(const obs_source_t *source);
/** Updates settings for this source */
EXPORT void obs_source_update(obs_source_t *source, obs_data_t *settings);
/** Renders a video source. */
EXPORT void obs_source_video_render(obs_source_t *source);
/** Gets the width of a source (if it has video) */
EXPORT uint32_t obs_source_get_width(obs_source_t *source);
/** Gets the height of a source (if it has video) */
EXPORT uint32_t obs_source_get_height(obs_source_t *source);
/**
* If the source is a filter, returns the parent source of the filter. Only
* guaranteed to be valid inside of the video_render, filter_audio,
* filter_video, and filter_remove callbacks.
*/
EXPORT obs_source_t *obs_filter_get_parent(const obs_source_t *filter);
/**
* If the source is a filter, returns the target source of the filter. Only
* guaranteed to be valid inside of the video_render, filter_audio,
* filter_video, and filter_remove callbacks.
*/
EXPORT obs_source_t *obs_filter_get_target(const obs_source_t *filter);
/** Adds a filter to the source (which is used whenever the source is used) */
EXPORT void obs_source_filter_add(obs_source_t *source, obs_source_t *filter);
/** Removes a filter from the source */
EXPORT void obs_source_filter_remove(obs_source_t *source,
obs_source_t *filter);
/** Modifies the order of a specific filter */
EXPORT void obs_source_filter_set_order(obs_source_t *source,
obs_source_t *filter, enum obs_order_movement movement);
/** Gets the settings string for a source */
EXPORT obs_data_t *obs_source_get_settings(const obs_source_t *source);
/** Gets the name of a source */
EXPORT const char *obs_source_get_name(const obs_source_t *source);
/** Sets the name of a source */
EXPORT void obs_source_set_name(obs_source_t *source, const char *name);
/** Gets the source type */
EXPORT enum obs_source_type obs_source_get_type(const obs_source_t *source);
/** Gets the source identifier */
EXPORT const char *obs_source_get_id(const obs_source_t *source);
/** Returns the signal handler for a source */
EXPORT signal_handler_t *obs_source_get_signal_handler(
const obs_source_t *source);
/** Returns the procedure handler for a source */
EXPORT proc_handler_t *obs_source_get_proc_handler(const obs_source_t *source);
/** Sets the user volume for a source that has audio output */
EXPORT void obs_source_set_volume(obs_source_t *source, float volume);
/** Gets the user volume for a source that has audio output */
EXPORT float obs_source_get_volume(const obs_source_t *source);
/** Sets the audio sync offset (in nanoseconds) for a source */
EXPORT void obs_source_set_sync_offset(obs_source_t *source, int64_t offset);
/** Gets the audio sync offset (in nanoseconds) for a source */
EXPORT int64_t obs_source_get_sync_offset(const obs_source_t *source);
/** Enumerates active child sources used by this source */
EXPORT void obs_source_enum_active_sources(obs_source_t *source,
obs_source_enum_proc_t enum_callback,
void *param);
/** Enumerates the entire active child source tree used by this source */
EXPORT void obs_source_enum_active_tree(obs_source_t *source,
obs_source_enum_proc_t enum_callback,
void *param);
/** Returns true if active, false if not */
EXPORT bool obs_source_active(const obs_source_t *source);
/**
* Returns true if currently displayed somewhere (active or not), false if not
*/
EXPORT bool obs_source_showing(const obs_source_t *source);
/** Specifies that async video frames should be played as soon as possible */
#define OBS_SOURCE_FLAG_UNBUFFERED (1<<0)
/** Specifies to force audio to mono */
#define OBS_SOURCE_FLAG_FORCE_MONO (1<<1)
/**
* Sets source flags. Note that these are different from the main output
* flags. These are generally things that can be set by the source or user,
* while the output flags are more used to determine capabilities of a source.
*/
EXPORT void obs_source_set_flags(obs_source_t *source, uint32_t flags);
/** Gets source flags. */
EXPORT uint32_t obs_source_get_flags(const obs_source_t *source);
/**
* Sets audio mixer flags. These flags are used to specify which mixers
* the source's audio should be applied to.
*/
EXPORT void obs_source_set_audio_mixers(obs_source_t *source, uint32_t mixers);
/** Gets audio mixer flags */
EXPORT uint32_t obs_source_get_audio_mixers(const obs_source_t *source);
/**
* Increments the 'showing' reference counter to indicate that the source is
* being shown somewhere. If the reference counter was 0, will call the 'show'
* callback.
*/
EXPORT void obs_source_inc_showing(obs_source_t *source);
/**
* Decrements the 'showing' reference counter to indicate that the source is
* no longer being shown somewhere. If the reference counter is set to 0,
* will call the 'hide' callback
*/
EXPORT void obs_source_dec_showing(obs_source_t *source);
/** Enumerates filters assigned to the source */
EXPORT void obs_source_enum_filters(obs_source_t *source,
obs_source_enum_proc_t callback, void *param);
/** Gets a filter of a source by its display name. */
EXPORT obs_source_t *obs_source_get_filter_by_name(obs_source_t *source,
const char *name);
EXPORT bool obs_source_enabled(const obs_source_t *source);
EXPORT void obs_source_set_enabled(obs_source_t *source, bool enabled);
EXPORT bool obs_source_muted(const obs_source_t *source);
EXPORT void obs_source_set_muted(obs_source_t *source, bool muted);
EXPORT bool obs_source_push_to_mute_enabled(obs_source_t *source);
EXPORT void obs_source_enable_push_to_mute(obs_source_t *source, bool enabled);
EXPORT uint64_t obs_source_get_push_to_mute_delay(obs_source_t *source);
EXPORT void obs_source_set_push_to_mute_delay(obs_source_t *source,
uint64_t delay);
EXPORT bool obs_source_push_to_talk_enabled(obs_source_t *source);
EXPORT void obs_source_enable_push_to_talk(obs_source_t *source, bool enabled);
EXPORT uint64_t obs_source_get_push_to_talk_delay(obs_source_t *source);
EXPORT void obs_source_set_push_to_talk_delay(obs_source_t *source,
uint64_t delay);
typedef void (*obs_source_audio_capture_t)(void *param, obs_source_t *source,
const struct audio_data *audio_data, bool muted);
EXPORT void obs_source_add_audio_capture_callback(obs_source_t *source,
obs_source_audio_capture_t callback, void *param);
EXPORT void obs_source_remove_audio_capture_callback(obs_source_t *source,
obs_source_audio_capture_t callback, void *param);
enum obs_deinterlace_mode {
OBS_DEINTERLACE_MODE_DISABLE,
OBS_DEINTERLACE_MODE_DISCARD,
OBS_DEINTERLACE_MODE_RETRO,
OBS_DEINTERLACE_MODE_BLEND,
OBS_DEINTERLACE_MODE_BLEND_2X,
OBS_DEINTERLACE_MODE_LINEAR,
OBS_DEINTERLACE_MODE_LINEAR_2X,
OBS_DEINTERLACE_MODE_YADIF,
OBS_DEINTERLACE_MODE_YADIF_2X
};
enum obs_deinterlace_field_order {
OBS_DEINTERLACE_FIELD_ORDER_TOP,
OBS_DEINTERLACE_FIELD_ORDER_BOTTOM
};
EXPORT void obs_source_set_deinterlace_mode(obs_source_t *source,
enum obs_deinterlace_mode mode);
EXPORT enum obs_deinterlace_mode obs_source_get_deinterlace_mode(
const obs_source_t *source);
EXPORT void obs_source_set_deinterlace_field_order(obs_source_t *source,
enum obs_deinterlace_field_order field_order);
EXPORT enum obs_deinterlace_field_order obs_source_get_deinterlace_field_order(
const obs_source_t *source);
/* ------------------------------------------------------------------------- */
/* Functions used by sources */
EXPORT void *obs_source_get_type_data(obs_source_t *source);
/**
* Helper function to set the color matrix information when drawing the source.
*
* @param color_matrix The color matrix. Assigns to the 'color_matrix'
* effect variable.
* @param color_range_min The minimum color range. Assigns to the
* 'color_range_min' effect variable. If NULL,
* {0.0f, 0.0f, 0.0f} is used.
* @param color_range_max The maximum color range. Assigns to the
* 'color_range_max' effect variable. If NULL,
* {1.0f, 1.0f, 1.0f} is used.
*/
EXPORT void obs_source_draw_set_color_matrix(
const struct matrix4 *color_matrix,
const struct vec3 *color_range_min,
const struct vec3 *color_range_max);
/**
* Helper function to draw sprites for a source (synchronous video).
*
* @param image The sprite texture to draw. Assigns to the 'image' variable
* of the current effect.
* @param x X position of the sprite.
* @param y Y position of the sprite.
* @param cx Width of the sprite. If 0, uses the texture width.
* @param cy Height of the sprite. If 0, uses the texture height.
* @param flip Specifies whether to flip the image vertically.
*/
EXPORT void obs_source_draw(gs_texture_t *image, int x, int y,
uint32_t cx, uint32_t cy, bool flip);
/** Outputs asynchronous video data. Set to NULL to deactivate the texture */
EXPORT void obs_source_output_video(obs_source_t *source,
const struct obs_source_frame *frame);
/** Outputs audio data (always asynchronous) */
EXPORT void obs_source_output_audio(obs_source_t *source,
const struct obs_source_audio *audio);
/** Signal an update to any currently used properties via 'update_properties' */
EXPORT void obs_source_update_properties(obs_source_t *source);
/** Gets the current async video frame */
EXPORT struct obs_source_frame *obs_source_get_frame(obs_source_t *source);
/** Releases the current async video frame */
EXPORT void obs_source_release_frame(obs_source_t *source,
struct obs_source_frame *frame);
/**
* Default RGB filter handler for generic effect filters. Processes the
* filter chain and renders them to texture if needed, then the filter is
* drawn with
*
* After calling this, set your parameters for the effect, then call
* obs_source_process_filter_end to draw the filter.
*
* Returns true if filtering should continue, false if the filter is bypassed
* for whatever reason.
*/
EXPORT bool obs_source_process_filter_begin(obs_source_t *filter,
enum gs_color_format format,
enum obs_allow_direct_render allow_direct);
/**
* Draws the filter.
*
* Before calling this function, first call obs_source_process_filter_begin and
* then set the effect parameters, and then call this function to finalize the
* filter.
*/
EXPORT void obs_source_process_filter_end(obs_source_t *filter,
gs_effect_t *effect, uint32_t width, uint32_t height);
/**
* Draws the filter with a specific technique.
*
* Before calling this function, first call obs_source_process_filter_begin and
* then set the effect parameters, and then call this function to finalize the