Packages
membrane_core
1.2.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/core/component.ex
defmodule Membrane.Core.Component do
@moduledoc false
@type state ::
Membrane.Core.Pipeline.State.t()
| Membrane.Core.Bin.State.t()
| Membrane.Core.Element.State.t()
@type callback_context_optional_fields ::
Membrane.Core.Element.CallbackContext.optional_fields()
| Membrane.Core.Bin.CallbackContext.optional_fields()
| Membrane.Core.Pipeline.CallbackContext.optional_fields()
@type callback_context ::
Membrane.Element.CallbackContext.t()
| Membrane.Bin.CallbackContext.t()
| Membrane.Pipeline.CallbackContext.t()
@spec action_handler(state) :: 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)
@spec context_from_state(state(), callback_context_optional_fields()) ::
callback_context()
def context_from_state(state, args \\ []) do
alias Membrane.Core.{Bin, Element, Pipeline}
callback_context_module =
case state do
%Element.State{} -> Element.CallbackContext
%Bin.State{} -> Bin.CallbackContext
%Pipeline.State{} -> Pipeline.CallbackContext
end
callback_context_module.from_state(state, args)
end
@spec pipeline?(state) :: boolean()
def pipeline?(%Membrane.Core.Pipeline.State{}), do: true
def pipeline?(_state), do: false
@spec element?(state) :: boolean()
def element?(%Membrane.Core.Element.State{}), do: true
def element?(_state), do: false
@spec bin?(state) :: boolean()
def bin?(%Membrane.Core.Bin.State{}), do: true
def bin?(_state), do: false
@spec child?(state) :: boolean()
def child?(state), do: element?(state) or bin?(state)
@spec parent?(state) :: boolean()
def parent?(state), do: pipeline?(state) or bin?(state)
end