View Source Membrane.FFmpeg.SWScale.Scaler (Membrane FFmpeg SWScale plugin v0.15.1)

This element performs video scaling, using SWScale module of FFmpeg library.

There are two options that can be specified when creating Scaler:

  • output_width - desired scaled video width.
  • output_height - desired scaled video height.

Both need to be even numbers.

Note that if only one dimension is specified (either output_width or output_height), the other dimension is calculated on handle_stream_format callback based on input dimensions.

Scaling consists of two operations:

  • scaling itself - resizing video frame with keeping original ratio. After that operation at least one of the dimensions of the input frame match the respective dimension of the desired output size. The second one (if does not match) is smaller than its respective dimension.
  • adding paddings - if one dimension does not match after scaling, paddings have to be added. They are put on both sides of the scaled frame equally. They are either above and below the frame or on the left and right sides of it. It depends on the dimension that did not match after scaling.

Scaler needs input in the YUV420p format, processes one frame at a time and requires getting stream format with input video width and height. To meet all requirements either Membrane.Element.RawVideo.Parser or some decoder (e.g. Membrane.H264.FFmpeg.Decoder) have to precede Scaler in the pipeline.

The output of the element is also in the YUV420p format. It has the size as specified in the options. All stream format except for width and height are passed unchanged to the next element in the pipeline.

Element options

Passed via struct Membrane.FFmpeg.SWScale.Scaler.t/0

  • output_width

    non_neg_integer()

    Default value: nil
    Width of the scaled video.

  • output_height

    non_neg_integer()

    Default value: nil
    Height of the scaled video.

  • use_shm?

    boolean()

    Default value: false
    If true, native scaler will use shared memory (via Shmex.t/0) for storing frames

Pads

:input

Accepted formats:

%RawVideo{pixel_format: :I420, aligned: true}
Direction::input
Availability::always
Flow control::auto

:output

Accepted formats:

%RawVideo{pixel_format: :I420, aligned: true}
Direction::output
Availability::always
Flow control::auto

Summary

Types

t()

Struct containing options for Membrane.FFmpeg.SWScale.Scaler

Functions

Returns description of options available for this module

Types

@type t() :: %Membrane.FFmpeg.SWScale.Scaler{
  output_height: non_neg_integer(),
  output_width: non_neg_integer(),
  use_shm?: boolean()
}

Struct containing options for Membrane.FFmpeg.SWScale.Scaler

Functions

@spec options() :: keyword()

Returns description of options available for this module