1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678167916801681168216831684168516861687168816891690169116921693169416951696169716981699170017011702170317041705170617071708170917101711171217131714171517161717171817191720172117221723172417251726172717281729173017311732173317341735173617371738173917401741174217431744174517461747174817491750175117521753175417551756175717581759176017611762176317641765176617671768176917701771177217731774177517761777177817791780178117821783178417851786178717881789179017911792179317941795179617971798179918001801180218031804180518061807180818091810181118121813181418151816181718181819182018211822182318241825182618271828182918301831183218331834183518361837183818391840184118421843184418451846184718481849185018511852185318541855185618571858185918601861186218631864186518661867186818691870187118721873187418751876187718781879188018811882188318841885188618871888188918901891189218931894189518961897189818991900190119021903190419051906190719081909191019111912191319141915191619171918191919201921192219231924192519261927192819291930193119321933193419351936193719381939194019411942194319441945194619471948194919501951195219531954195519561957195819591960196119621963196419651966196719681969197019711972197319741975 |
- 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)
- ---------------------------------------------
- .. struct:: obs_source_info
- Source definition structure.
- .. member:: const char *obs_source_info.id
- Unique string identifier for the source (required).
- .. member:: uint32_t version
- Source version (optional).
- This is used when a source's implementation is significantly
- modified and the previous version is deprecated, but is kept to
- prevent old sources from breaking.
- .. 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
- these 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.
- - **OBS_SOURCE_CAP_DISABLED** - This source type has been disabled
- and should not be shown as a type of source the user can add.
- - **OBS_SOURCE_CAP_OBSOLETE** - This source type is obsolete and
- should not be shown as a type of source the user can add.
- Identical to *OBS_SOURCE_CAP_DISABLED*. Meant to be used when a
- source has changed in some way (mostly defaults/properties), but
- you want to avoid breaking older configurations. Basically solves
- the problem of "I want to change the defaults of a source but I
- don't want to break people's configurations"
- - **OBS_SOURCE_CONTROLLABLE_MEDIA** - This source has media that can
- be controlled
- - **OBS_SOURCE_MONITOR_BY_DEFAULT** - Source should enable
- monitoring by default. Monitoring should be set by the
- frontend if this flag is set.
- - **OBS_SOURCE_CEA_708** - Source type provides cea708 data
- - **OBS_SOURCE_SRGB** - Source understands SRGB rendering
- - **OBS_SOURCE_CAP_DONT_SHOW_PROPERTIES** - Source type prefers not
- to have its properties shown on creation (prefers to rely on
- defaults first)
- - **OBS_SOURCE_REQUIRES_CANVAS** - Source type requires a canvas.
- .. 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.
-
- :param data: The implementation data associated with this source.
- This value can be null (e.g., when
- :c:func:`obs_get_source_properties()` is called on the
- source type), make sure to handle this gracefully.
- (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 the
- 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_add)(void *data, obs_source_t *source)
- Called when the filter is added to a source.
- (Optional)
- :param data: Filter data
- :param source: Source that the filter is being added to
- .. 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 the 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 the 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)
- .. member:: enum obs_icon_type obs_source_info.icon_type
- Icon used for the source.
- - **OBS_ICON_TYPE_UNKNOWN** - Unknown
- - **OBS_ICON_TYPE_IMAGE** - Image
- - **OBS_ICON_TYPE_COLOR** - Color
- - **OBS_ICON_TYPE_SLIDESHOW** - Slideshow
- - **OBS_ICON_TYPE_AUDIO_INPUT** - Audio Input
- - **OBS_ICON_TYPE_AUDIO_OUTPUT** - Audio Output
- - **OBS_ICON_TYPE_DESKTOP_CAPTURE** - Desktop Capture
- - **OBS_ICON_TYPE_WINDOW_CAPTURE** - Window Capture
- - **OBS_ICON_TYPE_GAME_CAPTURE** - Game Capture
- - **OBS_ICON_TYPE_CAMERA** - Camera
- - **OBS_ICON_TYPE_TEXT** - Text
- - **OBS_ICON_TYPE_MEDIA** - Media
- - **OBS_ICON_TYPE_BROWSER** - Browser
- - **OBS_ICON_TYPE_CUSTOM** - Custom (not implemented yet)
- .. member:: void (*obs_source_info.media_play_pause)(void *data, bool pause)
- Called to pause or play media.
- .. member:: void (*obs_source_info.media_restart)(void *data)
- Called to restart the media.
- .. member:: void (*obs_source_info.media_stop)(void *data)
- Called to stop the media.
- .. member:: void (*obs_source_info.media_next)(void *data)
- Called to go to the next media.
- .. member:: void (*obs_source_info.media_previous)(void *data)
- Called to go to the previous media.
- .. member:: int64_t (*obs_source_info.media_get_duration)(void *data)
- Called to get the media duration.
- .. member:: int64_t (*obs_source_info.media_get_time)(void *data)
- Called to get the current time of the media.
- .. member:: void (*obs_source_info.media_set_time)(void *data, int64_t milliseconds)
- Called to set the media time.
- .. member:: enum obs_media_state (*obs_source_info.media_get_state)(void *data)
- Called to get the state of the media.
- - **OBS_MEDIA_STATE_NONE** - None
- - **OBS_MEDIA_STATE_PLAYING** - Playing
- - **OBS_MEDIA_STATE_OPENING** - Opening
- - **OBS_MEDIA_STATE_BUFFERING** - Buffering
- - **OBS_MEDIA_STATE_PAUSED** - Paused
- - **OBS_MEDIA_STATE_STOPPED** - Stopped
- - **OBS_MEDIA_STATE_ENDED** - Ended
- - **OBS_MEDIA_STATE_ERROR** - Error
- .. member:: obs_missing_files_t *(*missing_files)(void *data)
- Called to get the missing files of the source.
- .. member:: enum gs_color_space (*obs_source_info.video_get_color_space)(void *data, size_t count, const enum gs_color_space *preferred_spaces)
- Returns the color space of the source. Assume GS_CS_SRGB if not
- implemented.
- There's an optimization an SDR source can do when rendering to HDR.
- Check if the active space is GS_CS_709_EXTENDED, and return
- GS_CS_709_EXTENDED instead of GS_CS_SRGB to avoid an redundant
- conversion. This optimization can only be done if the pixel shader
- outputs linear 709, which is why it's not performed by default.
- :return: The color space of the video
- .. _source_signal_handler_reference:
- Common Source Signals
- ---------------------
- The following signals are defined for every source type:
- **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.
- **update** (ptr source)
- Called when the source's settings have been updated.
- .. versionadded:: 29.0.0
- **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 to signal to any properties view (or other users of the source's
- obs_properties_t) that the presentable properties of the source have changed
- and should be re-queried via obs_source_properties.
- Does not mean that the source's *settings* (as configured by the user) have
- changed. For that, use the `update` signal instead.
- **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_balance** (ptr source, in out float balance)
- Called when the audio balance has changed.
- **audio_mixers** (ptr source, in out int mixers)
- Called when the audio mixers have changed.
- **audio_activate** (ptr source)
- Called when the source's audio becomes active.
- **audio_deactivate** (ptr source)
- Called when the source's audio becomes inactive.
- **filter_add** (ptr source, ptr filter)
- Called when a filter has been added to the source.
- .. versionadded:: 30.0
- **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.
- **media_started** (ptr source)
- Called when media has started.
- **media_ended** (ptr source)
- Called when media has ended.
- **media_pause** (ptr source)
- Called when media has been paused.
- **media_play** (ptr source)
- Called when media starts playing.
- **media_restart** (ptr source)
- Called when the playing of media has been restarted.
- **media_stopped** (ptr source)
- Called when the playing of media has been stopped.
- **media_next** (ptr source)
- Called when the media source switches to the next media.
- **media_previous** (ptr source)
- Called when the media source switches to the previous media.
- Source-specific Signals
- -----------------------
- **slide_changed** (int index, string path)
- Called when the source's currently displayed image changes.
- :Defined by: - Image Slide Show
- -----------------------
- **hooked** (ptr source, string title, string class, string executable)
- Called when the source successfully captures an existing window.
- :Defined by: - Window Capture (Windows)
- - Game Capture (Windows)
- - Application Audio Output Capture (Windows)
- -----------------------
- **hooked** (ptr source, string name, string class)
- Called when the source successfully captures an existing window.
- :Defined by: - Window Capture (Xcomposite)
- -----------------------
- **unhooked** (ptr source)
- Called when the source stops capturing.
- :Defined by: - Window Capture (Windows)
- - Game Capture (Windows)
- - Application Audio Output Capture (Windows)
- - Window Capture (Xcomposite)
- -----------------------
- Source-specific Procedures
- --------------------------
- The following procedures are defined for specific sources only:
- **current_index** (out int current_index)
- Returns the index of the currently displayed image in the slideshow.
- :Defined by: - Image Slide Show
- -----------------------
- **total_files** (out int total_files)
- Returns the total number of image files in the slideshow.
- :Defined by: - Image Slide Show
- -----------------------
- **get_hooked** (out bool hooked, out string title, out string class, out string executable)
- Returns whether the source is currently capturing a window and if yes, which.
- :Defined by: - Window Capture (Windows)
- - Game Capture (Windows)
- - Application audio output capture (Windows)
- -----------------------
- **get_hooked** (out bool hooked, out string name, out string class)
- Returns whether the source is currently capturing a window and if yes, which.
- :Defined by: - Window Capture (Xcomposite)
- -----------------------
- **get_metadata** (in string tag_id, out string tag_data)
- For a given metadata tag, returns the data associated with it.
- :Defined by: - VLC Video Source
- -----------------------
- **restart** ()
- Restarts the media.
- :Defined by: - Media Source
- -----------------------
- **get_duration** (out int duration)
- Returns the total duration of the media file, in nanoseconds.
- :Defined by: - Media Source
- -----------------------
- **get_nb_frames** (out int num_frames)
- Returns the total number of frames in the media file.
- :Defined by: - Media Source
- -----------------------
- **activate** (in bool active)
- Activates or deactivates the device.
- :Defined by: - Video Capture Device Source (Windows)
- -----------------------
- 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 :c:func:`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. Either way,
- release with :c:func:`obs_source_release`.
- :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:: obs_source_t *obs_source_get_ref(obs_source_t *source)
- Returns an incremented reference if still valid, otherwise returns
- *NULL*. Use :c:func:`obs_source_release` to release it.
- ---------------------
- .. function:: void obs_source_release(obs_source_t *source)
- 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 an incremented weak reference from a strong source
- reference, or an incremented strong source reference from a weak reference. If
- the source is destroyed, *obs_weak_source_get_source* will return
- *NULL*. Release with :c:func:`obs_weak_source_release()` or
- :c:func:`obs_source_release()`, respectively.
- ---------------------
- .. 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:: bool obs_source_is_hidden(obs_source_t *source)
- void obs_source_set_hidden(obs_source_t *source, bool hidden)
- Gets/sets the hidden property that determines whether it should be hidden from the user.
- Used when the source is still alive but should not be referenced.
- ---------------------
- .. 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_reset_settings(obs_source_t *source, obs_data_t *settings)
- Same as :c:func:`obs_source_update`, but clears existing settings
- first.
- ---------------------
- .. 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:: enum gs_color_space obs_source_get_color_space(obs_source_t *source, size_t count, const enum gs_color_space *preferred_spaces)
- Calls the :c:member:`obs_source_info.video_get_color_space` of the
- source to get its color space. Assumes GS_CS_SRGB if not implemented.
- Disabled filters are skipped, and async video sources can figure out
- the color space for themselves.
- :return: The color space of the source
- ---------------------
- .. function:: bool obs_source_get_texcoords_centered(obs_source_t *source)
- Hints whether or not the source will blend texels.
- :return: Whether or not the source will blend texels
- ---------------------
- .. 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:: const char *obs_source_get_uuid(const obs_source_t *source)
- :return: The UUID of the source
- .. versionadded:: 29.1
- ---------------------
- .. 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:: bool obs_source_is_scene(const obs_source_t *source)
- :return: *true* if the source is a scene
- ---------------------
- .. function:: bool obs_source_is_group(const obs_source_t *source)
- :return: *true* if the source is a group
- ---------------------
- .. function:: const char *obs_source_get_id(const obs_source_t *source)
- :return: The source's type identifier string. If the source is versioned,
- "_vN" is appended at the end, where "N" is the source's version.
- ---------------------
- .. function:: const char *obs_source_get_unversioned_id(const obs_source_t *source)
- :return: The source's unversioned type identifier string.
- ---------------------
- .. function:: signal_handler_t *obs_source_get_signal_handler(const obs_source_t *source)
- :return: The source's signal handler. Should not be manually freed,
- as its lifecycle is managed by libobs.
- 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. Should not be manually freed,
- as its lifecycle is managed by libobs.
- ---------------------
- .. 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:: enum speaker_layout obs_source_get_speaker_layout(obs_source_t *source)
- Gets the current speaker layout.
- ---------------------
- .. function:: void obs_source_set_balance_value(obs_source_t *source, float balance)
- float obs_source_get_balance_value(const obs_source_t *source)
- Sets/gets the audio balance value.
- ---------------------
- .. 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_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 (i.e. audio tracks) 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_set_monitoring_type(obs_source_t *source, enum obs_monitoring_type type)
- enum obs_monitoring_type obs_source_get_monitoring_type(obs_source_t *source)
- Sets/gets the desktop audio monitoring type.
- :param order: | OBS_MONITORING_TYPE_NONE - Do not monitor
- | OBS_MONITORING_TYPE_MONITOR_ONLY - Send to monitor device, no outputs
- | OBS_MONITORING_TYPE_MONITOR_AND_OUTPUT - Send to monitor device and outputs
- ---------------------
- .. function:: void obs_source_set_audio_active(obs_source_t *source, bool active)
- bool obs_source_audio_active(const obs_source_t *source)
- Sets/gets the audio active status (controls whether the source is shown in the mixer).
- ---------------------
- .. 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_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:: bool obs_source_active(const obs_source_t *source)
- :return: *true* if active, *false* if not. A source is only
- considered 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_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:: void obs_source_copy_single_filter(obs_source_t *dst, obs_source_t *filter)
- Copies the filter from the source to the destination. If a filter by the
- same name already exists in the destination source, the newer filter
- will be given a unique name.
- ---------------------
- .. function:: size_t obs_source_filter_count(const obs_source_t *source)
- Returns the number of filters the source has.
- ---------------------
- .. function:: obs_data_array_t *obs_source_backup_filters(obs_source_t *source)
- void obs_source_restore_filters(obs_source_t *source, obs_data_array_t *array)
- Backs up and restores the current filter list and order.
- ---------------------
- .. 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. Use :c:func:`obs_data_release()`
- to release it.
- ---------------------
- .. 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.
- ---------------------
- .. function:: enum obs_icon_type obs_source_get_icon_type(const char *id)
- Calls the :c:member:`obs_source_info.icon_type` to get the icon type.
- ---------------------
- .. function:: void obs_source_media_play_pause(obs_source_t *source, bool pause)
- Calls the :c:member:`obs_source_info.media_play_pause` to pause or play media.
- ---------------------
- .. function:: void obs_source_media_restart(obs_source_t *source)
- Calls the :c:member:`obs_source_info.media_restart` to restart the media.
- ---------------------
- .. function:: void obs_source_media_stop(obs_source_t *source)
- Calls the :c:member:`obs_source_info.media_stop` to stop the media.
- ---------------------
- .. function:: void obs_source_media_next(obs_source_t *source)
- Calls the :c:member:`obs_source_info.media_next` to go to the next media.
- ---------------------
- .. function:: void obs_source_media_previous(obs_source_t *source)
- Calls the :c:member:`obs_source_info.media_previous` to go to the previous media.
- ---------------------
- .. function:: int64_t obs_source_media_get_duration(obs_source_t *source)
- Calls the :c:member:`obs_source_info.media_get_duration` to
- get the media duration in milliseconds.
- ---------------------
- .. function:: int64_t obs_source_media_get_time(obs_source_t *source)
- void obs_source_media_set_time(obs_source_t *source, int64_t ms)
- Calls the :c:member:`obs_source_info.media_get_time` or
- :c:member:`obs_source_info.media_set_time` to get/set the
- current time (in milliseconds) of the media. Will return 0
- for non-media sources.
- ---------------------
- .. function:: enum obs_media_state obs_source_media_get_state(obs_source_t *source)
- Calls the :c:member:`obs_source_info.media_get_state` to get the state of the media.
- ---------------------
- .. function:: void obs_source_media_started(obs_source_t *source)
- Emits a **media_started** signal.
- ---------------------
- .. function:: void obs_source_media_ended(obs_source_t *source)
- Emits a **media_ended** signal.
- ---------------------
- .. function:: obs_canvas_t *obs_source_get_canvas(const obs_source_t *source)
- Get canvas this source belongs to (reference incremented)
- ---------------------
- 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 4:2:0 formats */
- VIDEO_FORMAT_I420, /* three-plane */
- VIDEO_FORMAT_NV12, /* two-plane, luma and packed chroma */
- /* packed 4:2:2 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,
- /* more packed uncompressed formats */
- VIDEO_FORMAT_BGR3,
- /* planar 4:2:2 */
- VIDEO_FORMAT_I422,
- /* planar 4:2:0 with alpha */
- VIDEO_FORMAT_I40A,
- /* planar 4:2:2 with alpha */
- VIDEO_FORMAT_I42A,
- /* planar 4:4:4 with alpha */
- VIDEO_FORMAT_YUVA,
- /* packed 4:4:4 with alpha */
- VIDEO_FORMAT_AYUV,
- /* planar 4:2:0 format, 10 bpp */
- VIDEO_FORMAT_I010, /* three-plane */
- VIDEO_FORMAT_P010, /* two-plane, luma and packed chroma */
- /* planar 4:2:2 format, 10 bpp */
- VIDEO_FORMAT_I210,
- /* planar 4:4:4 format, 12 bpp */
- VIDEO_FORMAT_I412,
- /* planar 4:4:4:4 format, 12 bpp */
- VIDEO_FORMAT_YA2L,
- /* planar 4:2:2 format, 16 bpp */
- VIDEO_FORMAT_P216, /* two-plane, luma and packed chroma */
- /* planar 4:4:4 format, 16 bpp */
- VIDEO_FORMAT_P416, /* two-plane, luma and packed chroma */
- /* packed 4:2:2 format, 10 bpp */
- VIDEO_FORMAT_V210,
- /* packed uncompressed 10-bit format */
- VIDEO_FORMAT_R10L,
- };
- 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;
- uint16_t max_luminance;
- float color_range_min[3];
- float color_range_max[3];
- bool flip;
- uint8_t flags;
- uint8_t trc; /* enum video_trc */
- };
- ---------------------
- .. function:: void obs_source_set_async_rotation(obs_source_t *source, long rotation)
- Allows the ability to set rotation (0, 90, 180, -90, 270) for an
- async video source. The rotation will be automatically applied to
- the source.
- ---------------------
- .. 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)
- Signals to any currently opened properties views (or other users of the
- source's obs_properties_t) that the source's presentable properties have
- changed and that the view should be updated.
- ---------------------
- .. 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. Does not increment the
- reference.
- Only guaranteed to be valid inside of the video_render, filter_audio,
- filter_video, filter_add, 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. Does not increment
- the reference.
- 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
- ---------------------
- .. function:: void obs_source_filter_set_index(obs_source_t *source, obs_source_t *filter, size_t index)
- Moves a filter to the specified index in the filters array.
- :param index: | The index to move the filter to.
- .. versionadded:: 30.0
- ---------------------
- .. function:: int obs_source_filter_get_index(obs_source_t *source, obs_source_t *filter)
- Gets the index of the specified filter.
- :return: Index of the filter or -1 if it is invalid/not found.
- .. versionadded:: 30.0
- 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:: bool obs_source_process_filter_begin_with_color_space(obs_source_t *filter, enum gs_color_format format, enum gs_color_space space, enum obs_allow_direct_render allow_direct)
- Similar to obs_source_process_filter_begin, but also set the active
- color space.
- :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. Use :c:func:`obs_source_release`
- to release it.
- ---------------------
- .. 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. Use :c:func:`obs_source_release` to release it.
- ---------------------
- .. 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 - Always scale the sources, but keep aspect ratio
- | OBS_TRANSITION_SCALE_STRETCH - Scale and stretch the sources to the size of the transition
- ---------------------
- .. 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)
- void obs_transition_video_render2(obs_source_t *transition, obs_transition_video_render_callback_t callback, gs_texture_t *placeholder_texture)
- 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.
- The *placeholder_texture* parameter allows a callback to receive
- a replacement that isn't the default transparent texture, including
- NULL if the caller desires.
- 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:: enum gs_color_space obs_transition_video_get_color_space(obs_source_t *transition)
- Figure out the color space that encompasses both child sources.
- The wider space wins.
- :return: The color space of the transition
- ---------------------
- .. 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/obsproject/obs-studio/blob/master/libobs/obs-source.h
|