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/core/component.ex
defmodule Membrane.Core.Component do
@moduledoc false
@type state_t ::
Membrane.Core.Pipeline.State.t()
| Membrane.Core.Bin.State.t()
| Membrane.Core.Element.State.t()
@spec action_handler(state_t) :: module
[Pipeline, Bin, Element]
|> Enum.map(fn component ->
def action_handler(%unquote(Module.concat([Membrane.Core, component, State])){}),
do: unquote(Module.concat([Membrane.Core, component, ActionHandler]))
end)
defmacro callback_context_generator(restrict, module, state, args \\ []) do
module = Macro.expand(module, __ENV__)
restrict =
case restrict do
:parent -> [Pipeline, Bin]
:child -> [Bin, Element]
:any -> [Pipeline, Bin, Element]
restrict -> restrict
end
requires =
restrict
|> Enum.map(fn component ->
quote do
require unquote(context(component, module))
end
end)
clauses =
restrict
|> Enum.flat_map(fn component ->
quote do
%unquote(state(component)){} ->
&unquote(context(component, module)).from_state(&1, unquote(args))
end
end)
quote do
unquote_splicing(requires)
unquote({:case, [], [state, [do: clauses]]})
end
end
defp context(component, module),
do: Module.concat([Membrane, component, CallbackContext, module])
defp state(component), do: Module.concat([Membrane.Core, component, State])
end