FFmpeg
Data Structures | Macros | Functions | Variables
utils.c File Reference
#include "config.h"
#include <inttypes.h>
#include <math.h>
#include <stdio.h>
#include <string.h>
#include "libavutil/attributes.h"
#include "libavutil/avassert.h"
#include "libavutil/cpu.h"
#include "libavutil/csp.h"
#include "libavutil/emms.h"
#include "libavutil/hdr_dynamic_metadata.h"
#include "libavutil/imgutils.h"
#include "libavutil/intreadwrite.h"
#include "libavutil/libm.h"
#include "libavutil/mastering_display_metadata.h"
#include "libavutil/mathematics.h"
#include "libavutil/mem.h"
#include "libavutil/opt.h"
#include "libavutil/pixdesc.h"
#include "libavutil/slicethread.h"
#include "libavutil/thread.h"
#include "libavutil/aarch64/cpu.h"
#include "libavutil/ppc/cpu.h"
#include "libavutil/x86/asm.h"
#include "libavutil/x86/cpu.h"
#include "libavutil/loongarch/cpu.h"
#include "rgb2rgb.h"
#include "swscale.h"
#include "swscale_internal.h"
#include "utils.h"
#include "graph.h"

Go to the source code of this file.

Data Structures

struct  FormatEntry
 
struct  ScaleAlgorithm
 

Macros

#define _DEFAULT_SOURCE
 
#define _SVID_SOURCE
 
#define _DARWIN_C_SOURCE
 
#define USE_MMAP   0
 

Functions

static SwsContextalloc_set_opts (int srcW, int srcH, enum AVPixelFormat srcFormat, int dstW, int dstH, enum AVPixelFormat dstFormat, int flags, const double *param)
 Allocate and return an SwsContext without performing initialization. More...
 
int ff_shuffle_filter_coefficients (SwsInternal *c, int *filterPos, int filterSize, int16_t *filter, int dstW)
 
int sws_isSupportedInput (enum AVPixelFormat pix_fmt)
 Return a positive value if pix_fmt is a supported input format, 0 otherwise. More...
 
int sws_isSupportedOutput (enum AVPixelFormat pix_fmt)
 Return a positive value if pix_fmt is a supported output format, 0 otherwise. More...
 
int sws_isSupportedEndiannessConversion (enum AVPixelFormat pix_fmt)
 
static double getSplineCoeff (double a, double b, double c, double d, double dist)
 
static av_cold int get_local_pos (SwsInternal *s, int chr_subsample, int pos, int dir)
 
static av_cold int initFilter (int16_t **outFilter, int32_t **filterPos, int *outFilterSize, int xInc, int srcW, int dstW, int filterAlign, int one, int flags, int cpu_flags, SwsVector *srcFilter, SwsVector *dstFilter, double param[2], int srcPos, int dstPos)
 
static void fill_rgb2yuv_table (SwsInternal *c, const int table[4], int dstRange)
 
static void fill_xyztables (SwsInternal *c)
 
static int handle_jpeg (enum AVPixelFormat *format)
 
static int handle_0alpha (enum AVPixelFormat *format)
 
static int handle_xyz (enum AVPixelFormat *format)
 
static void handle_formats (SwsContext *sws)
 
static int range_override_needed (enum AVPixelFormat format)
 
int sws_setColorspaceDetails (SwsContext *sws, const int inv_table[4], int srcRange, const int table[4], int dstRange, int brightness, int contrast, int saturation)
 
int sws_getColorspaceDetails (SwsContext *sws, int **inv_table, int *srcRange, int **table, int *dstRange, int *brightness, int *contrast, int *saturation)
 
SwsContextsws_alloc_context (void)
 Allocate an empty SwsContext and set its fields to default values. More...
 
static uint16_t * alloc_gamma_tbl (double e)
 
static enum AVPixelFormat alphaless_fmt (enum AVPixelFormat fmt)
 
av_cold int ff_sws_init_single_context (SwsContext *sws, SwsFilter *srcFilter, SwsFilter *dstFilter)
 
static int context_init_threaded (SwsContext *sws, SwsFilter *src_filter, SwsFilter *dst_filter)
 
av_cold int sws_init_context (SwsContext *sws, SwsFilter *srcFilter, SwsFilter *dstFilter)
 Initialize the swscaler context sws_context. More...
 
SwsContextsws_getContext (int srcW, int srcH, enum AVPixelFormat srcFormat, int dstW, int dstH, enum AVPixelFormat dstFormat, int flags, SwsFilter *srcFilter, SwsFilter *dstFilter, const double *param)
 Allocate and return an SwsContext. More...
 
static int isnan_vec (SwsVector *a)
 
static void makenan_vec (SwsVector *a)
 
SwsVectorsws_allocVec (int length)
 Allocate and return an uninitialized vector with length coefficients. More...
 
