FFmpeg
Loading...
Searching...
No Matches
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/imgutils.h"
#include "libavutil/intreadwrite.h"
#include "libavutil/libm.h"
#include "libavutil/mathematics.h"
#include "libavutil/mem.h"
#include "libavutil/opt.h"
#include "libavutil/pixdesc.h"
#include "libavutil/refstruct.h"
#include "libavutil/slicethread.h"
#include "libavutil/thread.h"
#include "libavutil/aarch64/cpu.h"
#include "libavutil/ppc/cpu.h"
#include "libavutil/x86/cpu.h"
#include "libavutil/loongarch/cpu.h"
#include "rgb2rgb.h"
#include "swscale.h"
#include "swscale_internal.h"
#include "graph.h"
#include "jit.h"

Go to the source code of this file.

Data Structures

struct  ScaleAlgorithm
 

Macros

#define _DEFAULT_SOURCE
 

Functions

SwsBackend ff_sws_enabled_backends (const SwsContext *ctx)
 
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.
 
int ff_shuffle_filter_coefficients (SwsInternal *c, int *filterPos, int filterSize, int16_t *filter, int dstW)
 
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 scaler, int flags, int cpu_flags, SwsVector *srcFilter, SwsVector *dstFilter, double param[SWS_NUM_SCALER_PARAMS], int srcPos, int dstPos)
 
static void fill_rgb2yuv_table (SwsInternal *c, const int table[4], int dstRange)
 
static av_cold void init_xyz_tables (void)
 
av_cold int ff_sws_fill_xyztables (SwsInternal *c)
 
static int handle_jpeg (int *format)
 
static int handle_0alpha (int *format)
 
static int handle_xyz (int *format)
 
static int 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.
 
static uint16_t * alloc_gamma_tbl (double e)
 
static enum AVPixelFormat alphaless_fmt (enum AVPixelFormat fmt)
 
static int scaler_flag (SwsScaler scaler, int fallback)
 
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.
 
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.
 
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.
 
SwsVectorsws_getGaussianVec (double variance, double quality)
 Return a normalized Gaussian curve used to filter stuff quality = 3 is high quality, lower is lower quality.
 
static SwsVectorsws_getConstVec (double c, int length)
 Allocate and return a vector with length coefficients, all with the same value c.
 
static SwsVectorsws_getIdentityVec (void)
 Allocate and return a vector with just one coefficient, with value 1.0.
 
static double sws_dcVec (SwsVector *a)
 
void sws_scaleVec (SwsVector *a, double scalar)
 Scale all the coefficients of a by the scalar value.
 
void sws_normalizeVec (SwsVector *a, double height)
 Scale all the coefficients of a so that their sum equals height.
 
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.
 
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.
 
void sws_free_context (SwsContext **pctx)
 Free the context and everything associated with it, and write NULL to the provided pointer.
 
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.
 
int ff_range_add (RangeList *rl, unsigned int start, unsigned int len)
 
int ff_sws_thread_exec (void *priv, int(*func)(void *priv, int jobnr, int threadnr, int nb_jobs, int nb_threads), int nb_threads, int nb_jobs)
 Helper for dispatching a single function across multiple threads.
 

Variables

static const ScaleAlgorithm scale_algorithms []
 
static uint16_t xyzgamma_tab [4096]
 
static uint16_t rgbgammainv_tab [4096]
 
static uint16_t rgbgamma_tab [65536]
 
static uint16_t xyzgammainv_tab [65536]
 

Macro Definition Documentation

◆ _DEFAULT_SOURCE

#define _DEFAULT_SOURCE

Definition at line 24 of file utils.c.

Function Documentation

◆ ff_sws_enabled_backends()

SwsBackend ff_sws_enabled_backends ( const SwsContext * ctx)

◆ 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 75 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 97 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 155 of file utils.c.

Referenced by getSplineCoeff(), and initFilter().

◆ get_local_pos()

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

Definition at line 168 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 scaler,
int flags,
int cpu_flags,
SwsVector * srcFilter,
SwsVector * dstFilter,
double param[SWS_NUM_SCALER_PARAMS],
int srcPos,
int dstPos )
static

Definition at line 197 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 614 of file utils.c.

Referenced by sws_setColorspaceDetails().

◆ init_xyz_tables()

static av_cold void init_xyz_tables ( void )
static

Definition at line 714 of file utils.c.

Referenced by ff_sws_fill_xyztables().

◆ ff_sws_fill_xyztables()

av_cold int ff_sws_fill_xyztables ( SwsInternal * c)

