Packages
membrane_core
1.3.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/element/state.ex
defmodule Membrane.Core.Element.State do
@moduledoc false
# Structure representing state of an Core.Element. It is a part of the private API.
# It does not represent state of elements you construct, it's a state used
# internally in Membrane.
use Bunch.Access
alias Membrane.{Clock, Element, Pad, Sync}
alias Membrane.Core.Child.PadModel
alias Membrane.Core.Element.DiamondDetectionController.DiamondDatectionState
alias Membrane.Core.Element.EffectiveFlowController
alias Membrane.Core.Timer
@type t :: %__MODULE__{
module: module(),
name: Element.name(),
parent_pid: pid(),
playback: Membrane.Playback.t(),
type: Element.type(),
internal_state: Element.state() | nil,
pads_info: PadModel.pads_info() | nil,
synchronization: %{
timers: %{Timer.id() => Timer.t()},
parent_clock: Clock.t(),
latency: Membrane.Time.non_neg(),
stream_sync: Sync.t(),
clock: Clock.t() | nil
},
delayed_demands: MapSet.t({Pad.ref(), :supply | :redemand}),
effective_flow_control: EffectiveFlowController.effective_flow_control(),
initialized?: boolean(),
terminating?: boolean(),
setup_incomplete_returned?: boolean(),
delay_demands?: boolean(),
popping_auto_flow_queue?: boolean(),
stalker: Membrane.Core.Stalker.t(),
resource_guard: Membrane.ResourceGuard.t(),
subprocess_supervisor: pid(),
handle_demand_loop_counter: non_neg_integer(),
pads_to_snapshot: MapSet.t(),
playback_queue: Membrane.Core.Element.PlaybackQueue.t(),
diamond_detection_state: DiamondDatectionState.t(),
pads_data: PadModel.pads_data() | nil,
satisfied_auto_output_pads: MapSet.t(),
awaiting_auto_input_pads: MapSet.t(),
auto_input_pads: [Pad.ref()],
resume_delayed_demands_loop_in_mailbox?: boolean()
}
# READ THIS BEFORE ADDING NEW FIELD!!!
# Fields of this structure will be inspected in the same order, in which they occur in the
# list passed to `defstruct`. Take a look at lib/membrane/core/inspect.ex to get more info.
# If you want to add a new field to the state, place it at the spot corresponding to its
# importance and possibly near other related fields. It is suggested, to keep `:pads_data`
# as the last item in the list, because sometimes it is so big, that everything after it
# might be truncated during the inspection.
defstruct module: nil,
name: nil,
parent_pid: nil,
playback: :stopped,
type: nil,
internal_state: nil,
pads_info: %{},
synchronization: nil,
delayed_demands: MapSet.new(),
effective_flow_control: :push,
initialized?: false,
terminating?: false,
setup_incomplete_returned?: false,
delay_demands?: false,
popping_auto_flow_queue?: false,
stalker: nil,
resource_guard: nil,
subprocess_supervisor: nil,
handle_demand_loop_counter: 0,
pads_to_snapshot: MapSet.new(),
playback_queue: [],
diamond_detection_state: %DiamondDatectionState{},
pads_data: %{},
satisfied_auto_output_pads: MapSet.new(),
awaiting_auto_input_pads: MapSet.new(),
auto_input_pads: [],
resume_delayed_demands_loop_in_mailbox?: false
end