Canvas API Reference (obs_canvas_t)

Canvases are reference-counted objects that contain scenes and define how those are rendered. They provide a video object which can be used with encoders or raw outputs.

libobs maintains a main canvas that exists at all times and is used for the default video outputs.

type obs_canvas_t

A reference-counted canvas.

type obs_weak_canvas_t

A weak reference to a canvas.

#include <obs.h>

Canvas Signals

The following signals are defined for canvases:

remove (ptr canvas)

Called when the obs_canvas_remove() function is called on the canvas.

destroy (ptr canvas)

Called when a canvas is about to be destroyed.

video_reset (ptr canvas)

Called when the canvas’s video mix has been reset after a call to obs_reset_video() or obs_canvas_reset_video().

source_add (ptr canvas, ptr source)

Called when a source has been added to the canvas.

source_remove (ptr canvas, ptr source)

Called when a source has been removed from the canvas.

rename (ptr canvas, string new_name, string prev_name)

Called when the canvas has been renamed.

channel_change (ptr canvas, int channel, in out ptr source, ptr prev_source)

Called when a channel source has been changed.

Canvas Flags

Canvases can have different behaviors, these can be controlled via the flags parameter when creating a canvas.

Flags may be 0 or a bitwise OR combination of the following values:

  • MAIN - Main canvas, cannot be renamed or reset, cannot be set by user

  • ACTIVATE - Canvas’s sources will become active when they are visible

  • MIX_AUDIO - Audio from channels in this canvas will be mixed into the audio output

  • SCENE_REF - Canvas will hold references for scene sources

  • EPHEMERAL - Indicates this canvas is not supposed to be saved

Additionally, the following preset combinations of flags are defined:

  • PROGRAM which equals ACTIVATE | MIX_AUDIO | SCENE_REF

  • PREVIEW which equals EPHEMERAL

  • DEVICE which equals ACTIVATE | EPHEMERAL

General Canvas Functions

obs_canvas_t *obs_get_main_canvas()

Get a strong reference to the main OBS canvas.


obs_canvas_t *obs_canvas_create(const char *name, struct obs_video_info *ovi, uint32_t flags)

Creates a new canvas.

Parameters:
  • name – Name, will be deduplicated if necessary

  • ovi – Video configuration to use for this canvas’s video output

  • flags – Canvas flags

Returns:

Canvas object


obs_canvas_t *obs_canvas_create_private(const char *name, struct obs_video_info *ovi, uint32_t flags)

Creates a new private canvas.

Parameters:
  • name – Name, will not be deduplicated

  • ovi – Video configuration to use for this canvas’s video output

  • flags – Canvas flags

Returns:

Canvas object


void obs_canvas_remove(obs_canvas_t *canvas)

Signal that references to canvas should be released and mark the canvas as removed.


bool obs_canvas_removed(obs_canvas_t *canvas)

Returns if a canvas is marked as removed (i.e., should no longer be used).


void obs_canvas_set_name(obs_canvas_t *canvas, const char *name)

Set canvas name


const char *obs_canvas_get_name(const obs_canvas_t *canvas)

Get canvas name


const char *obs_canvas_get_uuid(const obs_canvas_t *canvas)

Get canvas UUID


uint32_t obs_canvas_get_flags(const obs_canvas_t *canvas)

Gets flags set on a canvas


Saving/Loading Functions

obs_data_t *obs_save_canvas(obs_canvas_t *source)

Saves a canvas to settings data


obs_canvas_t *obs_load_canvas(obs_data_t *data)

Loads a canvas from settings data


Reference Counting Functions

obs_canvas_t *obs_canvas_get_ref(obs_canvas_t *canvas)

Add strong reference to a canvas


void obs_canvas_release(obs_canvas_t *canvas)

Release strong reference


void obs_weak_canvas_addref(obs_weak_canvas_t *weak)

Add weak reference


void obs_weak_canvas_release(obs_weak_canvas_t *weak)

Release weak reference


obs_weak_canvas_t *obs_canvas_get_weak_canvas(obs_canvas_t *canvas)

Get weak reference from strong reference


obs_canvas_t *obs_weak_canvas_get_canvas(obs_weak_canvas_t *weak)

Get strong reference from weak reference


Canvas Channel Functions

void obs_canvas_set_channel(obs_canvas_t *canvas, uint32_t channel, obs_source_t *source)

Sets the source to be used for a canvas channel.


obs_source_t *obs_canvas_get_channel(obs_canvas_t *canvas, uint32_t channel)

Gets the source currently in use for a canvas channel.


Canvas Source List Functions

obs_scene_t *obs_canvas_scene_create(obs_canvas_t *canvas, const char *name)

Create scene attached to a canvas.


void obs_canvas_scene_remove(obs_scene_t *scene)

Remove a scene from a canvas.


void obs_canvas_move_scene(obs_scene_t *scene, obs_canvas_t *dst)

Move scene to another canvas, detaching it from the previous one and deduplicating the name if needed.


void obs_canvas_enum_scenes(obs_canvas_t *canvas, bool (*enum_proc)(void*, obs_source_t*), void *param)

Enumerates scenes belonging to a canvas.

Callback function returns true to continue enumeration, or false to end enumeration.


obs_source_t *obs_canvas_get_source_by_name(const char *name)

Gets a canvas source by its name.

Increments the source reference counter, use obs_source_release() to release it when complete.


obs_scene_t *obs_canvas_get_scene_by_name(const char *name)

Gets a canvas scene by its name.

Increments the source reference counter, use obs_scene_release() to release it when complete.


Canvas Video Functions

bool obs_canvas_reset_video(obs_canvas_t *canvas, struct obs_video_info *ovi)

Reset a canvas’s video configuration.

Note that the frame rate property is ignored and the global rendering frame rate is used instead.


bool obs_canvas_has_video(obs_canvas_t *canvas)

Returns true if the canvas video is configured.


video_t *obs_canvas_get_video(const obs_canvas_t *canvas)

Get canvas video output


bool obs_canvas_get_video_info(const obs_canvas_t *canvas, struct obs_video_info *ovi)

Get canvas video info (if any)


void obs_canvas_render(obs_canvas_t *canvas)

Render the canvas’s view. Must be called on the graphics thread.