defmodule Membrane.RTP.PayloadFormatResolver do @moduledoc """ Wrapper over `Membrane.RTP.PayloadFormat` that returns payloaders and depayloaders, or an error if they can't be resolved. """ alias Membrane.RTP alias Membrane.RTP.PayloadFormat @type encoding_mapper_t :: %{RTP.encoding_name() => module()} @doc """ Tries to resolve a depayloader based on given encoding. """ @spec depayloader(RTP.encoding_name()) :: {:ok, module()} | :error def depayloader(encoding) do case PayloadFormat.get(encoding).depayloader do nil -> :error depayloader -> {:ok, depayloader} end end @doc """ Tries to resolve a payloader based on given encoding. """ @spec payloader(RTP.encoding_name()) :: {:ok, module()} | :error def payloader(encoding) do case PayloadFormat.get(encoding).payloader do nil -> :error payloader -> {:ok, payloader} end end @spec keyframe_detector(atom()) :: {:ok, (binary() -> boolean())} | :error def keyframe_detector(encoding) do case PayloadFormat.get(encoding).keyframe_detector do nil -> :error keyframe_detector -> {:ok, keyframe_detector} end end @spec frame_detector(atom()) :: {:ok, (binary() -> boolean())} | :error def frame_detector(encoding) do case PayloadFormat.get(encoding).frame_detector do nil -> :error frame_detector -> {:ok, frame_detector} end end end