SwsVectorsws_getGaussianVec (double variance, double quality)
 Return a normalized Gaussian curve used to filter stuff quality = 3 is high quality, lower is lower quality. More...
 
static SwsVectorsws_getConstVec (double c, int length)
 Allocate and return a vector with length coefficients, all with the same value c. More...
 
static SwsVectorsws_getIdentityVec (void)
 Allocate and return a vector with just one coefficient, with value 1.0. More...
 
static double sws_dcVec (SwsVector *a)
 
void sws_scaleVec (SwsVector *a, double scalar)
 Scale all the coefficients of a by the scalar value. More...
 
void sws_normalizeVec (SwsVector *a, double height)
 Scale all the coefficients of a so that their sum equals height. More...
 
static SwsVectorsws_sumVec (SwsVector *a, SwsVector *b)
 
static SwsVectorsws_getShiftedVec (SwsVector *a, int shift)
 
static void sws_shiftVec (SwsVector *a, int shift)
 
static void sws_addVec (SwsVector *a, SwsVector *b)
 
static void sws_printVec2 (SwsVector *a, AVClass *log_ctx, int log_level)
 Print with av_log() a textual representation of the vector a if log_level <= av_log_level. More...
 
void sws_freeVec (SwsVector *a)
 
void sws_freeFilter (SwsFilter *filter)
 
SwsFiltersws_getDefaultFilter (float lumaGBlur, float chromaGBlur, float lumaSharpen, float chromaSharpen, float chromaHShift, float chromaVShift, int verbose)
 
void sws_freeContext (SwsContext *sws)
 Free the swscaler context swsContext. More...
 
void sws_free_context (SwsContext **pctx)
 Free the context and everything associated with it, and write NULL to the provided pointer. More...
 
SwsContextsws_getCachedContext (SwsContext *prev, int srcW, int srcH, enum AVPixelFormat srcFormat, int dstW, int dstH, enum AVPixelFormat dstFormat, int flags, SwsFilter *srcFilter, SwsFilter *dstFilter, const double *param)
 Check if context can be reused, otherwise reallocate a new one. More...
 
int ff_range_add (RangeList *rl, unsigned int start, unsigned int len)
 
SwsFormat ff_fmt_from_frame (const AVFrame *frame, int field)
 This function also sanitizes and strips the input data, removing irrelevant fields for certain formats. More...
 
static int infer_prim_ref (SwsColor *csp, const SwsColor *ref)
 
static int infer_trc_ref (SwsColor *csp, const SwsColor *ref)
 
int ff_infer_colors (SwsColor *src, SwsColor *dst)
 
int sws_test_format (enum AVPixelFormat format, int output)
 Test if a given pixel format is supported. More...
 
int sws_test_colorspace (enum AVColorSpace csp, int output)
 Test if a given color space is supported. More...
 
int sws_test_primaries (enum AVColorPrimaries prim, int output)
 Test if a given set of color primaries is supported. More...
 
int sws_test_transfer (enum AVColorTransferCharacteristic trc, int output)
 Test if a given color transfer function is supported. More...
 
static int test_range (enum AVColorRange range)
 
static int test_loc (enum AVChromaLocation loc)
 
int ff_test_fmt (const SwsFormat *fmt, int output)
 
int sws_test_frame (const AVFrame *frame, int output)
 Helper function to run all sws_test_* against a frame, as well as testing the basic frame properties for sanity. More...
 
int sws_is_noop (const AVFrame *dst, const AVFrame *src)
 Check if a given conversion is a noop. More...
 

Variables

static const FormatEntry format_entries []
 
static const ScaleAlgorithm scale_algorithms []
 

Macro Definition Documentation

◆ _DEFAULT_SOURCE

#define _DEFAULT_SOURCE

Definition at line 24 of file utils.c.

◆ _SVID_SOURCE

#define _SVID_SOURCE

Definition at line 25 of file utils.c.

◆ _DARWIN_C_SOURCE

#define _DARWIN_C_SOURCE

Definition at line 26 of file utils.c.

◆ USE_MMAP

#define USE_MMAP   0

Function Documentation

◆ alloc_set_opts()

static SwsContext* alloc_set_opts ( int  srcW,
int  srcH,
enum AVPixelFormat  srcFormat,
int  dstW,
int  dstH,
enum AVPixelFormat  dstFormat,
int  flags,
const double param 
)
static

Allocate and return an SwsContext without performing initialization.

Definition at line 295 of file utils.c.

Referenced by ff_sws_init_single_context(), sws_getContext(), and sws_setColorspaceDetails().

◆ ff_shuffle_filter_coefficients()

int ff_shuffle_filter_coefficients ( SwsInternal c,
int *  filterPos,
int  filterSize,
int16_t *  filter,
int  dstW 
)

