Packages
membrane_core
0.4.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/playbackable.ex
defprotocol Membrane.Core.Playbackable do
@moduledoc false
# Protocol that has to be adopted by modules that use `Membrane.Core.Playback`.
#
# Modules that adopt `Membrane.Core.PlaybackHandler` behaviour have to store their
# playback state and controlling pid. `Membrane.Core.Playbackable` is used as
# an abstraction that allows to access those values.
alias Membrane.Core.Playback
@spec get_playback(__MODULE__.t()) :: Playback.t()
def get_playback(playbackable)
@spec set_playback(__MODULE__.t(), Playback.t()) :: __MODULE__.t()
def set_playback(playbackable, playback)
@spec update_playback(__MODULE__.t(), (Playback.t() -> Playback.t())) :: __MODULE__.t()
def update_playback(playbackable, playback)
@spec get_and_update_playback(__MODULE__.t(), (Playback.t() -> {ret, Playback.t()})) ::
{ret, __MODULE__.t()}
when ret: Playback.t() | any
def get_and_update_playback(playbackable, update_f)
@spec get_controlling_pid(__MODULE__.t()) :: pid | nil
def get_controlling_pid(playbackable)
end
defmodule Membrane.Core.Playbackable.Default do
@moduledoc false
# The default implementation for `Membrane.Core.Playbackable`.
# Assumes that `playbackable` is a map and stores `playback` and
# `controlling_pid` inside it.
defmacro __using__(_) do
quote location: :keep do
def get_playback(%{playback: playback}), do: playback
def set_playback(playbackable, playback), do: %{playbackable | playback: playback}
def update_playback(playbackable, f), do: playbackable |> Map.update!(:playback, f)
def get_and_update_playback(playbackable, f),
do: playbackable |> Map.get_and_update!(:playback, f)
def get_controlling_pid(playbackable), do: nil
defoverridable get_playback: 1,
set_playback: 2,
update_playback: 2,
get_and_update_playback: 2,
get_controlling_pid: 1
end
end
end
defimpl Membrane.Core.Playbackable, for: Any do
use Membrane.Core.Playbackable.Default
end