Packages
vtc
0.1.1
0.17.5
0.17.4
0.17.3
0.17.2
0.17.1
0.17.0
0.16.9
0.16.8
0.16.7
0.16.6
0.16.5
0.16.4
0.16.2
0.16.1
0.16.0
0.15.4
0.15.3
0.15.2
0.15.1
0.15.0
0.14.5
0.14.4
0.14.3
0.14.2
0.14.1
0.14.0
0.13.15
0.13.14
0.13.13
0.13.12
0.13.11
0.13.10
0.13.9
0.13.8
0.13.7
0.13.6
0.13.5
0.13.4
0.13.3
0.13.2
0.13.1
0.13.0
0.12.1
0.12.0
0.11.1
0.11.0
0.10.10
0.10.9
0.10.8
0.10.7
0.10.6
0.10.5
0.10.4
0.10.3
0.10.2
0.10.1
0.10.0
0.9.2
0.9.1
0.9.0
0.8.4
0.8.3
0.8.2
0.8.1
0.8.0
0.7.3
0.7.2
0.7.1
0.7.0
0.6.1
0.6.0
0.5.3
0.5.2
0.5.1
0.4.0
0.3.9
0.3.8
0.3.7
0.3.6
0.3.5
0.3.4
0.3.3
0.3.2
0.3.1
0.3.0
0.2.6
0.2.5
0.2.4
0.2.3
0.2.2
0.2.1
0.2.0
0.1.9
0.1.8
0.1.7
0.1.6
0.1.5
0.1.4
0.1.3
0.1.2
0.1.1
A SMPTE timecode library for Elixir
Current section
Files
Jump to
Current section
Files
lib/timecode_sources.ex
defmodule Vtc.Sources do
use Ratio
@type seconds_result :: {:ok, Ratio.t() | integer} | {:error, Vtc.Timecode.ParseError.t()}
defprotocol Seconds do
@spec seconds(t, Vtc.Framerate.t()) :: Vtc.Sources.seconds_result()
def seconds(value, rate)
end
defimpl Seconds, for: [Ratio, Integer] do
@spec seconds(Ratio.t() | integer, Vtc.Framerate.t()) :: Vtc.Sources.seconds_result()
def seconds(value, rate), do: Private.from_seconds_core(value, rate)
end
defimpl Seconds, for: Float do
@spec seconds(float, Vtc.Framerate.t()) :: Vtc.Sources.seconds_result()
def seconds(value, rate), do: Seconds.seconds(Ratio.new(value, 1), rate)
end
@type frames_result :: {:ok, integer} | {:error, Vtc.Timecode.ParseError.t()}
defprotocol Frames do
@spec frames(t, Vtc.Framerate.t()) :: Vtc.Sources.frames_result()
def frames(value, rate)
end
defimpl Frames, for: Integer do
@spec frames(integer, Vtc.Framerate.t()) :: Vtc.Sources.frames_result()
def frames(value, _rate), do: {:ok, value}
end
defimpl Frames, for: [String, BitString] do
@spec frames(String.t() | Bitstring, Vtc.Framerate.t()) :: Vtc.Sources.frames_result()
def frames(value, rate), do: Private.parse_tc_string(value, rate)
end
end