| 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
 
 
  |