Packages
membrane_core
0.3.0
1.3.4
1.3.3
1.3.2
1.3.1
1.3.0
1.2.7
1.2.6
1.2.5
retired
1.2.4
1.2.3
1.2.2
1.2.1
1.2.0
1.2.0-rc1
1.1.2
1.1.1
1.1.0
1.1.0-rc1
1.1.0-rc0
1.0.1
1.0.0
1.0.0-rc1
1.0.0-rc0
0.12.9
0.12.8
0.12.7
0.12.6
0.12.5
0.12.4
0.12.3
0.12.2
0.12.1
0.12.0
retired
0.11.5
0.11.4
0.11.3
0.11.2
0.11.1
0.11.0
0.10.2
0.10.1
0.10.0
0.9.0
0.8.2
0.8.1
0.8.0
0.7.0
0.6.1
0.6.0
0.5.3
0.5.2
0.5.1
0.5.0
0.4.3
0.4.2
0.4.1
0.4.0
0.3.2
0.3.1
0.3.0
0.2.2
0.2.1
0.2.0
0.1.1
0.1.0
Membrane Multimedia Framework (Core)
Current section
Files
Jump to
Current section
Files
lib/membrane/testing/data_source.ex
defmodule Membrane.Testing.DataSource do
@moduledoc """
Testing Element for supplying data from list passed through options.
"""
use Membrane.Element.Base.Source
alias Membrane.{Buffer, Event}
def_output_pad :output, caps: :any
def_options data: [
type: :payloads,
spec: [Membrane.Payload.t()],
description: "List of payloads that will be sent through `:output` pad."
]
@impl true
def handle_init(%__MODULE__{data: data}) do
{:ok, %{data: data}}
end
@impl true
def handle_demand(:output, size, :buffers, _context, %{data: data} = state) do
case Enum.split(data, size) do
{[], []} ->
{{:ok, event: {:output, %Event.EndOfStream{}}}, state}
{non_empty, rest} when is_list(non_empty) ->
{{:ok, buffer: {:output, bufferize(data)}}, %{data: rest}}
end
end
defp bufferize(data), do: Enum.map(data, &%Buffer{payload: &1})
end