Packages
membrane_core
1.0.0-rc0
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 is_pipeline?(state) :: boolean()
def is_pipeline?(%Membrane.Core.Pipeline.State{}), do: true
def is_pipeline?(_state), do: false
@spec is_element?(state) :: boolean()
def is_element?(%Membrane.Core.Element.State{}), do: true
def is_element?(_state), do: false
@spec is_bin?(state) :: boolean()
def is_bin?(%Membrane.Core.Bin.State{}), do: true
def is_bin?(_state), do: false
@spec is_child?(state) :: boolean()
def is_child?(state), do: is_element?(state) or is_bin?(state)
@spec is_parent?(state) :: boolean()
def is_parent?(state), do: is_pipeline?(state) or is_bin?(state)
end