# `Membrane.Element.PadData`
[🔗](https://github.com/membraneframework/membrane-core/blob/v1.3.0/lib/membrane/element/pad_data.ex#L1)

Struct describing current pad state.

The public fields are:
  - `:availability` - see `t:Membrane.Pad.availability/0`
  - `:stream_format` - the most recent `t:Membrane.StreamFormat.t/0` that have been sent (output) or received (input)
    on the pad. May be `nil` if not yet set.
  - `:direction` - see `t:Membrane.Pad.direction/0`
  - `:end_of_stream?` - flag determining whether the stream processing via the pad has been finished
  - `:flow_control` - see `t:Membrane.Pad.flow_control/0`.
  - `:name` - see `t:Membrane.Pad.name/0`. Do not mistake with `:ref`
  - `:options` - options passed in `Membrane.ParentSpec` when linking pad
  - `:ref` - see `t:Membrane.Pad.ref/0`
  - `:start_of_stream?` - flag determining whether the stream processing via the pad has been started
  - `auto_demand_paused?` - flag determining if auto-demanding on the pad is paused or no
  - `max_instances` - specifies maximal possible number of instances of a dynamic pad that can exist within single element. Equals `nil` for pads with `availability: :always`.

Other fields in the struct ARE NOT PART OF THE PUBLIC API and should not be
accessed or relied on.

# `private_field`

```elixir
@type private_field() :: term()
```

# `t`

```elixir
@type t() :: %Membrane.Element.PadData{
  atomic_demand: private_field(),
  auto_demand_paused?: boolean(),
  auto_demand_size: private_field(),
  auto_flow_queue: private_field(),
  availability: Membrane.Pad.availability(),
  demand: integer() | nil,
  demand_unit: private_field(),
  direction: Membrane.Pad.direction(),
  end_of_stream?: boolean(),
  flow_control: Membrane.Pad.flow_control(),
  incoming_demand: integer() | nil,
  input_queue: private_field(),
  manual_demand_size: private_field(),
  max_instances: Membrane.Pad.max_instances() | nil,
  name: Membrane.Pad.name(),
  options: %{optional(atom()) =&gt; any()},
  other_demand_unit: private_field(),
  other_effective_flow_control: private_field(),
  other_ref: private_field(),
  pid: private_field(),
  ref: Membrane.Pad.ref(),
  stalker_metrics: private_field(),
  start_of_stream?: boolean(),
  sticky_events: private_field(),
  sticky_messages: private_field(),
  stream_format: Membrane.StreamFormat.t() | nil,
  stream_format_validation_params: private_field(),
  uninterrupted_redemands: private_field()
}
```

Struct describing current pad state.

The public fields are:
  - `:availability` - see `t:Membrane.Pad.availability/0`
  - `:stream_format` - the most recent `t:Membrane.StreamFormat.t/0` that have been sent (output) or received (input)
    on the pad. May be `nil` if not yet set.
  - `:direction` - see `t:Membrane.Pad.direction/0`
  - `:end_of_stream?` - flag determining whether the stream processing via the pad has been finished
  - `:flow_control` - see `t:Membrane.Pad.flow_control/0`.
  - `:name` - see `t:Membrane.Pad.name/0`. Do not mistake with `:ref`
  - `:options` - options passed in `Membrane.ParentSpec` when linking pad
  - `:ref` - see `t:Membrane.Pad.ref/0`
  - `:start_of_stream?` - flag determining whether the stream processing via the pad has been started
  - `auto_demand_paused?` - flag determining if auto-demanding on the pad is paused or no
  - `max_instances` - specifies maximal possible number of instances of a dynamic pad that can exist within single element. Equals `nil` for pads with `availability: :always`.

Other fields in the struct ARE NOT PART OF THE PUBLIC API and should not be
accessed or relied on.

---

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