# `VideoInterop.Frame`
[🔗](https://github.com/emerge-elixir/video_interop/blob/v0.1.0/lib/video_interop/frame.ex#L1)

One storage-neutral video frame.

Binary storage owns its immutable BEAM binary and has no lease. Borrowed or
reusable storage such as DMA-BUF carries a producer lifetime lease.
Timestamps belong to the transport using the frame.

# `acquire_sync`

```elixir
@type acquire_sync() :: :implicit | VideoInterop.SyncFile.t()
```

# `storage`

```elixir
@type storage() :: VideoInterop.Binary.t() | VideoInterop.DMABuf.Descriptor.t()
```

# `t`

```elixir
@type t() :: %VideoInterop.Frame{
  acquire_sync: acquire_sync(),
  coded_height: pos_integer(),
  coded_width: pos_integer(),
  format: VideoInterop.Format.t() | nil,
  lease: VideoInterop.Lease.t() | nil,
  storage: storage(),
  visible_rect: VideoInterop.Rect.t()
}
```

# `binary`

```elixir
@spec binary(
  binary(),
  keyword()
) :: t()
```

Builds a validated, tightly packed or explicitly strided binary frame.

---

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