Definition at line 735 of file utils.c.

Referenced by check_xyz12Torgb48le(), and handle_formats().

◆ handle_jpeg()

static int handle_jpeg ( int * format)
static

Definition at line 773 of file utils.c.

Referenced by sws_init_context().

◆ handle_0alpha()

static int handle_0alpha ( int * format)
static

Definition at line 811 of file utils.c.

Referenced by handle_formats().

◆ handle_xyz()

static int handle_xyz ( int * format)
static

Definition at line 822 of file utils.c.

Referenced by handle_formats().

◆ handle_formats()

static int handle_formats ( SwsContext * sws)
static

Definition at line 831 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 844 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 1046 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 1060 of file utils.c.

Referenced by ff_sws_init_single_context().

◆ scaler_flag()

static int scaler_flag ( SwsScaler scaler,
int fallback )
static

Definition at line 1121 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 1137 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 1837 of file utils.c.

Referenced by sws_init_context().

◆ isnan_vec()

static int isnan_vec ( SwsVector * a)
static

Definition at line 1940 of file utils.c.

Referenced by sws_getDefaultFilter().

◆ makenan_vec()

static void makenan_vec ( SwsVector * a)
static

Definition at line 1949 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 2004 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 2023 of file utils.c.

Referenced by sws_getDefaultFilter().

◆ sws_dcVec()

static double sws_dcVec ( SwsVector * a)
static

Definition at line 2028 of file utils.c.

Referenced by sws_normalizeVec().

◆ sws_sumVec()

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

Definition at line 2052 of file utils.c.

Referenced by sws_addVec().

◆ sws_getShiftedVec()

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

Definition at line 2070 of file utils.c.

Referenced by sws_shiftVec().

◆ sws_shiftVec()

static void sws_shiftVec ( SwsVector * a,
int shift )
static

Definition at line 2088 of file utils.c.

Referenced by sws_getDefaultFilter().

◆ sws_addVec()

static void sws_addVec ( SwsVector * a,
SwsVector * b )
static

Definition at line 2102 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 2120 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 2384 of file utils.c.

Referenced by sws_send_slice().

◆ ff_sws_thread_exec()

int ff_sws_thread_exec ( void * priv,
int(* func )(void *priv, int jobnr, int threadnr, int nb_jobs, int nb_threads),
int nb_threads,
int nb_jobs )

Helper for dispatching a single function across multiple threads.

This is a wrapper around avpriv_slicethread_create2() + avpriv_slicethread_execute2(), falling back to direct invocation if threading is not available.

Definition at line 2444 of file utils.c.

Referenced by ff_sws_enum_op_lists().

Variable Documentation

◆ 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 },
}
@ SWS_SPLINE
unwindowed natural cubic spline
Definition swscale.h:207
@ SWS_BICUBIC
2-tap cubic B-spline
Definition swscale.h:199
@ SWS_AREA
area averaging
Definition swscale.h:202
@ SWS_BICUBLIN
bicubic luma, bilinear chroma
Definition swscale.h:203
@ SWS_BILINEAR
bilinear filtering
Definition swscale.h:198
@ SWS_SINC
unwindowed sinc
Definition swscale.h:205
@ SWS_LANCZOS
3-tap sinc/sinc
Definition swscale.h:206
@ SWS_GAUSS
gaussian approximation
Definition swscale.h:204
@ SWS_FAST_BILINEAR
Scaler selection options.
Definition swscale.h:197
@ SWS_X
experimental
Definition swscale.h:200
@ SWS_POINT
nearest neighbor
Definition swscale.h:201

Definition at line 183 of file utils.c.

Referenced by ff_sws_init_single_context(), and initFilter().

◆ xyzgamma_tab

uint16_t xyzgamma_tab[4096]
static

Definition at line 712 of file utils.c.

Referenced by ff_sws_fill_xyztables(), and init_xyz_tables().

◆ rgbgammainv_tab

uint16_t rgbgammainv_tab[4096]
static

Definition at line 712 of file utils.c.

Referenced by ff_sws_fill_xyztables(), and init_xyz_tables().

◆ rgbgamma_tab

uint16_t rgbgamma_tab[65536]
static

Definition at line 713 of file utils.c.

Referenced by ff_sws_fill_xyztables(), and init_xyz_tables().

◆ xyzgammainv_tab

uint16_t xyzgammainv_tab[65536]
static

Definition at line 713 of file utils.c.

Referenced by ff_sws_fill_xyztables(), and init_xyz_tables().