Packages
membrane_core
1.0.0-rc1
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.ex
defmodule Membrane.Element do
@moduledoc """
Module containing types and functions for operating on elements.
For behaviours for elements check `Membrane.Source`, `Membrane.Filter`,
`Membrane.Endpoint` and `Membrane.Sink`.
## Behaviours
Element-specific behaviours are specified in modules:
- `Membrane.Element.WithOutputPads` - behaviour common to sources,
filters and endpoints
- `Membrane.Element.WithInputPads` - behaviour common to sinks,
filters and endpoints
- Base modules (`Membrane.Source`, `Membrane.Filter`, `Membrane.Endpoint`,
`Membrane.Sink`) - behaviours specific to each element type.
## Callbacks
Modules listed above provide specifications of callbacks that define elements
lifecycle. All of these callbacks have names with the `handle_` prefix.
They are used to define reaction to certain events that happen during runtime,
and indicate what actions framework should undertake as a result, besides
executing element-specific code.
For actions that can be returned by each callback, see `Membrane.Element.Action`
module.
"""
@typedoc """
Defines options that can be received in `c:Membrane.Element.Base.handle_init/2`
callback.
"""
@type options :: struct | nil
@typedoc """
Type that defines an element name by which it is identified.
"""
@type name :: tuple() | atom()
@typedoc """
Defines possible element types:
- source, producing buffers
- filter, processing buffers
- endpoint, producing and consuming buffers
- sink, consuming buffers
"""
@type type :: :source | :filter | :endpoint | :sink
@typedoc """
Type of user-managed state of element.
"""
@type state :: any()
@doc """
Checks whether module is an element.
"""
@spec element?(module) :: boolean
def element?(module) do
module |> Bunch.Module.check_behaviour(:membrane_element?)
end
defguard is_element_name?(arg) when is_atom(arg) or is_tuple(arg)
end