Definition at line 319 of file utils.c.

Referenced by check_hscale(), and ff_sws_init_single_context().

◆ getSplineCoeff()

static double getSplineCoeff ( double  a,
double  b,
double  c,
double  d,
double  dist 
)
static

Definition at line 394 of file utils.c.

Referenced by initFilter().

◆ get_local_pos()

static av_cold int get_local_pos ( SwsInternal s,
int  chr_subsample,
int  pos,
int  dir 
)
static

Definition at line 407 of file utils.c.

Referenced by ff_sws_init_single_context().

◆ initFilter()

static av_cold int initFilter ( int16_t **  outFilter,
int32_t **  filterPos,
int *  outFilterSize,
int  xInc,
int  srcW,
int  dstW,
int  filterAlign,
int  one,
int  flags,
int  cpu_flags,
SwsVector srcFilter,
SwsVector dstFilter,
double  param[2],
int  srcPos,
int  dstPos 
)
static

Definition at line 436 of file utils.c.

Referenced by ff_sws_init_single_context().

◆ fill_rgb2yuv_table()

static void fill_rgb2yuv_table ( SwsInternal c,
const int  table[4],
int  dstRange 
)
static

dstRange &&

Definition at line 845 of file utils.c.

Referenced by sws_setColorspaceDetails().

◆ fill_xyztables()

static void fill_xyztables ( SwsInternal c)
static

Definition at line 939 of file utils.c.

Referenced by handle_formats().

◆ handle_jpeg()

static int handle_jpeg ( enum AVPixelFormat format)
static

Definition at line 975 of file utils.c.

Referenced by sws_init_context().

◆ handle_0alpha()

static int handle_0alpha ( enum AVPixelFormat format)
static

Definition at line 1013 of file utils.c.

Referenced by handle_formats().

◆ handle_xyz()

static int handle_xyz ( enum AVPixelFormat format)
static

Definition at line 1024 of file utils.c.

Referenced by handle_formats().

◆ handle_formats()

static void handle_formats ( SwsContext sws)
static

Definition at line 1033 of file utils.c.

Referenced by ff_sws_init_single_context(), and sws_setColorspaceDetails().

◆ range_override_needed()

static int range_override_needed ( enum AVPixelFormat  format)
static

Definition at line 1044 of file utils.c.

Referenced by sws_getColorspaceDetails(), and sws_setColorspaceDetails().

◆ alloc_gamma_tbl()

static uint16_t* alloc_gamma_tbl ( double  e)
static

Definition at line 1244 of file utils.c.

Referenced by ff_sws_init_single_context().

◆ alphaless_fmt()

static enum AVPixelFormat alphaless_fmt ( enum AVPixelFormat  fmt)
static

Definition at line 1258 of file utils.c.

Referenced by ff_sws_init_single_context().

◆ ff_sws_init_single_context()

av_cold int ff_sws_init_single_context ( SwsContext sws,
SwsFilter srcFilter,
SwsFilter dstFilter 
)

Definition at line 1319 of file utils.c.

Referenced by context_init_threaded(), init_legacy_subpass(), and sws_init_context().

◆ context_init_threaded()

static int context_init_threaded ( SwsContext sws,
SwsFilter src_filter,
SwsFilter dst_filter 
)
static

Definition at line 2037 of file utils.c.

Referenced by sws_init_context().

◆ isnan_vec()

static int isnan_vec ( SwsVector a)
static

Definition at line 2140 of file utils.c.

Referenced by sws_getDefaultFilter().

◆ makenan_vec()

static void makenan_vec ( SwsVector a)
static

Definition at line 2149 of file utils.c.

Referenced by sws_addVec(), and sws_shiftVec().

◆ sws_getConstVec()

static SwsVector* sws_getConstVec ( double  c,
int  length 
)
static

Allocate and return a vector with length coefficients, all with the same value c.

Definition at line 2204 of file utils.c.

Referenced by sws_getIdentityVec(), sws_getShiftedVec(), and sws_sumVec().

◆ sws_getIdentityVec()

static SwsVector* sws_getIdentityVec ( void  )
static

Allocate and return a vector with just one coefficient, with value 1.0.

Definition at line 2223 of file utils.c.

Referenced by sws_getDefaultFilter().

◆ sws_dcVec()

static double sws_dcVec ( SwsVector a)
static

Definition at line 2228 of file utils.c.

Referenced by sws_normalizeVec().

◆ sws_sumVec()

static SwsVector* sws_sumVec ( SwsVector a,
SwsVector b 
)
static

Definition at line 2252 of file utils.c.

Referenced by sws_addVec().

◆ sws_getShiftedVec()

static SwsVector* sws_getShiftedVec ( SwsVector a,
int  shift 
)
static

