1364 lines
47 KiB
ReStructuredText
1364 lines
47 KiB
ReStructuredText
|
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
|