Packages
membrane_core
0.5.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/bin/state.ex
defmodule Membrane.Core.Bin.State do
@moduledoc false
# Structure representing state of a bin. It is a part of the private API.
# It does not represent state of bins you construct, it's a state used
# internally in Membrane.
alias Membrane.{Child, Clock, Parent, Sync}
alias Membrane.Core
alias Core.{Playback, Playbackable, Timer}
alias Core.Child.PadModel
alias Core.Bin.LinkingBuffer
alias Core.Parent.ChildrenModel
alias __MODULE__, as: ThisModule
use Bunch
use Bunch.Access
@type t :: %__MODULE__{
internal_state: Parent.internal_state_t() | nil,
playback: Playback.t(),
module: module,
children: ChildrenModel.children_t(),
pending_pids: MapSet.t(pid),
terminating?: boolean,
name: Membrane.Bin.name_t() | nil,
bin_options: any | nil,
pads: PadModel.pads_t() | nil,
watcher: pid | nil,
controlling_pid: pid | nil,
linking_buffer: LinkingBuffer.t(),
clock_provider: %{
clock: Clock.t() | nil,
provider: Child.name_t() | nil,
choice: :auto | :manual
},
clock_proxy: Clock.t(),
synchronization: %{
timers: %{Timer.id_t() => Timer.t()},
parent_clock: Clock.t(),
latency: non_neg_integer(),
stream_sync: Sync.t(),
clock: Clock.t() | nil
}
}
@type internal_state_t :: map | struct
@enforce_keys [:module, :clock_proxy]
defstruct @enforce_keys ++
[
internal_state: nil,
playback: %Playback{},
children: %{},
pending_pids: MapSet.new(),
terminating?: false,
name: nil,
bin_options: nil,
pads: nil,
watcher: nil,
controlling_pid: nil,
linking_buffer: LinkingBuffer.new(),
clock_provider: %{clock: nil, provider: nil, choice: :auto},
synchronization: %{}
]
defimpl Playbackable, for: __MODULE__ do
use Playbackable.Default
def get_controlling_pid(%ThisModule{controlling_pid: pid}), do: pid
end
end