Packages
membrane_core
1.1.0
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/lifecycle_controller.ex
defmodule Membrane.Core.LifecycleController do
@moduledoc false
alias Membrane.Core.{Component, Message, Parent}
alias Membrane.SetupError
require Membrane.Core.Message
require Membrane.Logger
@type setup_operation :: :incomplete | :complete
@spec handle_setup_operation(setup_operation(), Component.state()) ::
Component.state()
def handle_setup_operation(operation, state) do
:ok = assert_operation_allowed!(operation, state.setup_incomplete?)
cond do
operation == :incomplete ->
Membrane.Logger.debug("Component deferred initialization")
%{state | setup_incomplete?: true}
Component.is_pipeline?(state) ->
# complete_setup/1 will be called in Membrane.Core.Pipeline.ActionHandler.handle_end_of_actions/1
%{state | awaiting_setup_completition?: true}
Component.is_child?(state) ->
complete_setup(state)
end
end
@spec complete_setup(Component.state()) :: Component.state()
def complete_setup(state) do
state = %{state | initialized?: true, setup_incomplete?: false}
Membrane.Logger.debug("Component initialized")
cond do
Component.is_pipeline?(state) ->
Parent.LifecycleController.handle_playing(state)
Component.is_child?(state) ->
Message.send(state.parent_pid, :initialized, state.name)
state
end
end
@spec assert_operation_allowed!(setup_operation(), boolean()) :: :ok | no_return()
defp assert_operation_allowed!(:incomplete, true) do
raise SetupError, """
Action {:setup, :incomplete} was returned more than once
"""
end
defp assert_operation_allowed!(:complete, false) do
raise SetupError, """
Action {:setup, :complete} was returned, but setup is already completed
"""
end
defp assert_operation_allowed!(operation, _status)
when operation not in [:incomplete, :complete] do
raise SetupError, """
Action {:setup, #{inspect(operation)}} was returned, but second element in the tuple must
be :complete or :incomplete
"""
end
defp assert_operation_allowed!(_operation, _status), do: :ok
end