Packages
image
0.22.1
0.72.0
0.71.0
0.70.0
0.69.0
0.68.0
0.67.0
0.67.0-dev
retired
0.66.0
0.65.0
0.64.0
0.63.0
0.62.1
0.62.0
0.61.1
0.61.0
0.60.0
0.59.3
0.59.2
0.59.1
0.59.0
0.58.0
0.57.0
0.56.1
0.56.0
0.55.2
0.55.1
retired
0.55.0
0.54.4
0.54.3
0.54.2
0.54.1
0.54.0
0.53.0
0.52.3
0.52.2
0.52.1
0.52.0
retired
0.51.0
0.50.0
0.49.0
0.48.1
0.48.0
0.47.0
0.46.0
0.45.0
0.44.0
0.43.2
0.43.1
0.43.0
0.42.0
0.41.0
0.40.0
0.39.3
0.39.2
0.39.1
0.39.0
0.38.4
0.38.3
0.38.2
0.38.1
0.38.0
0.37.0
0.36.2
0.36.1
0.36.0
0.35.0
0.34.0
0.33.0
0.32.0
0.31.1
0.31.0
0.30.0
0.29.0
0.28.2
0.28.1
0.28.0
0.27.0
0.26.0
0.25.1
0.25.0
0.24.1
0.24.0
0.23.2
0.23.1
0.23.0
0.22.1
0.22.0
0.21.0
0.20.0
retired
0.19.0
0.18.1
0.18.0
0.17.0
0.16.0
0.15.0
0.14.4
0.14.2
0.14.1
0.14.0
retired
0.13.1
0.13.0
0.12.0
0.11.0
0.10.0
0.10.0-rc.0
retired
0.9.0
retired
0.8.0
0.7.0
0.6.0
0.5.0
0.4.0
0.3.0
0.2.0
0.1.0
An approachable image processing library primarily based upon Vix and libvips that is NIF-based, fast, multi-threaded, pipelined and has a low memory footprint.
Current section
Files
Jump to
Current section
Files
lib/image/options/video.ex
if match?({:module, _module}, Code.ensure_compiled(Evision)) do
defmodule Image.Options.Video do
@moduledoc """
Options and option validation for `Image.Video.stream!/2`.
"""
# Its a video stream, no options may be provided
def validate_stream_options(%Evision.VideoCapture{frame_count: 0.0}, []) do
{:ok, {nil, nil, nil, nil}}
end
def validate_stream_options(%Evision.VideoCapture{frame_count: frame_count}, []) do
{:ok, {:frame, 0, trunc(frame_count) - 1, 1}}
end
def validate_stream_options(%Evision.VideoCapture{} = video, frame: first..last = range)
when first >= 0 and last > first do
%{frame_count: frame_count} = video
max_frame = trunc(frame_count) - 1
step = Map.get(range, :step, 1)
if first <= max_frame and last <= max_frame do
{:ok, {:frame, first, last, step}}
else
{:error,
"Requested range #{inspect(range)} is not in the maximal range 0..#{inspect(max_frame)}"}
end
end
def validate_stream_options(%Evision.VideoCapture{} = video, millisecond: first..last = range)
when first >= 0 and last > first do
%{frame_count: frame_count, fps: fps} = video
max_millis = trunc(frame_count * fps * 1_000) - 1
step = Map.get(range, :step, 1)
if first <= max_millis and last <= max_millis do
{:ok, {:millisecond, first, last, step}}
else
{:error,
"Requestged range #{inspect(range)} is not in the maximum range 0..#{inspect(max_millis)}"}
end
end
def validate_stream_options(%Evision.VideoCapture{} = video, frame: first..last = range) do
%{frame_count: frame_count} = video
step = abs(Map.get(range, :step, 1))
first = if first < 0, do: trunc(frame_count + first), else: first
last = if last < 0, do: trunc(frame_count + last), else: last
validate_stream_options(video, frame: Range.new(first, last, step))
end
def validate_stream_options(%Evision.VideoCapture{} = video, millisecond: first..last = range)
when first < 0 and last < 0 and last > first do
%{frame_count: frame_count, fps: fps} = video
max_millis = trunc(frame_count * fps * 1_000)
step = abs(Map.get(range, :step, 1))
first = if first < 0, do: max_millis + first, else: first
last = if last < 0, do: max_millis + last, else: last
validate_stream_options(video, millisecond: Range.new(first, last, step))
end
def validate_stream_options!(video, options) do
case validate_stream_options(video, options) do
{:ok, options} -> options
{:error, reason} -> raise Image.Error, reason
end
end
end
end