# `Membrane.Debug.Filter`
[🔗](https://github.com/membraneframework/membrane-core/blob/v1.2.7/lib/membrane/debug/filter.ex#L1)

Membrane Filter, that can be used to create a child that will be used to debug data flowing thouth pipeline.

Any buffers, stream formats and events arriving to Elixir.Membrane.Debug.Filter will be forwarded by it to the opposite
side than the one from which they came.

Usage example:
```elixir
child(:source, CustomSource)
|> child(:filter, %Membrane.Debug.Filter{
  handle_buffer: &IO.inspect(&1, label: "buffer"),
  handle_stream_format: &IO.inspect(&1, label: "stream format")
})
|> child(:sink, CustomSink)
```

## Element options

Passed via struct `t:Membrane.Debug.Filter.t/0`

- `handle_start_of_stream`  

  ```
  (-> any())
  ```
  
  Default value: `&Membrane.Debug.Filter.noop/0`  
  Function with arity 0, that will be called when the start of stream is received on the input pad.
  Result of this function is ignored.

- `handle_buffer`  

  ```
  (Buffer.t() -> any())
  ```
  
  Default value: `&Membrane.Debug.Filter.noop/1`  
  Function with arity 1, that will be called with all buffers handled by this sink.
  Result of this function is ignored.

- `handle_event`  

  ```
  (Event.t() -> any())
  ```
  
  Default value: `&Membrane.Debug.Filter.noop/1`  
  Function with arity 1, that will be called with all events handled by this sink.
  Result of this function is ignored.

- `handle_stream_format`  

  ```
  (StreamFormat.t() -> any())
  ```
  
  Default value: `&Membrane.Debug.Filter.noop/1`  
  Function with arity 1, that will be called with all stream formats handled by this sink.
  Result of this function is ignored.

- `handle_end_of_stream`  

  ```
  (-> any())
  ```
  
  Default value: `&Membrane.Debug.Filter.noop/0`  
  Function with arity 0, that will be called when the end of stream is received on the input pad.
  Result of this function is ignored.

## Pads

### `:input`

Accepted formats:
```
_any
```

Direction: | `:input`
Availability: | `:always`
Flow control: | `:auto`

### `:output`

Accepted formats:
```
_any
```

Direction: | `:output`
Availability: | `:always`
Flow control: | `:auto`

# `t`

```elixir
@type t() :: %Membrane.Debug.Filter{
  handle_buffer: (Membrane.Buffer.t() -&gt; any()),
  handle_end_of_stream: (-&gt; any()),
  handle_event: (Membrane.Event.t() -&gt; any()),
  handle_start_of_stream: (-&gt; any()),
  handle_stream_format: (Membrane.StreamFormat.t() -&gt; any())
}
```

Struct containing options for `Membrane.Debug.Filter`

# `noop`

```elixir
@spec noop(any()) :: :ok
```

# `options`

```elixir
@spec options() :: keyword()
```

Returns description of options available for this module

---

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