defmodule Rav1e do defstruct [:rav1e, :config] @doc """ Initialize encoder. """ def init(%Rav1e.EncoderConfig{} = config) do rav1e = Rav1e.Native.init(config) %Rav1e{rav1e: rav1e, config: config} end @doc """ Encode a single frame. Will return a either an AV1 packet or a `rav1e::api::util::EncoderState`. """ def encode(%Rav1e{rav1e: rav1e}, y_plane, u_plane, v_plane) do Rav1e.Native.encode(rav1e, y_plane, u_plane, v_plane) end @doc """ Encode remaining frames in the encoders internal buffer. """ def flush(%Rav1e{rav1e: rav1e}), do: Rav1e.Native.flush(rav1e) end defmodule Rav1e.Native do use Rustler, otp_app: :rav1e, crate: "rav1e_native", mode: :release def init(_settings), do: :erlang.nif_error(:nif_not_loaded) def encode(_rav1e, _y_plane, _u_plane, _v_plane), do: :erlang.nif_error(:nif_not_loaded) def flush(_rav1e), do: :erlang.nif_error(:nif_not_loaded) end