ExCubecl.NIF (ExCubecl v0.4.1)

Copy Markdown View Source

NIF stubs for the CubeCL Rust backend.

Each function delegates to the Rust NIF implementation. If the NIF is not loaded, returns {:error, :nif_not_loaded}.

Buffers are managed via Rustler ResourceArc — they are automatically freed when the Elixir term is garbage collected. No manual free is needed.

Summary

Functions

buffer_dtype(buffer)

@spec buffer_dtype(reference()) :: {:ok, String.t()} | {:error, term()}

buffer_new(data, shape, dtype)

@spec buffer_new(binary(), [non_neg_integer()], String.t()) ::
  {:ok, reference()} | {:error, term()}

buffer_read(buffer)

@spec buffer_read(reference()) :: {:ok, binary()} | {:error, term()}

buffer_shape(buffer)

@spec buffer_shape(reference()) :: {:ok, [non_neg_integer()]} | {:error, term()}

buffer_size(buffer)

@spec buffer_size(reference()) :: {:ok, non_neg_integer()} | {:error, term()}

device_count()

@spec device_count() :: {:ok, non_neg_integer()} | {:error, term()}

device_info()

@spec device_info() :: {:ok, map()} | {:error, term()}

kernel_list()

@spec kernel_list() :: {:ok, [String.t()]} | {:error, term()}

kernel_run(name, inputs, output, params)

@spec kernel_run(String.t(), [reference()], reference(), binary()) ::
  {:ok, non_neg_integer()} | {:error, term()}

media_close(source)

@spec media_close(reference()) :: :ok | {:error, term()}

media_open(path)

@spec media_open(String.t()) :: {:ok, reference()} | {:error, term()}

media_read_audio_samples(source)

@spec media_read_audio_samples(reference()) :: {:ok, map()} | {:error, term()}

media_read_video_frame(source)

@spec media_read_video_frame(reference()) :: {:ok, map()} | {:error, term()}

media_streams(source)

@spec media_streams(reference()) :: {:ok, [map()]} | {:error, term()}

pipeline_add(pipeline_id, name, inputs, output, params)

@spec pipeline_add(
  non_neg_integer(),
  String.t(),
  [reference()],
  reference(),
  binary()
) ::
  :ok | {:error, term()}

pipeline_free(pipeline_id)

@spec pipeline_free(non_neg_integer()) :: :ok | {:error, term()}

pipeline_new()

@spec pipeline_new() :: {:ok, non_neg_integer()} | {:error, term()}

pipeline_run(pipeline_id)

@spec pipeline_run(non_neg_integer()) :: {:ok, [non_neg_integer()]} | {:error, term()}

poll(command_id)

@spec poll(non_neg_integer()) ::
  {:ok, :pending | :running | :completed | :failed} | {:error, term()}

submit(command)

@spec submit(String.t()) :: {:ok, non_neg_integer()} | {:error, term()}

transcode_finish(encoder)

@spec transcode_finish(reference()) :: :ok | {:error, term()}

transcode_start(path, opts)

@spec transcode_start(String.t(), map()) :: {:ok, reference()} | {:error, term()}

transcode_write_audio(encoder, samples)

@spec transcode_write_audio(reference(), reference()) :: :ok | {:error, term()}

transcode_write_video(encoder, frame)

@spec transcode_write_video(reference(), reference()) :: :ok | {:error, term()}

wait(command_id)

@spec wait(non_neg_integer()) :: :ok | {:error, term()}