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/child.ex
defmodule Membrane.Child do
@moduledoc """
Module that keeps track of types used by both elements and bins
"""
import Membrane.Element, only: [is_element_name?: 1]
import Membrane.Bin, only: [is_bin_name?: 1]
alias Membrane.{Bin, Element}
@default_ref_options [group: [default: nil]]
@type name :: Element.name() | Bin.name()
@type group() :: any()
@type ref :: {Membrane.Child, group(), name()} | name()
@type options :: Element.options() | Bin.options()
defguard is_child_name?(arg) when is_element_name?(arg) or is_bin_name?(arg)
@type child_ref_options :: [group: group()]
@doc """
Returns a reference to a child.
"""
@spec ref(name(), child_ref_options()) :: ref()
def ref(name, options \\ []) do
validate_name!(name)
{:ok, options} = Bunch.Config.parse(options, @default_ref_options)
validate_name!(options.group)
if options.group != nil,
do: {Membrane.Child, options.group, name},
else: name
end
defp validate_name!(name) do
if is_tuple(name) and elem(name, 0) == Membrane.Child do
raise "Improper name: #{inspect(name)}. The name cannot match the reserved internal Membrane's pattern."
end
:ok
end
end