View Source Membrane.Bin.Action (Membrane Core v0.10.2)
This module contains type specifications of actions that can be returned from bin callbacks.
Returning actions is a way of bin interaction with
other components and parts of framework. Each action may be returned by any
callback (except for Membrane.Bin.handle_shutdown/2
, as it
does not support returning any actions) unless explicitly stated otherwise.
Link to this section Summary
Types
Action that sends a message to a child identified by name.
Action that stops, unlinks and removes specified child/children from the bin.
Action that instantiates children and links them according to Membrane.ParentSpec
.
Starts a timer that will invoke Membrane.Bin.handle_tick/3
callback
every interval
according to the given clock
.
Stops a timer started with start_timer_t/0
action.
Type describing actions that can be returned from bin callbacks.
Changes interval of a timer started with start_timer_t/0
.
Link to this section Types
@type forward_t() :: {:forward, {Membrane.Child.name_t(), any()} | [{Membrane.Child.name_t(), any()}]}
Action that sends a message to a child identified by name.
@type remove_child_t() :: {:remove_child, Membrane.Child.name_t() | [Membrane.Child.name_t()]}
Action that stops, unlinks and removes specified child/children from the bin.
@type spec_t() :: {:spec, Membrane.ParentSpec.t()}
Action that instantiates children and links them according to Membrane.ParentSpec
.
Children's playback state is changed to the current bin state.
c:Membrane.Parent.handle_spec_started/3
callback is executed once it happens.
@type start_timer_t() :: {:start_timer, {timer_id :: any(), interval :: Ratio.t() | non_neg_integer() | :no_interval} | {timer_id :: any(), interval :: Ratio.t() | non_neg_integer() | :no_interval, clock :: Membrane.Clock.t()}}
Starts a timer that will invoke Membrane.Bin.handle_tick/3
callback
every interval
according to the given clock
.
The timer's id
is passed to the Membrane.Bin.handle_tick/3
callback and can be used for changing its interval via timer_interval_t/0
or stopping it via stop_timer_t/0
.
If interval
is set to :no_interval
, the timer won't issue any ticks until
the interval is set with timer_interval_t/0
action.
If no clock
is passed, parent clock is chosen.
Timers use Process.send_after/3
under the hood.
@type stop_timer_t() :: {:stop_timer, timer_id :: any()}
Stops a timer started with start_timer_t/0
action.
This action is atomic: stopping timer guarantees that no ticks will arrive from it.
@type t() :: forward_t() | spec_t() | remove_child_t() | start_timer_t() | timer_interval_t() | stop_timer_t()
Type describing actions that can be returned from bin callbacks.
Returning actions is a way of bin interaction with its children and other parts of framework.
@type timer_interval_t() :: {:timer_interval, {timer_id :: any(), interval :: Ratio.t() | non_neg_integer() | :no_interval}}
Changes interval of a timer started with start_timer_t/0
.
Permitted only from Membrane.Bin.handle_tick/3
, unless the interval
was previously set to :no_interval
.
If the interval
is :no_interval
, the timer won't issue any ticks until
another timer_interval_t/0
action. Otherwise, the timer will issue ticks every
new interval
. The next tick after interval change is scheduled at
new_interval + previous_time
, where previous_time is the time of the latest
tick or the time of returning start_timer_t/0
action if no tick has been
sent yet. Note that if current_time - previous_time > new_interval
, a burst
of div(current_time - previous_time, new_interval)
ticks is issued immediately.