View Source Membrane.Testing.DynamicSource (Membrane Core v1.0.0-rc0)

Testing Element for supplying data based on generator function or payloads passed through options. It is very similar to Membrane.Testing.Source but is has dynamic pad instead of static.

example-usage

Example usage

As mentioned earlier you can use this element in one of two ways, providing either a generator function or an Enumerable.t.

If you provide an Enumerable.t with payloads, then each of those payloads will be wrapped in a Membrane.Buffer and sent through :output pad.

%Source{output: [0xA1, 0xB2, 0xC3, 0xD4]}

In order to specify Membrane.Testing.Source with generator function you need to provide initial state and function that matches generator/0 type. This function should take state and demand size as its arguments and return a tuple consisting of actions that element will return during the Membrane.Element.WithOutputPads.handle_demand/5 callback and new state.

generator_function = fn state, pad, size ->
  #generate some buffers
  {actions, state + 1}
end

%Source{output: {1, generator_function}}

element-options

Element options

Passed via struct Membrane.Testing.DynamicSource.t/0

  • output

    {initial_state :: any(), generator()} | Enum.t()

    Default value: {0, &Membrane.Testing.DynamicSource.default_buf_gen/3}
    If output is an enumerable with Membrane.Payload.t/0 then buffer containing those payloads will be sent through the :output pad and followed by Membrane.Element.Action.end_of_stream/0.

    If output is a {initial_state, function} tuple then the the function will be invoked each time handle_demand is called. It is an action generator that takes two arguments. The first argument is the state that is initially set to initial_state. The second one defines the pad on which the demand has been requested. The third one defines the size of the demand. Such function should return {actions, next_state} where actions is a list of actions that will be returned from handle_demand/4 and next_state is the value that will be used for the next call.

  • stream_format

    struct()

    Default value: %Membrane.RemoteStream{content_format: nil, type: :bytestream}
    Stream format to be sent before the output.

pads

Pads

output

:output

Accepted formats:

_any
Direction::output
Availability::on_request
Flow control::manual
Demand unit:nil

Link to this section Summary

Types

t()

Struct containing options for Membrane.Testing.DynamicSource

Functions

Returns description of options available for this module

Link to this section Types

@type generator() ::
  (state :: any(), pad :: Membrane.Pad.ref(), buffers_cnt :: pos_integer() ->
     {[Membrane.Element.Action.t()], state :: any()})
@type t() :: %Membrane.Testing.DynamicSource{
  output: {initial_state :: any(), generator()} | Enum.t(),
  stream_format: struct()
}

Struct containing options for Membrane.Testing.DynamicSource

Link to this section Functions

Link to this function

default_buf_gen(generator_state, pad, size)

View Source
@spec default_buf_gen(integer(), Membrane.Pad.ref(), integer()) ::
  {[Membrane.Element.Action.t()], integer()}
@spec options() :: keyword()

Returns description of options available for this module