Packages
membrane_core
0.8.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/element/with_input_pads.ex
defmodule Membrane.Element.WithInputPads do
@moduledoc """
Module defining behaviour for sink and filter elements.
When used declares behaviour implementation, provides default callback definitions
and imports macros.
For more information on implementing elements, see `Membrane.Element.Base`.
"""
alias Membrane.{Element, Pad}
alias Membrane.Core.Child.PadsSpecs
alias Membrane.Element.CallbackContext
@doc """
Callback invoked when Element is receiving information about new caps for
given pad.
In filters those caps are forwarded through all output pads by default.
"""
@callback handle_caps(
pad :: Pad.ref_t(),
caps :: Membrane.Caps.t(),
context :: CallbackContext.Caps.t(),
state :: Element.state_t()
) :: Membrane.Element.Base.callback_return_t()
@optional_callbacks handle_caps: 4
@doc """
Callback invoked when element receives `Membrane.Event.StartOfStream` event.
"""
@callback handle_start_of_stream(
pad :: Pad.ref_t(),
context :: CallbackContext.StreamManagement.t(),
state :: Element.state_t()
) :: Membrane.Element.Base.callback_return_t()
@doc """
Callback invoked when the previous element has finished processing via the pad,
and it cannot be used anymore.
"""
@callback handle_end_of_stream(
pad :: Pad.ref_t(),
context :: CallbackContext.StreamManagement.t(),
state :: Element.state_t()
) :: Membrane.Element.Base.callback_return_t()
@doc """
Macro that defines multiple input pads for the element.
Deprecated in favor of `def_input_pad/2`
"""
@deprecated "Use def_input_pad/2 for each pad instead"
defmacro def_input_pads(pads) do
PadsSpecs.def_pads(pads, :input, :element)
end
@doc PadsSpecs.def_pad_docs(:input, :element)
defmacro def_input_pad(name, spec) do
PadsSpecs.def_pad(name, :input, spec, :element)
end
defmacro __using__(_) do
quote location: :keep do
@behaviour unquote(__MODULE__)
import unquote(__MODULE__), only: [def_input_pads: 1, def_input_pad: 2]
@impl true
def handle_caps(_pad, _caps, _context, state), do: {:ok, state}
@impl true
def handle_start_of_stream(pad, _context, state), do: {:ok, state}
@impl true
def handle_end_of_stream(pad, _context, state), do: {:ok, state}
defoverridable handle_caps: 4,
handle_start_of_stream: 3,
handle_end_of_stream: 3
end
end
end