1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363 |
- Source API Reference (obs_source_t)
- ===================================
- Sources are used to render video and/or audio on stream. Things such as
- capturing displays/games/audio, playing a video, showing an image, or
- playing audio. Sources can also be used to implement audio and video
- filters as well as transitions. The `libobs/obs-source.h`_ file is the
- dedicated header for implementing sources.
- .. type:: obs_source_t
- A reference-counted video/audio input source.
- .. type:: obs_weak_source_t
- A weak reference to an video/audio input source.
- .. code:: cpp
- #include <obs.h>
- Source Definition Structure (obs_source_info)
- ---------------------------------------------
- .. type:: struct obs_source_info
- Source definition structure.
- .. member:: const char *obs_source_info.id
- Unique string identifier for the source (required).
- .. member:: enum obs_source_type obs_source_info.type
- Type of source.
- - **OBS_SOURCE_TYPE_INPUT** - Video/Audio Input
- - **OBS_SOURCE_TYPE_FILTER** - Filter
- - **OBS_SOURCE_TYPE_TRANSITION** - Transition
- .. member:: uint32_t obs_source_info.output_flags
- Source output capability flags (required).
- (Author's note: This should be renamed to "capability_flags")
- A bitwise OR combination of one or more of the following values:
- - **OBS_SOURCE_VIDEO** - Source has video
-
- Unless SOURCE_ASYNC_VIDEO is specified, the source must include the
- :c:member:`obs_source_info.video_render` callback in the source
- definition structure.
- - **OBS_SOURCE_AUDIO** - Source has audio
-
- Use the :c:func:`obs_source_output_audio()` function to pass raw
- audio data, which will be automatically converted and uploaded. If
- used with OBS_SOURCE_ASYNC_VIDEO, audio will automatically be
- synced up to the video output based upon their mutual timestamps.
- - **OBS_SOURCE_ASYNC** - Video is asynchronous (use
- OBS_SOURCE_ASYNC_VIDEO instead to automatically combine this flag
- with the OBS_SOURCE_VIDEO flag).
- - **OBS_SOURCE_ASYNC_VIDEO** - Source passes raw video data via RAM
- Use the :c:func:`obs_source_output_video()` function to pass raw
- video data, which will be automatically drawn at a timing relative
- to the provided timestamp.
-
- If audio is also present on the source, the audio will
- automatically be synced to the video based upon their mutual
- timestamps.
- - **OBS_SOURCE_CUSTOM_DRAW** - Source uses custom graphics calls,
- rather than just rendering a single texture.
- This capability flag must be used if the source does not use
- :c:func:`obs_source_draw()` to render a single texture.
- This capability flag is an important hint to turn off a specific
- optimization that allows the first effect filter in the filter
- chain to render the source directly with that effect filter. The
- optimization does not work if there are custom graphics calls, and
- the source must be rendered to a texture first before being sent to
- the first filter in the filter chain.
- (Author's note: Ironically, not many sources render with that
- optimization. I should have made it so that the optimization isn't
- used by default, and a flag should have been used to turn on the
- optimization -- not turn it off).
- - **OBS_SOURCE_INTERACTION** - Source can be interacted with by the
- user.
- When this is used, the source will receive interaction events if
- theese callbacks are provided:
- :c:member:`obs_source_info.mouse_click`,
- :c:member:`obs_source_info.mouse_move`,
- :c:member:`obs_source_info.mouse_wheel`,
- :c:member:`obs_source_info.focus`, and
- :c:member:`obs_source_info.key_click`.
- - **OBS_SOURCE_COMPOSITE** - Source composites child sources
- When used, specifies that the source composites one or more child
- sources. Scenes and transitions are examples of sources that
- contain and render child sources.
-
- Sources that render sub-sources must implement the audio_render
- callback in order to perform custom audio mixing of child sources.
- This capability flag is always set for transitions.
- - **OBS_SOURCE_DO_NOT_DUPLICATE** - Source should not be fully
- duplicated.
- When this is used, specifies that the source should not be fully
- duplicated, and should prefer to duplicate via holding references
- rather than full duplication.
- When functions such as :c:func:`obs_source_duplicate()` or
- :c:func:`obs_scene_duplicate()` are called, sources or child
- sources with this flag will never be fully duplicated, and will
- instead only be referenced.
- An example of the type of sources that should not be fully
- duplicated are video devices, browsers, and video/audio captures,
- as they will either not function correctly or will cause
- performance or resource issues when duplicated.
- - **OBS_SOURCE_DEPRECATED** - Source is deprecated and should not be
- used.
- - **OBS_SOURCE_DO_NOT_SELF_MONITOR** - Audio of this source should
- not allow monitoring if the current monitoring device is the same
- device being captured by the source.
- This flag is used as a hint to the back-end to prevent the source
- from creating an audio feedback loop. This is primarily only used
- with desktop audio capture sources.
- .. member:: const char *(*obs_source_info.get_name)(void *type_data)
- Get the translated name of the source type.
- :param type_data: The type_data variable of this structure
- :return: The translated name of the source type
- .. member:: void *(*obs_source_info.create)(obs_data_t *settings, obs_source_t *source)
- Creates the implementation data for the source.
- :param settings: Settings to initialize the source with
- :param source: Source that this data is associated with
- :return: The implementation data associated with this source
- .. member:: void (*obs_source_info.destroy)(void *data)
- Destroys the implementation data for the source.
- Async sources must not call obs_source_output_video after returning
- from destroy.
- .. member:: uint32_t (*obs_source_info.get_width)(void *data)
- uint32_t (*obs_source_info.get_height)(void *data);
- Returns the width/height of the source. These callbacks are required
- if this is a video source and is synchronous.
- (Author's note: These should really be consolidated in to one
- function, not two)
- :return: The width/height of the video
- .. member:: void (*obs_source_info.get_defaults)(obs_data_t *settings)
- void (*obs_source_info.get_defaults2)(void *type_data, obs_data_t *settings)
- Sets the default settings for this source.
- :param settings: Default settings. Call obs_data_set_default*
- functions on this object to set default setting
- values
- .. member:: obs_properties_t *(*obs_source_info.get_properties)(void *data)
- obs_properties_t *(*obs_source_info.get_properties2)(void *data, void *type_data)
- Gets the property information of this source.
- (Optional)
- :return: The properties of the source
- .. member:: void (*obs_source_info.update)(void *data, obs_data_t *settings)
- Updates the settings for this source.
- (Optional)
- :param settings: New settings for this source
- .. member:: void (*obs_source_info.activate)(void *data)
- Called when the source has been activated in the main view (visible
- on stream/recording).
- (Optional)
- .. member:: void (*obs_source_info.deactivate)(void *data)
- Called when the source has been deactivated from the main view (no
- longer visible on stream/recording).
- (Optional)
- .. member:: void (*obs_source_info.show)(void *data)
- Called when the source is visible on any display and/or on the main
- view.
- (Optional)
- .. member:: void (*obs_source_info.hide)(void *data)
- Called when the source is no longer visible on any display and/or on
- the main view.
- (Optional)
- .. member:: void (*obs_source_info.video_tick)(void *data, float seconds)
- Called each video frame with the time elapsed.
- (Optional)
- :param seconds: Seconds elapsed since the last frame
- .. member:: void (*obs_source_info.video_render)(void *data, gs_effect_t *effect)
- Called when rendering the source with the graphics subsystem.
- If this is an input/transition source, this is called to draw the
- source texture with the graphics subsystem.
- If this is a filter source, it wraps source draw calls (for example
- applying a custom effect with custom parameters to a source). In
- this case, it's highly recommended to use the
- :c:func:`obs_source_process_filter_begin()` and
- :c:func:`obs_source_process_filter_end()` functions to automatically
- handle effect-based filter processing. However, you can implement
- custom draw handling as desired as well.
- If the source output capability flags do not include
- OBS_SOURCE_CUSTOM_DRAW, the source must use
- :c:func:`obs_source_draw()` to render the source's texture.
- :param effect: This parameter is no longer used. Instead, call
- :c:func:`obs_source_draw()`
- .. member:: struct obs_source_frame *(*obs_source_info.filter_video)(void *data, struct obs_source_frame *frame)
- Called to filter raw async video data. This function is only used
- with asynchronous video filters.
- :param frame: Video frame to filter
- :return: New video frame data. This can defer video data to
- be drawn later if time is needed for processing
- .. member:: struct obs_audio_data *(*obs_source_info.filter_audio)(void *data, struct obs_audio_data *audio)
- Called to filter raw audio data. This function is only used with
- audio filters.
- :param audio: Audio data to filter
- :return: Modified or new audio data. You can directly modify
- the data passed and return it, or you can defer audio
- data for later if time is needed for processing. If
- you are returning new data, that data must exist until
- the next call to the
- :c:member:`obs_source_info.filter_audio` callback or
- until the filter is removed/destroyed
- .. member:: void (*obs_source_info.enum_active_sources)(void *data, obs_source_enum_proc_t enum_callback, void *param)
- Called to enumerate all active sources being used within this
- source. If the source has children that render audio/video it must
- implement this callback. Only used with sources that have tha
- OBS_SOURCE_COMPOSITE output capability flag.
- :param enum_callback: Enumeration callback
- :param param: User data to pass to callback
- .. member:: void (*obs_source_info.save)(void *data, obs_data_t *settings)
- Called when saving custom data for a source. This is a separate
- function because sometimes a source needs to know when it is being
- saved so it doesn't always have to update the current settings until
- a certain point.
- (Optional)
- :param settings: Settings object to save data to
- .. member:: void (*obs_source_info.load)(void *data, obs_data_t *settings)
- Called when loading custom data from saved source data. This is
- called after all the loading sources have actually been created,
- allowing the ability to reference other sources if desired.
- (Optional)
- :param settings: Settings object to load data from
- .. member:: void (*obs_source_info.mouse_click)(void *data, const struct obs_mouse_event *event, int32_t type, bool mouse_up, uint32_t click_count)
- Called when interacting with a source and a mouse-down or mouse-up
- occurs. Only used with sources that have the OBS_SOURCE_INTERACTION
- output capability flag.
- (Optional)
- :param event: Mouse event properties
- :param type: Mouse button pushed
- :param mouse_up: Mouse event type (true if mouse-up)
- :param click_count: Mouse click count (1 for single click, etc.)
- .. member:: void (*obs_source_info.mouse_move)(void *data, const struct obs_mouse_event *event, bool mouse_leave)
- Called when interacting with a source and a mouse-move occurs. Only
- used with sources that have the OBS_SOURCE_INTERACTION output
- capability flag.
- (Optional)
- :param event: Mouse event properties
- :param mouse_leave: Mouse leave state (true if mouse left source)
- .. member:: void (*obs_source_info.mouse_wheel)(void *data, const struct obs_mouse_event *event, int x_delta, int y_delta)
- Called when interacting with a source and a mouse-wheel occurs. Only
- used with sources that have the OBS_SOURCE_INTERACTION output
- capability flag.
- (Optional)
- :param event: Mouse event properties
- :param x_delta: Movement delta in the horizontal direction
- :param y_delta: Movement delta in the vertical direction
- .. member:: void (*obs_source_info.focus)(void *data, bool focus)
- Called when interacting with a source and gain focus/lost focus event
- occurs. Only used with sources that have the OBS_SOURCE_INTERACTION
- output capability flag.
- (Optional)
- :param focus: Focus state (true if focus gained)
- .. member:: void (*obs_source_info.key_click)(void *data, const struct obs_key_event *event, bool key_up)
- Called when interacting with a source and a key-up or key-down
- occurs. Only used with sources that have the OBS_SOURCE_INTERACTION
- output capability flag.
- (Optional)
- :param event: Key event properties
- :param focus: Key event type (true if mouse-up)
- .. member:: void (*obs_source_info.filter_remove)(void *data, obs_source_t *source)
- Called when the filter is removed from a source.
- (Optional)
- :param data: Filter data
- :param source: Source that the filter being removed from
- .. member:: void *obs_source_info.type_data
- void (*obs_source_info.free_type_data)(void *type_data)
- Private data associated with this entry. Note that this is not the
- same as the implementation data; this is used to differentiate
- between two different types if the same callbacks are used for more
- than one different type.
- .. member:: bool (*obs_source_info.audio_render)(void *data, uint64_t *ts_out, struct obs_source_audio_mix *audio_output, uint32_t mixers, size_t channels, size_t sample_rate)
- Called to render audio of composite sources. Only used with sources
- that have tha OBS_SOURCE_COMPOSITE output capability flag.
- .. member:: void (*obs_source_info.enum_all_sources)(void *data, obs_source_enum_proc_t enum_callback, void *param)
- Called to enumerate all active and inactive sources being used
- within this source. If this callback isn't implemented,
- enum_active_sources will be called instead. Only used with sources
- that have tha OBS_SOURCE_COMPOSITE output capability flag.
- This is typically used if a source can have inactive child sources.
- :param enum_callback: Enumeration callback
- :param param: User data to pass to callback
- .. member:: void (*obs_source_info.transition_start)(void *data)
- void (*obs_source_info.transition_stop)(void *data)
- Called on transition sources when the transition starts/stops.
- (Optional)
- .. _source_signal_handler_reference:
- Source Signals
- --------------
- **destroy** (ptr *source*)
- This signal is called when the source is about to be destroyed. Do
- not increment any references when using this signal.
- **remove** (ptr source)
- Called when the :c:func:`obs_source_remove()` function is called on
- the source.
- **save** (ptr source)
- Called when the source is being saved.
- **load** (ptr source)
- Called when the source is being loaded.
- **activate** (ptr source)
- Called when the source has been activated in the main view (visible
- on stream/recording).
- **deactivate** (ptr source)
- Called when the source has been deactivated from the main view (no
- longer visible on stream/recording).
- **show** (ptr source)
- Called when the source is visible on any display and/or on the main
- view.
- **hide** (ptr source)
- Called when the source is no longer visible on any display and/or on
- the main view.
- **mute** (ptr source, bool muted)
- Called when the source is muted/unmuted.
- **push_to_mute_changed** (ptr source, bool enabled)
- Called when push-to-mute has been enabled/disabled.
- **push_to_mute_delay** (ptr source, int delay)
- Called when the push-to-mute delay value has changed.
- **push_to_talk_changed** (ptr source, bool enabled)
- Called when push-to-talk has been enabled/disabled.
- **push_to_talk_delay** (ptr source, int delay)
- Called when the push-to-talk delay value has changed.
- **enable** (ptr source, bool enabled)
- Called when the source has been disabled/enabled.
- **rename** (ptr source, string new_name, string prev_name)
- Called when the source has been renamed.
- **volume** (ptr source, in out float volume)
- Called when the volume of the source has changed.
- **update_properties** (ptr source)
- Called when the properties of the source have been updated.
- **update_flags** (ptr source, int flags)
- Called when the flags of the source have been changed.
- **audio_sync** (ptr source, int out int offset)
- Called when the audio sync offset has changed.
- **audio_mixers** (ptr source, in out int mixers)
- Called when the audio mixers have changed.
- **filter_add** (ptr source, ptr filter)
- Called when a filter has been added to the source.
- **filter_remove** (ptr source, ptr filter)
- Called when a filter has been removed from the source.
- **reorder_filters** (ptr source)
- Called when filters have been reordered.
- **transition_start** (ptr source)
- Called when a transition is starting.
- **transition_video_stop** (ptr source)
- Called when a transition's video transitioning has stopped.
- **transition_stop** (ptr source)
- Called when a transition has stopped.
- General Source Functions
- ------------------------
- .. function:: void obs_register_source(struct obs_source_info *info)
- Registers a source type. Typically used in
- :c:func:`obs_module_load()` or in the program's initialization phase.
- ---------------------
- .. function:: const char *obs_source_get_display_name(const char *id)
- Calls the :c:member:`obs_source_info.get_name` callback to get the
- translated display name of a source type.
- :param id: The source type string identifier
- :return: The translated display name of a source type
- ---------------------
- .. function:: obs_source_t *obs_source_create(const char *id, const char *name, obs_data_t *settings, obs_data_t *hotkey_data)
- 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.
- :param id: The source type string identifier
- :param name: The desired name of the source. If this is
- not unique, it will be made to be unique
- :param settings: The settings for the source, or *NULL* if
- none
- :param hotkey_data: Saved hotkey data for the source, or *NULL*
- if none
- :return: A reference to the newly created source, or
- *NULL* if failed
- ---------------------
- .. function:: obs_source_t *obs_source_create_private(const char *id, const char *name, obs_data_t *settings)
- Creates a 'private' source which is not enumerated by
- :c:func:`obs_enum_sources()`, and is not saved by
- :c:func:`obs_save_sources()`.
- Author's Note: The existence of this function is a result of design
- flaw: the front-end should control saving/loading of sources, and
- functions like :c:func:`obs_enum_sources()` and
- :c:func:`obs_save_sources()` should not exist in the back-end.
- :param id: The source type string identifier
- :param name: The desired name of the source. For private
- sources, this does not have to be unique,
- and can additionally be *NULL* if desired
- :param settings: The settings for the source, or *NULL* if
- none
- :return: A reference to the newly created source, or
- *NULL* if failed
- ---------------------
- .. function:: obs_source_t *obs_source_duplicate(obs_source_t *source, const char *desired_name, bool create_private)
- Duplicates a source. If the source has the
- OBS_SOURCE_DO_NOT_DUPLICATE output flag set, this only returns a
- new reference to the same source.
- :param source: The source to duplicate
- :param desired_name: The desired name of the new source. If this is
- not a private source and the name is not unique,
- it will be made to be unique
- :param create_private: If *true*, the new source will be a private
- source if fully duplicated
- :return: A new source reference
- ---------------------
- .. function:: void obs_source_addref(obs_source_t *source)
- void obs_source_release(obs_source_t *source)
- Adds/releases a reference to a source. When the last reference is
- released, the source is destroyed.
- ---------------------
- .. function:: obs_weak_source_t *obs_source_get_weak_source(obs_source_t *source)
- obs_source_t *obs_weak_source_get_source(obs_weak_source_t *weak)
- These functions are used to get a weak reference from a strong source
- reference, or a strong source reference from a weak reference. If
- the source is destroyed, *obs_weak_source_get_source* will return
- *NULL*.
- ---------------------
- .. function:: void obs_weak_source_addref(obs_weak_source_t *weak)
- void obs_weak_source_release(obs_weak_source_t *weak)
- Adds/releases a weak reference to a source.
- ---------------------
- .. function:: void obs_source_remove(obs_source_t *source)
- Notifies all reference holders of the source (via
- :c:func:`obs_source_removed()`) that the source should be released.
- ---------------------
- .. function:: bool obs_source_removed(const obs_source_t *source)
- :return: *true* if the source should be released
- ---------------------
- .. function:: uint32_t obs_source_get_output_flags(const obs_source_t *source)
- uint32_t obs_get_source_output_flags(const char *id)
- :return: Capability flags of a source
- Author's Note: "Output flags" is poor wording in retrospect; this
- should have been named "Capability flags", and the OBS_SOURCE_*
- macros should really be OBS_SOURCE_CAP_* macros instead.
- See :c:member:`obs_source_info.output_flags` for more information.
- ---------------------
- .. function:: obs_data_t *obs_get_source_defaults(const char *id)
- Calls :c:member:`obs_source_info.get_defaults` to get the defaults
- settings of the source type.
- :return: The default settings for a source type
- ---------------------
- .. function:: obs_properties_t *obs_source_properties(const obs_source_t *source)
- obs_properties_t *obs_get_source_properties(const char *id)
- Use these functions to get the properties of a source or source type.
- Properties are optionally used (if desired) to automatically generate
- user interface widgets to allow users to update settings.
- :return: The properties list for a specific existing source. Free with
- :c:func:`obs_properties_destroy()`
- ---------------------
- .. function:: bool obs_source_configurable(const obs_source_t *source)
- bool obs_is_source_configurable(const char *id)
- :return: *true* if the the source has custom properties, *false*
- otherwise
- ---------------------
- .. function:: void obs_source_update(obs_source_t *source, obs_data_t *settings)
- Updates the settings for a source and calls the
- :c:member:`obs_source_info.update` callback of the source. If the
- source is a video source, the :c:member:`obs_source_info.update` will
- be not be called immediately; instead, it will be deferred to the
- video thread to prevent threading issues.
- ---------------------
- .. function:: void obs_source_video_render(obs_source_t *source)
- Renders a video source. This will call the
- :c:member:`obs_source_info.video_render` callback of the source.
- ---------------------
- .. function:: uint32_t obs_source_get_width(obs_source_t *source)
- uint32_t obs_source_get_height(obs_source_t *source)
- Calls the :c:member:`obs_source_info.get_width` or
- :c:member:`obs_source_info.get_height` of the source to get its width
- and/or height.
- Author's Note: These functions should be consolidated in to a single
- function/callback rather than having a function for both width and
- height.
- :return: The width or height of the source
- ---------------------
- .. function:: obs_data_t *obs_source_get_settings(const obs_source_t *source)
- :return: The settings string for a source. The reference counter of the
- returned settings data is incremented, so
- :c:func:`obs_data_release()` must be called when the
- settings are no longer used
- ---------------------
- .. function:: const char *obs_source_get_name(const obs_source_t *source)
- :return: The name of the source
- ---------------------
- .. function:: void obs_source_set_name(obs_source_t *source, const char *name)
- Sets the name of a source. If the source is not private and the name
- is not unique, it will automatically be given a unique name.
- ---------------------
- .. function:: enum obs_source_type obs_source_get_type(const obs_source_t *source)
- :return: | OBS_SOURCE_TYPE_INPUT for inputs
- | OBS_SOURCE_TYPE_FILTER for filters
- | OBS_SOURCE_TYPE_TRANSITION for transitions
- | OBS_SOURCE_TYPE_SCENE for scenes
- ---------------------
- .. function:: const char *obs_source_get_id(const obs_source_t *source)
- :return: The source's type identifier string
- ---------------------
- .. function:: signal_handler_t *obs_source_get_signal_handler(const obs_source_t *source)
- :return: The source's signal handler
- See the :ref:`source_signal_handler_reference` for more information
- on signals that are available for sources.
- ---------------------
- .. function:: proc_handler_t *obs_source_get_proc_handler(const obs_source_t *source)
- :return: The procedure handler for a source
- ---------------------
- .. function:: void obs_source_set_volume(obs_source_t *source, float volume)
- float obs_source_get_volume(const obs_source_t *source)
- Sets/gets the user volume for a source that has audio output.
- ---------------------
- .. function:: bool obs_source_muted(const obs_source_t *source)
- void obs_source_set_muted(obs_source_t *source, bool muted)
- Sets/gets whether the source's audio is muted.
- ---------------------
- .. function:: bool obs_source_push_to_mute_enabled(const obs_source_t *source)
- void obs_source_enable_push_to_mute(obs_source_t *source, bool enabled)
- Sets/gets whether push-to-mute is enabled.
- ---------------------
- .. function:: uint64_t obs_source_get_push_to_mute_delay(const obs_source_t *source)
- void obs_source_set_push_to_mute_delay(obs_source_t *source, uint64_t delay)
- Sets/gets the push-to-mute delay.
- ---------------------
- .. function:: bool obs_source_push_to_talk_enabled(const obs_source_t *source)
- void obs_source_enable_push_to_talk(obs_source_t *source, bool enabled)
- Sets/gets whether push-to-talk is enabled.
- ---------------------
- .. function:: uint64_t obs_source_get_push_to_talk_delay(const obs_source_t *source)
- void obs_source_set_push_to_talk_delay(obs_source_t *source, uint64_t delay)
- Sets/gets the push-to-talk delay.
- ---------------------
- .. function:: void obs_source_set_sync_offset(obs_source_t *source, int64_t offset)
- int64_t obs_source_get_sync_offset(const obs_source_t *source)
- Sets/gets the audio sync offset (in nanoseconds) for a source.
- ---------------------
- .. function:: void obs_source_enum_active_sources(obs_source_t *source, obs_source_enum_proc_t enum_callback, void *param)
- void obs_source_enum_active_tree(obs_source_t *source, obs_source_enum_proc_t enum_callback, void *param)
- Enumerates active child sources or source tree used by this source.
- Relevant data types used with this function:
- .. code:: cpp
- typedef void (*obs_source_enum_proc_t)(obs_source_t *parent,
- obs_source_t *child, void *param);
- ---------------------
- .. function:: bool obs_source_active(const obs_source_t *source)
- :return: *true* if active, *false* if not. A source is only
- consdiered active if it's being shown on the final mix
- ---------------------
- .. function:: bool obs_source_showing(const obs_source_t *source)
- :return: *true* if showing, *false* if not. A source is considered
- showing if it's being displayed anywhere at all, whether on
- a display context or on the final output
- ---------------------
- .. function:: void obs_source_inc_showing(obs_source_t *source)
- void obs_source_dec_showing(obs_source_t *source)
- Increments/decrements a source's "showing" state. Typically used
- when drawing a source on a display manually.
- ---------------------
- .. function:: void obs_source_set_flags(obs_source_t *source, uint32_t flags)
- uint32_t obs_source_get_flags(const obs_source_t *source)
- :param flags: OBS_SOURCE_FLAG_FORCE_MONO Forces audio to mono
- ---------------------
- .. function:: void obs_source_set_audio_mixers(obs_source_t *source, uint32_t mixers)
- uint32_t obs_source_get_audio_mixers(const obs_source_t *source)
- Sets/gets the audio mixer channels that a source outputs to
- (depending on what bits are set). Audio mixers allow filtering
- specific using multiple audio encoders to mix different sources
- together depending on what mixer channel they're set to.
- For example, to output to mixer 1 and 3, you would perform a bitwise
- OR on bits 0 and 2: (1<<0) | (1<<2), or 0x5.
- ---------------------
- .. function:: void obs_source_enum_filters(obs_source_t *source, obs_source_enum_proc_t callback, void *param)
- Enumerates active filters on a source.
- Relevant data types used with this function:
- .. code:: cpp
- typedef void (*obs_source_enum_proc_t)(obs_source_t *parent,
- obs_source_t *child, void *param);
- ---------------------
- .. function:: obs_source_t *obs_source_get_filter_by_name(obs_source_t *source, const char *name)
- :return: The desired filter, or *NULL* if not found. The reference
- of the filter is incremented
- ---------------------
- .. function:: void obs_source_copy_filters(obs_source_t *dst, obs_source_t *src)
- Copies filters from the source to the destination. If filters by the
- same name already exist in the destination source, the newer filters
- will be given unique names.
- ---------------------
- .. function:: bool obs_source_enabled(const obs_source_t *source)
- void obs_source_set_enabled(obs_source_t *source, bool enabled)
- Enables/disables a source, or returns the enabled state.
- ---------------------
- .. function:: void obs_source_add_audio_capture_callback(obs_source_t *source, obs_source_audio_capture_t callback, void *param)
- void obs_source_remove_audio_capture_callback(obs_source_t *source, obs_source_audio_capture_t callback, void *param)
- Adds/removes an audio capture callback for a source. This allows the
- ability to get the raw audio data of a source as it comes in.
- Relevant data types used with this function:
- .. code:: cpp
- typedef void (*obs_source_audio_capture_t)(void *param, obs_source_t *source,
- const struct audio_data *audio_data, bool muted);
- ---------------------
- .. function:: void obs_source_set_deinterlace_mode(obs_source_t *source, enum obs_deinterlace_mode mode)
- enum obs_deinterlace_mode obs_source_get_deinterlace_mode(const obs_source_t *source)
- Sets/gets the deinterlace mode.
- :param mode: | OBS_DEINTERLACE_MODE_DISABLE - Disables deinterlacing
- | OBS_DEINTERLACE_MODE_DISCARD - Discard
- | OBS_DEINTERLACE_MODE_RETRO - Retro
- | OBS_DEINTERLACE_MODE_BLEND - Blend
- | OBS_DEINTERLACE_MODE_BLEND_2X - Blend 2x
- | OBS_DEINTERLACE_MODE_LINEAR - Linear
- | OBS_DEINTERLACE_MODE_LINEAR_2X - Linear 2x
- | OBS_DEINTERLACE_MODE_YADIF - Yadif
- | OBS_DEINTERLACE_MODE_YADIF_2X - Yadif 2x
- ---------------------
- .. function:: void obs_source_set_deinterlace_field_order(obs_source_t *source, enum obs_deinterlace_field_order order)
- enum obs_deinterlace_field_order obs_source_get_deinterlace_field_order(const obs_source_t *source)
- Sets/gets the deinterlace field order.
- :param order: | OBS_DEINTERLACE_FIELD_ORDER_TOP - Start from top
- | OBS_DEINTERLACE_FIELD_ORDER_BOTTOM - Start from bottom
- ---------------------
- .. function:: obs_data_t *obs_source_get_private_settings(obs_source_t *item)
- Gets private front-end settings data. This data is saved/loaded
- automatically. Returns an incremented reference.
- ---------------------
- .. function:: void obs_source_send_mouse_click(obs_source_t *source, const struct obs_mouse_event *event, int32_t type, bool mouse_up, uint32_t click_count)
- Used for interacting with sources: sends a mouse down/up event to a
- source.
- ---------------------
- .. function:: void obs_source_send_mouse_move(obs_source_t *source, const struct obs_mouse_event *event, bool mouse_leave)
- Used for interacting with sources: sends a mouse move event to a
- source.
- ---------------------
- .. function:: void obs_source_send_mouse_wheel(obs_source_t *source, const struct obs_mouse_event *event, int x_delta, int y_delta)
- Used for interacting with sources: sends a mouse wheel event to a
- source.
- ---------------------
- .. function:: void obs_source_send_focus(obs_source_t *source, bool focus)
- Used for interacting with sources: sends a got-focus or lost-focus
- event to a source.
- ---------------------
- .. function:: void obs_source_send_key_click(obs_source_t *source, const struct obs_key_event *event, bool key_up)
- Used for interacting with sources: sends a key up/down event to a
- source.
- ---------------------
- Functions used by sources
- -------------------------
- .. function:: 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 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.
- ---------------------
- .. function:: void obs_source_draw(gs_texture_t *image, int x, int y, uint32_t cx, uint32_t cy, bool flip)
- 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.
- ---------------------
- .. function:: void obs_source_output_video(obs_source_t *source, const struct obs_source_frame *frame)
- Outputs asynchronous video data. Set to NULL to deactivate the texture.
- Relevant data types used with this function:
- .. code:: cpp
- enum video_format {
- VIDEO_FORMAT_NONE,
-
- /* planar 420 format */
- VIDEO_FORMAT_I420, /* three-plane */
- VIDEO_FORMAT_NV12, /* two-plane, luma and packed chroma */
-
- /* packed 422 formats */
- VIDEO_FORMAT_YVYU,
- VIDEO_FORMAT_YUY2, /* YUYV */
- VIDEO_FORMAT_UYVY,
-
- /* packed uncompressed formats */
- VIDEO_FORMAT_RGBA,
- VIDEO_FORMAT_BGRA,
- VIDEO_FORMAT_BGRX,
- VIDEO_FORMAT_Y800, /* grayscale */
-
- /* planar 4:4:4 */
- VIDEO_FORMAT_I444,
- };
- 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;
- };
- ---------------------
- .. function:: void obs_source_preload_video(obs_source_t *source, const struct obs_source_frame *frame)
- Preloads a video frame to ensure a frame is ready for playback as
- soon as video playback starts.
- ---------------------
- .. function:: void obs_source_show_preloaded_video(obs_source_t *source)
- Shows any preloaded video frame.
-
- ---------------------
- .. function:: void obs_source_output_audio(obs_source_t *source, const struct obs_source_audio *audio)
- Outputs audio data.
- ---------------------
- .. function:: void obs_source_update_properties(obs_source_t *source)
- Signal an update to any currently used properties.
- ---------------------
- .. function:: bool obs_source_add_active_child(obs_source_t *parent, obs_source_t *child)
- Adds an active child source. Must be called by parent sources on child
- sources when the child is added and active. This ensures that the source is
- properly activated if the parent is active.
-
- :return: *true* if source can be added, *false* if it causes recursion
- ---------------------
- .. function:: void obs_source_remove_active_child(obs_source_t *parent, obs_source_t *child)
- Removes an active child source. Must be called by parent sources on child
- sources when the child is removed or inactive. This ensures that the source
- is properly deactivated if the parent is no longer active.
- ---------------------
- Filters
- -------
- .. function:: obs_source_t *obs_filter_get_parent(const obs_source_t *filter)
- If the source is a filter, returns the parent source of the filter.
- The parent source is the source being filtered.
-
- Only guaranteed to be valid inside of the video_render, filter_audio,
- filter_video, and filter_remove callbacks.
- ---------------------
- .. function:: obs_source_t *obs_filter_get_target(const obs_source_t *filter)
- If the source is a filter, returns the target source of the filter.
- The target source is the next source in the filter chain.
-
- Only guaranteed to be valid inside of the video_render, filter_audio,
- filter_video, and filter_remove callbacks.
- ---------------------
- .. function:: void obs_source_default_render(obs_source_t *source)
- Can be used by filters to directly render a non-async parent source
- without any filter processing.
- ---------------------
- .. function:: void obs_source_filter_add(obs_source_t *source, obs_source_t *filter)
- void obs_source_filter_remove(obs_source_t *source, obs_source_t *filter)
- Adds/removes a filter to/from a source.
- ---------------------
- .. function:: void obs_source_filter_set_order(obs_source_t *source, obs_source_t *filter, enum obs_order_movement movement)
- Modifies the order of a specific filter.
- :param movement: | Can be one of the following:
- | OBS_ORDER_MOVE_UP
- | OBS_ORDER_MOVE_DOWN
- | OBS_ORDER_MOVE_TOP
- | OBS_ORDER_MOVE_BOTTOM
- ---------------------
- Functions used by filters
- -------------------------
- .. function:: bool obs_source_process_filter_begin(obs_source_t *filter, enum gs_color_format format, enum obs_allow_direct_render allow_direct)
- 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.
-
- :return: *true* if filtering should continue, *false* if the filter
- is bypassed for whatever reason
- ---------------------
- .. function:: void obs_source_process_filter_end(obs_source_t *filter, gs_effect_t *effect, uint32_t width, uint32_t height)
- Draws the filter using the effect's "Draw" 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
- filter.
- ---------------------
- .. function:: void obs_source_process_filter_tech_end(obs_source_t *filter, gs_effect_t *effect, uint32_t width, uint32_t height, const char *tech_name)
- Draws the filter with a specific technique in the effect.
-
- 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.
- ---------------------
- .. function:: void obs_source_skip_video_filter(obs_source_t *filter)
- Skips the filter if the filter is invalid and cannot be rendered.
- ---------------------
- .. _transitions:
- Transitions
- -----------
- .. function:: obs_source_t *obs_transition_get_source(obs_source_t *transition, enum obs_transition_target target)
- :param target: | OBS_TRANSITION_SOURCE_A - Source being transitioned from, or the current source if not transitioning
- | OBS_TRANSITION_SOURCE_B - Source being transitioned to
- :return: An incremented reference to the source or destination
- sources of the transition
- ---------------------
- .. function:: void obs_transition_clear(obs_source_t *transition)
- Clears the transition.
- ---------------------
- .. function:: obs_source_t *obs_transition_get_active_source(obs_source_t *transition)
- :return: An incremented reference to the currently active source of
- the transition
- ---------------------
- .. function:: bool obs_transition_start(obs_source_t *transition, enum obs_transition_mode mode, uint32_t duration_ms, obs_source_t *dest)
- Starts the transition with the desired destination source.
- :param mode: Currently only OBS_TRANSITION_MODE_AUTO
- :param duration_ms: Duration in milliseconds. If the transition has
- a fixed duration set by
- :c:func:`obs_transition_enable_fixed`, this
- parameter will have no effect
- :param dest: The destination source to transition to
- ---------------------
- .. function:: void obs_transition_set_size(obs_source_t *transition, uint32_t cx, uint32_t cy)
- void obs_transition_get_size(const obs_source_t *transition, uint32_t *cx, uint32_t *cy)
- Sets/gets the dimensions of the transition.
- ---------------------
- .. function:: void obs_transition_set_scale_type(obs_source_t *transition, enum obs_transition_scale_type type)
- enum obs_transition_scale_type obs_transition_get_scale_type( const obs_source_t *transition)
- Sets/gets the scale type for sources within the transition.
- :param type: | OBS_TRANSITION_SCALE_MAX_ONLY - Scale to aspect ratio, but only to the maximum size of each source
- | OBS_TRANSITION_SCALE_ASPECT - Alwasy scale the sources, but keep aspect ratio
- | OBS_TRANSITION_SCALE_STRETCH - Scale and stretch the sources to the size of the transision
- ---------------------
- .. function:: void obs_transition_set_alignment(obs_source_t *transition, uint32_t alignment)
- uint32_t obs_transition_get_alignment(const obs_source_t *transition)
- Sets/gets the alignment used to draw the two sources within
- transition the transition.
- :param alignment: | Can be any bitwise OR combination of:
- | OBS_ALIGN_CENTER
- | OBS_ALIGN_LEFT
- | OBS_ALIGN_RIGHT
- | OBS_ALIGN_TOP
- | OBS_ALIGN_BOTTOM
- ---------------------
- Functions used by transitions
- -----------------------------
- .. function:: void obs_transition_enable_fixed(obs_source_t *transition, bool enable, uint32_t duration_ms)
- bool obs_transition_fixed(obs_source_t *transition)
- Sets/gets whether the transition uses a fixed duration. Useful for
- certain types of transitions such as stingers. If this is set, the
- *duration_ms* parameter of :c:func:`obs_transition_start()` has no
- effect.
- ---------------------
- .. function:: float obs_transition_get_time(obs_source_t *transition)
- :return: The current transition time value (0.0f..1.0f)
- ---------------------
- .. function:: void obs_transition_video_render(obs_source_t *transition, obs_transition_video_render_callback_t callback)
- Helper function used for rendering transitions. This function will
- render two distinct textures for source A and source B of the
- transition, allowing the ability to blend them together with a pixel
- shader in a desired manner.
- The *a* and *b* parameters of *callback* are automatically rendered
- textures of source A and source B, *t* is the time value
- (0.0f..1.0f), *cx* and *cy* are the current dimensions of the
- transition, and *data* is the implementation's private data.
- Relevant data types used with this function:
- .. code:: cpp
- typedef void (*obs_transition_video_render_callback_t)(void *data,
- gs_texture_t *a, gs_texture_t *b, float t,
- uint32_t cx, uint32_t cy);
- ---------------------
- .. function:: bool obs_transition_audio_render(obs_source_t *transition, uint64_t *ts_out, struct obs_source_audio_mix *audio, uint32_t mixers, size_t channels, size_t sample_rate, obs_transition_audio_mix_callback_t mix_a_callback, obs_transition_audio_mix_callback_t mix_b_callback)
- Helper function used for transitioning audio. Typically you'd call
- this in the obs_source_info.audio_render callback with its
- parameters, and use the mix_a_callback and mix_b_callback to
- determine the the audio fading of source A and source B.
- Relevant data types used with this function:
- .. code:: cpp
- typedef float (*obs_transition_audio_mix_callback_t)(void *data, float t);
- ---------------------
- .. function:: void obs_transition_swap_begin(obs_source_t *tr_dest, obs_source_t *tr_source)
- void obs_transition_swap_end(obs_source_t *tr_dest, obs_source_t *tr_source)
- Swaps two transitions. Call obs_transition_swap_begin, swap the
- source, then call obs_transition_swap_end when complete. This allows
- the ability to seamlessly swap two different transitions without it
- affecting the output.
-
- For example, if a transition is assigned to output channel 0, you'd
- call obs_transition_swap_begin, then you'd call obs_set_output_source
- with the new transition, then call
- :c:func:`obs_transition_swap_begin()`.
- .. ---------------------------------------------------------------------------
- .. _libobs/obs-source.h: https://github.com/jp9000/obs-studio/blob/master/libobs/obs-source.h
|