Loading...
Searching...
No Matches
Buffer sink API
libavfilter

The buffersink and abuffersink filters are there to connect filter graphs to applications. More...

## Topics

| Buffer sink accessors
| Get the properties of the stream.

## Files

file | buffersink.h
| memory buffer sink API for audio and video

## Macros

#define | AV_BUFFERSINK_FLAG_PEEK 1
| Tell av_buffersink_get_buffer_ref() to read video/samples buffer reference, but not remove it from the buffer.
#define | AV_BUFFERSINK_FLAG_NO_REQUEST 2
| Tell av_buffersink_get_buffer_ref() not to request a frame from its input.

## Functions

int | av_buffersink_get_frame_flags (AVFilterContext *ctx, AVFrame *frame, int flags)
| Get a frame with filtered data from sink and put it in frame.
void | av_buffersink_set_frame_size (AVFilterContext *ctx, unsigned frame_size)
| Set the frame size for an audio buffer sink.
int | av_buffersink_get_frame (AVFilterContext *ctx, AVFrame *frame)
| Get a frame with filtered data from sink and put it in frame.
int | av_buffersink_get_samples (AVFilterContext *ctx, AVFrame *frame, int nb_samples)
| Same as av_buffersink_get_frame(), but with the ability to specify the number of samples read.

## Detailed Description

The buffersink and abuffersink filters are there to connect filter graphs to applications.

They have a single input, connected to the graph, and no output. Frames must be extracted using av_buffersink_get_frame() or av_buffersink_get_samples().

The format negotiated by the graph during configuration can be obtained using the accessor functions:

- av_buffersink_get_time_base(),
- av_buffersink_get_format(),
- av_buffersink_get_frame_rate(),
- av_buffersink_get_w(),
- av_buffersink_get_h(),
- av_buffersink_get_sample_aspect_ratio(),
- av_buffersink_get_channels(),
- av_buffersink_get_ch_layout(),
- av_buffersink_get_sample_rate().
- av_buffersink_get_side_data().

The layout returned by av_buffersink_get_ch_layout() must de uninitialized by the caller.

The format can be constrained by setting options, using av_opt_set() and related functions with the AV_OPT_SEARCH_CHILDREN flag.

- pixel_formats (array of pixel formats),
- colorspaces (array of int),
- colorranges (array of int),
- alphamodes (array of int),
- sample_formats (array of sample formats),
- samplerates (array of int),
- channel_layouts (array of channel layouts) If an option is not set, all corresponding formats are accepted.

## Macro Definition Documentation

## AV_BUFFERSINK_FLAG_PEEK

#define AV_BUFFERSINK_FLAG_PEEK 1

Tell av_buffersink_get_buffer_ref() to read video/samples buffer reference, but not remove it from the buffer.

This is useful if you need only to read a video/samples buffer, without to fetch it.

Definition at line 85 of file buffersink.h.

## AV_BUFFERSINK_FLAG_NO_REQUEST

#define AV_BUFFERSINK_FLAG_NO_REQUEST 2

Tell av_buffersink_get_buffer_ref() not to request a frame from its input.

If a frame is already buffered, it is read (and removed from the buffer), but if no frame is present, return AVERROR(EAGAIN).

Definition at line 92 of file buffersink.h.

## Function Documentation

## av_buffersink_get_frame_flags()

int av_buffersink_get_frame_flags | ( | AVFilterContext * | ctx,
|  | AVFrame * | frame,
|  | int | flags )

Get a frame with filtered data from sink and put it in frame.

Parameters

  ctx | pointer to a buffersink or abuffersink filter context.
  frame | pointer to an allocated frame that will be filled with data. The data must be freed using av_frame_unref() / av_frame_free()
  flags | a combination of AV_BUFFERSINK_FLAG_* flags

Returns
  >= 0 in for success, a negative AVERROR code for failure.

## av_buffersink_set_frame_size()

void av_buffersink_set_frame_size | ( | AVFilterContext * | ctx,
|  | unsigned | frame_size )

Set the frame size for an audio buffer sink.

All calls to av_buffersink_get_buffer_ref will return a buffer with exactly the specified number of samples, or AVERROR(EAGAIN) if there is not enough. The last buffer at EOF will be padded with 0.

Examples
  transcode.c.

Referenced by init_filter().

## av_buffersink_get_frame()

int av_buffersink_get_frame | ( | AVFilterContext * | ctx,
|  | AVFrame * | frame )

Get a frame with filtered data from sink and put it in frame.

Parameters

  ctx | pointer to a context of a buffersink or abuffersink AVFilter.
  frame | pointer to an allocated frame that will be filled with data. The data must be freed using av_frame_unref() / av_frame_free()

Returns
  - >= 0 if a frame was successfully returned.
  - AVERROR(EAGAIN) if no frames are available at this point; more input frames must be added to the filtergraph to get more output.
  - AVERROR_EOF if there will be no more output frames on this sink.
  - A different negative AVERROR code in other failure cases.

Examples
  decode_filter_audio.c, decode_filter_video.c, filter_audio.c, and transcode.c.

Referenced by filter_encode_write_frame(), main(), and main().

## av_buffersink_get_samples()

int av_buffersink_get_samples | ( | AVFilterContext * | ctx,
|  | AVFrame * | frame,
|  | int | nb_samples )

Same as av_buffersink_get_frame(), but with the ability to specify the number of samples read.

This function is less efficient than av_buffersink_get_frame(), because it copies the data around.

Parameters

  ctx | pointer to a context of the abuffersink AVFilter.
  frame | pointer to an allocated frame that will be filled with data. The data must be freed using av_frame_unref() / av_frame_free() frame will contain exactly nb_samples audio samples, except at the end of stream, when it can contain less than nb_samples.

Returns
  The return codes have the same meaning as for av_buffersink_get_frame().

Warning
  do not mix this function with av_buffersink_get_frame(). Use only one or the other with a single sink, not both.