# `ExOxvif.Imaging`
[🔗](https://github.com/cortfritz/ex_oxvif/blob/v0.1.0/lib/ex_oxvif/imaging.ex#L1)

Imaging service: focus.

`source` is a video source token (`ExOxvif.MediaProfile`
`:video_source_token`), not a profile token.

# `focus_move`

```elixir
@type focus_move() ::
  {:absolute, number(), number() | nil}
  | {:relative, number(), number() | nil}
  | {:continuous, number()}
```

# `move`

```elixir
@spec move(ExOxvif.Session.t(), String.t(), focus_move(), ExOxvif.call_opts()) ::
  :ok | {:error, ExOxvif.Error.t()}
```

Move the focus.

  * `{:absolute, position, speed}` - to a position in the device's range
  * `{:relative, distance, speed}` - positive is far, negative is near
  * `{:continuous, speed}` - until `stop/3`; positive is far

`speed` may be `nil` for the device default.

# `status`

```elixir
@spec status(ExOxvif.Session.t(), String.t(), ExOxvif.call_opts()) ::
  {:ok, ExOxvif.Imaging.Status.t()} | {:error, ExOxvif.Error.t()}
```

Current focus position and movement state.

# `stop`

```elixir
@spec stop(ExOxvif.Session.t(), String.t(), ExOxvif.call_opts()) ::
  :ok | {:error, ExOxvif.Error.t()}
```

Stop focus movement.

---

*Consult [api-reference.md](api-reference.md) for complete listing*
