Packages
membrane_core
0.5.2
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/sink.ex
defmodule Membrane.Testing.Sink do
@moduledoc """
Sink Element that notifies the pipeline about buffers and events it receives.
By default `Sink` will demand buffers automatically, but you can override that
behaviour by using `autodemand` option. If set to false no automatic demands
shall be made. Demands can be then triggered by sending `{:make_demand, size}`
message.
This element can be used in conjunction with `Membrane.Testing.Pipeline` to
enable asserting on buffers and events it receives.
alias Membrane.Testing
{:ok, pid} = Testing.Pipeline.start_link(Testing.Pipeline.Options{
elements: [
...,
sink: %Testing.Sink{}
]
})
Asserting that `Membrane.Testing.Sink` element processed a buffer that matches
a specific pattern can be achieved using
`Membrane.Testing.Assertions.assert_sink_buffer/3`.
assert_sink_buffer(pid, :sink ,%Membrane.Buffer{payload: 255})
"""
use Membrane.Sink
def_input_pad :input,
demand_unit: :buffers,
caps: :any
def_options autodemand: [
type: :boolean,
default: true,
description: """
If true element will automatically make demands.
If it is set to false demand has to be triggered manually by sending `:make_demand` message.
"""
]
@impl true
def handle_init(opts) do
{:ok, opts}
end
@impl true
def handle_prepared_to_playing(_context, %{autodemand: true} = state),
do: {{:ok, demand: :input}, state}
def handle_prepared_to_playing(_context, state), do: {:ok, state}
@impl true
def handle_event(:input, event, _context, state) do
{{:ok, notify: {:event, event}}, state}
end
@impl true
def handle_start_of_stream(pad, _ctx, state),
do: {{:ok, notify: {:start_of_stream, pad}}, state}
@impl true
def handle_end_of_stream(pad, _ctx, state),
do: {{:ok, notify: {:end_of_stream, pad}}, state}
@impl true
def handle_caps(pad, caps, _context, state),
do: {{:ok, notify: {:caps, pad, caps}}, state}
@impl true
def handle_other({:make_demand, size}, _ctx, %{autodemand: false} = state) do
{{:ok, demand: {:input, size}}, state}
end
@impl true
def handle_write(:input, buf, _ctx, state) do
case state do
%{autodemand: false} -> {{:ok, notify: {:buffer, buf}}, state}
%{autodemand: true} -> {{:ok, demand: :input, notify: {:buffer, buf}}, state}
end
end
end