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.

t()

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