Definition at line 2270 of file utils.c.

Referenced by sws_shiftVec().

◆ sws_shiftVec()

static void sws_shiftVec ( SwsVector a,
int  shift 
)
static

Definition at line 2288 of file utils.c.

Referenced by sws_getDefaultFilter().

◆ sws_addVec()

static void sws_addVec ( SwsVector a,
SwsVector b 
)
static

Definition at line 2302 of file utils.c.

Referenced by sws_getDefaultFilter().

◆ sws_printVec2()

static void sws_printVec2 ( SwsVector a,
AVClass log_ctx,
int  log_level 
)
static

Print with av_log() a textual representation of the vector a if log_level <= av_log_level.

Definition at line 2320 of file utils.c.

Referenced by sws_getDefaultFilter().

◆ ff_range_add()

int ff_range_add ( RangeList rl,
unsigned int  start,
unsigned int  len 
)

Definition at line 2592 of file utils.c.

Referenced by sws_send_slice().

◆ ff_fmt_from_frame()

SwsFormat ff_fmt_from_frame ( const AVFrame frame,
int  field 
)

This function also sanitizes and strips the input data, removing irrelevant fields for certain formats.

Calculate largest value from histogram to use as fallback for clips with missing MaxSCL information. Note that this may end up picking the "reserved" value at the 5% percentile, which in practice appears to track the brightest pixel in the scene.

Definition at line 2656 of file utils.c.

Referenced by sws_frame_setup(), sws_is_noop(), and sws_test_frame().

◆ infer_prim_ref()

static int infer_prim_ref ( SwsColor csp,
const SwsColor ref 
)
static

Definition at line 2808 of file utils.c.

Referenced by ff_infer_colors().

◆ infer_trc_ref()

static int infer_trc_ref ( SwsColor csp,
const SwsColor ref 
)
static

Definition at line 2832 of file utils.c.

Referenced by ff_infer_colors().

◆ ff_infer_colors()

int ff_infer_colors ( SwsColor src,
SwsColor dst 
)

Definition at line 2857 of file utils.c.

Referenced by adapt_colors().

◆ test_range()

static int test_range ( enum AVColorRange  range)
static

Definition at line 2909 of file utils.c.

Referenced by ff_test_fmt().

◆ test_loc()

static int test_loc ( enum AVChromaLocation  loc)
static

Definition at line 2914 of file utils.c.

Referenced by ff_test_fmt().

◆ ff_test_fmt()

int ff_test_fmt ( const SwsFormat fmt,
int  output 
)

Definition at line 2919 of file utils.c.

Referenced by sws_frame_setup(), and sws_test_frame().

Variable Documentation

◆ format_entries

const FormatEntry format_entries[]
static

◆ scale_algorithms

const ScaleAlgorithm scale_algorithms[]
static
Initial value:
= {
{ SWS_AREA, "area averaging", 1 },
{ SWS_BICUBIC, "bicubic", 4 },
{ SWS_BICUBLIN, "luma bicubic / chroma bilinear", -1 },
{ SWS_BILINEAR, "bilinear", 2 },
{ SWS_FAST_BILINEAR, "fast bilinear", -1 },
{ SWS_GAUSS, "Gaussian", 8 },
{ SWS_LANCZOS, "Lanczos", -1 },
{ SWS_POINT, "nearest neighbor / point", -1 },
{ SWS_SINC, "sinc", 20 },
{ SWS_SPLINE, "bicubic spline", 20 },
{ SWS_X, "experimental", 8 },
}

Definition at line 422 of file utils.c.

Referenced by ff_sws_init_single_context(), and initFilter().

SWS_BILINEAR
@ SWS_BILINEAR
bilinear filtering
Definition: swscale.h:99
SWS_BICUBLIN
@ SWS_BICUBLIN
bicubic luma, bilinear chroma
Definition: swscale.h:104
SWS_FAST_BILINEAR
@ SWS_FAST_BILINEAR
Scaler selection options.
Definition: swscale.h:98
SWS_AREA
@ SWS_AREA
area averaging
Definition: swscale.h:103
SWS_BICUBIC
@ SWS_BICUBIC
2-tap cubic B-spline
Definition: swscale.h:100
SWS_POINT
@ SWS_POINT
nearest neighbor
Definition: swscale.h:102
SWS_SPLINE
@ SWS_SPLINE
cubic Keys spline
Definition: swscale.h:108
SWS_X
@ SWS_X
experimental
Definition: swscale.h:101
SWS_GAUSS
@ SWS_GAUSS
gaussian approximation
Definition: swscale.h:105
SWS_LANCZOS
@ SWS_LANCZOS
3-tap sinc/sinc
Definition: swscale.h:107
SWS_SINC
@ SWS_SINC
unwindowed sinc
Definition: swscale.h:106