defmodule Rav1e.EncoderConfig do @moduledoc """ Encoder settings which impact the produced bitstream. Mirror implementation of `rav1e::api::config::encoder::EncoderConfig` """ @enforce_keys [:width, :height] defstruct [ # Width of the frames in pixels. :width, # Height of the frames in pixels. :height, # Sample aspect ratio (for anamorphic video). :sample_aspect_ratio, # Video time base. :time_base, # data format and ancillary color information # Bit depth. :bit_depth, # Chroma subsampling. :chroma_sampling, # Chroma sample position. :chroma_sample_position, # Pixel value range. :pixel_range, # Enable signaling timing info in the bitstream. :enable_timing_info, # Still picture mode flag. :still_picture, # Flag to force all frames to be error resilient. :error_resilient, # Interval between switch frames (0 to disable) :switch_frame_interval, # encoder configuration # The *minimum* interval between two keyframes :min_key_frame_interval, # The *maximum* interval between two keyframes :max_key_frame_interval, # The number of temporal units over which to distribute the reservoir # usage. :reservoir_frame_delay, # Flag to enable low latency mode. # In this mode the frame reordering is disabled. :low_latency, # The base quantizer to use. :quantizer, # The minimum allowed base quantizer to use in bitrate mode. :min_quantizer, # The target bitrate for the bitrate mode. :bitrate, # Metric to tune the quality for. :tune, # Number of tiles horizontally. Must be a power of two. # Overridden by [`tiles`], if present. :tile_cols, # Number of tiles vertically. Must be a power of two. # Overridden by [`tiles`], if present. :tile_rows, # Total number of tiles desired. # Encoder will try to optimally split to reach this number of tiles, # rounded up. Overrides [`tile_cols`] and [`tile_rows`]. :tiles, # Number of frames to read ahead for the RDO lookahead computation. :rdo_lookahead_frames, # Settings which affect the encoding speed vs. quality trade-off. :speed_settings ] end