FFmpeg
Macros | Functions
graph.c File Reference
#include "libavutil/avassert.h"
#include "libavutil/cpu.h"
#include "libavutil/error.h"
#include "libavutil/imgutils.h"
#include "libavutil/macros.h"
#include "libavutil/mem.h"
#include "libavutil/opt.h"
#include "libavutil/pixdesc.h"
#include "libavutil/refstruct.h"
#include "libavutil/slicethread.h"
#include "libswscale/swscale.h"
#include "libswscale/format.h"
#include "cms.h"
#include "lut3d.h"
#include "swscale_internal.h"
#include "graph.h"
#include "ops.h"
#include "ops_dispatch.h"

Go to the source code of this file.

Macros

#define add_convert_pass   add_legacy_sws_pass
 

Functions

int ff_sws_pass_aligned_width (const SwsPass *pass, int width)
 Align width to the optimal size for pass. More...
 
static int frame_alloc_planes (AVFrame *dst)
 
static int pass_alloc_output (SwsPass *pass)
 
static void free_buffer (AVRefStructOpaque opaque, void *obj)
 
static void pass_free (SwsPass *pass)
 
int ff_sws_graph_add_pass (SwsGraph *graph, enum AVPixelFormat fmt, int width, int height, SwsPass *input, int align, SwsPassFunc run, SwsPassSetup setup, void *priv, void(*free_cb)(void *priv), SwsPass **out_pass)
 Allocate and add a new pass to the filter graph. More...
 
static void frame_shift (const SwsFrame *f, const int y, uint8_t *data[4])
 
static void run_copy (const SwsFrame *out, const SwsFrame *in, int y, int h, const SwsPass *pass)
 
static void run_rgb0 (const SwsFrame *out, const SwsFrame *in, int y, int h, const SwsPass *pass)
 
static void run_xyz2rgb (const SwsFrame *out, const SwsFrame *in, int y, int h, const SwsPass *pass)
 
static void run_rgb2xyz (const SwsFrame *out, const SwsFrame *in, int y, int h, const SwsPass *pass)
 
static void free_legacy_swscale (void *priv)
 
static int setup_legacy_swscale (const SwsFrame *out, const SwsFrame *in, const SwsPass *pass)
 
static SwsContextslice_ctx (const SwsPass *pass, int y)
 
static void run_legacy_unscaled (const SwsFrame *out, const SwsFrame *in, int y, int h, const SwsPass *pass)
 
static void run_legacy_swscale (const SwsFrame *out, const SwsFrame *in, int y, int h, const SwsPass *pass)
 
static void get_chroma_pos (SwsGraph *graph, int *h_chr_pos, int *v_chr_pos, const SwsFormat *fmt)
 
static void legacy_chr_pos (SwsGraph *graph, int *chr_pos, int override, int *warned)
 
static int init_legacy_subpass (SwsGraph *graph, SwsContext *sws, SwsPass *input, SwsPass **output)
 
static int add_legacy_sws_pass (SwsGraph *graph, const SwsFormat *src, const SwsFormat *dst, SwsPass *input, SwsPass **output)
 
static void free_lut3d (void *priv)
 
static int setup_lut3d (const SwsFrame *out, const SwsFrame *in, const SwsPass *pass)
 
static void run_lut3d (const SwsFrame *out, const SwsFrame *in, int y, int h, const SwsPass *pass)
 
static int adapt_colors (SwsGraph *graph, SwsFormat src, SwsFormat dst, SwsPass *input, SwsPass **output)
 
static int init_passes (SwsGraph *graph)
 
static void sws_graph_worker (void *priv, int jobnr, int threadnr, int nb_jobs, int nb_threads)
 
SwsGraphff_sws_graph_alloc (void)
 Allocate an empty SwsGraph. More...
 
static void graph_uninit (SwsGraph *graph)
 
int ff_sws_graph_init (SwsGraph *graph, SwsContext *ctx, const SwsFormat *dst, const SwsFormat *src, int field)
 Initialize the filter graph for a given pair of formats. More...
 
int ff_sws_graph_create (SwsContext *ctx, const SwsFormat *dst, const SwsFormat *src, int field, SwsGraph **out_graph)
 Allocate and initialize the filter graph. More...
 
void ff_sws_graph_rollback (SwsGraph *graph, int since_idx)
 Remove all passes added since the given index. More...
 
void ff_sws_graph_free (SwsGraph **pgraph)
 Uninitialize any state associate with this filter graph and free it. More...
 
static int opts_equal (const SwsContext *c1, const SwsContext *c2)
 
int ff_sws_graph_reinit (SwsGraph *graph, SwsContext *ctx, const SwsFormat *dst, const SwsFormat *src, int field)
 Wrapper around ff_sws_graph_init() that reuses the existing graph if the format is compatible. More...
 
void ff_sws_graph_update_metadata (SwsGraph *graph, const SwsColor *color)
 Update dynamic per-frame HDR metadata without requiring a full reinit. More...
 
static void get_field (SwsGraph *graph, const AVFrame *avframe, SwsFrame *frame)
 
int ff_sws_graph_run (SwsGraph *graph, const AVFrame *dst, const AVFrame *src)
 Dispatch the filter graph on a single field of the given frames. More...
 

Macro Definition Documentation

◆ add_convert_pass

#define add_convert_pass   add_legacy_sws_pass

Definition at line 609 of file graph.c.

Function Documentation

◆ ff_sws_pass_aligned_width()

int ff_sws_pass_aligned_width ( const SwsPass pass,
int  width 
)

Align width to the optimal size for pass.

Definition at line 42 of file graph.c.

Referenced by sws_frame_setup().

◆ frame_alloc_planes()

static int frame_alloc_planes ( AVFrame dst)
static

Definition at line 54 of file graph.c.

Referenced by pass_alloc_output().

◆ pass_alloc_output()

static int pass_alloc_output ( SwsPass pass)
static

Definition at line 89 of file graph.c.

Referenced by ff_sws_graph_init().

◆ free_buffer()

static void free_buffer ( AVRefStructOpaque  opaque,
void *  obj 
)
static

Definition at line 113 of file graph.c.

Referenced by ff_sws_graph_add_pass().

◆ pass_free()

static void pass_free ( SwsPass pass)
static

Definition at line 119 of file graph.c.

Referenced by ff_sws_graph_add_pass(), ff_sws_graph_rollback(), and graph_uninit().

◆ ff_sws_graph_add_pass()

int ff_sws_graph_add_pass ( SwsGraph graph,
enum AVPixelFormat  fmt,
int  width,
int  height,
SwsPass input,
int  align,
SwsPassFunc  run,
SwsPassSetup  setup,
void *  priv,
void(*)(void *priv)  free,
SwsPass **  out_pass 
)

Allocate and add a new pass to the filter graph.

Takes over ownership of priv, even on failure.

Parameters
graphFilter graph to add the pass to.
fmtPixel format of the output image.
wWidth of the output image.
hHeight of the output image.
inputPrevious pass to read from, or NULL for the input image.
alignMinimum slice alignment for this pass, or 0 for no threading.
runFilter function to run.
setupOptional setup function to run from the main thread.
privPrivate state for the filter run function.
freeFunction to free the private state.
out_passThe newly added pass will be written here on success.
Returns
0 or a negative error code

Definition at line 127 of file graph.c.

Referenced by adapt_colors(), compile(), init_legacy_subpass(), and init_passes().

◆ frame_shift()

static void frame_shift ( const SwsFrame f,
const int  y,
uint8_t *  data[4] 
)
static

Definition at line 182 of file graph.c.

Referenced by run_copy(), run_legacy_swscale(), run_legacy_unscaled(), and run_lut3d().

◆ run_copy()

static void run_copy ( const SwsFrame out,
const SwsFrame in,
int  y,
int  h,
const SwsPass pass 
)
static

Definition at line 192 of file graph.c.

Referenced by init_passes(), and palette_subblock_data().

◆ run_rgb0()

static void run_rgb0 ( const SwsFrame out,
const SwsFrame in,
int  y,
int  h,
const SwsPass pass 
)
static

Definition at line 218 of file graph.c.

Referenced by init_legacy_subpass().

◆ run_xyz2rgb()

static void run_xyz2rgb ( const SwsFrame out,
const SwsFrame in,
int  y,
int  h,
const SwsPass pass 
)
static

Definition at line 239 of file graph.c.

Referenced by init_legacy_subpass().

◆ run_rgb2xyz()

static void run_rgb2xyz ( const SwsFrame out,
const SwsFrame in,
int  y,
int  h,
const SwsPass pass 
)
static

Definition at line 248 of file graph.c.

Referenced by init_legacy_subpass().

◆ free_legacy_swscale()

static void free_legacy_swscale ( void *  priv)
static

Definition at line 263 of file graph.c.

Referenced by init_legacy_subpass().

◆ setup_legacy_swscale()

static int setup_legacy_swscale ( const SwsFrame out,
const SwsFrame in,
const SwsPass pass 
)
static

Definition at line 269 of file graph.c.

Referenced by init_legacy_subpass().

◆ slice_ctx()

static SwsContext* slice_ctx ( const SwsPass pass,
int  y 
)
inlinestatic

Definition at line 285 of file graph.c.

Referenced by run_legacy_swscale(), and run_legacy_unscaled().

◆ run_legacy_unscaled()

static void run_legacy_unscaled ( const SwsFrame out,
const SwsFrame in,
int  y,
int  h,
const SwsPass pass 
)
static

Definition at line 304 of file graph.c.

Referenced by init_legacy_subpass().

◆ run_legacy_swscale()

static void run_legacy_swscale ( const SwsFrame out,
const SwsFrame in,
int  y,
int  h,
const SwsPass pass 
)
static

Definition at line 316 of file graph.c.

Referenced by init_legacy_subpass().

◆ get_chroma_pos()

static void get_chroma_pos ( SwsGraph graph,
int *  h_chr_pos,
int *  v_chr_pos,
const SwsFormat fmt 
)
static

Definition at line 328 of file graph.c.

Referenced by add_legacy_sws_pass().

◆ legacy_chr_pos()

static void legacy_chr_pos ( SwsGraph graph,
int *  chr_pos,
int  override,
int *  warned 
)
static

Definition at line 371 of file graph.c.

Referenced by add_legacy_sws_pass().

◆ init_legacy_subpass()

static int init_legacy_subpass ( SwsGraph graph,
SwsContext sws,
SwsPass input,
SwsPass **  output 
)
static

For slice threading, we need to create sub contexts, similar to how swscale normally handles it internally. The most important difference is that we handle cascaded contexts before threaded contexts; whereas context_init_threaded() does it the other way around.

Definition at line 387 of file graph.c.

Referenced by add_legacy_sws_pass().

◆ add_legacy_sws_pass()

static int add_legacy_sws_pass ( SwsGraph graph,
const SwsFormat src,
const SwsFormat dst,
SwsPass input,
SwsPass **  output 
)
static

Definition at line 497 of file graph.c.

◆ free_lut3d()

static void free_lut3d ( void *  priv)
static

Definition at line 617 of file graph.c.

Referenced by adapt_colors().

◆ setup_lut3d()

static int setup_lut3d ( const SwsFrame out,
const SwsFrame in,
const SwsPass pass 
)
static

Definition at line 623 of file graph.c.

Referenced by adapt_colors().

◆ run_lut3d()

static void run_lut3d ( const SwsFrame out,
const SwsFrame in,
int  y,
int  h,
const SwsPass pass 
)
static

Definition at line 632 of file graph.c.

Referenced by adapt_colors().

◆ adapt_colors()

static int adapt_colors ( SwsGraph graph,
SwsFormat  src,
SwsFormat  dst,
SwsPass input,
SwsPass **  output 
)
static

Grayspace does not really have primaries, so just force the use of the equivalent other primary set to avoid a conversion. Technically, this does affect the weights used for the Grayscale conversion, but in practise, that should give the expected results more often than not.

Definition at line 644 of file graph.c.

Referenced by init_passes().

◆ init_passes()

static int init_passes ( SwsGraph graph)
static

Definition at line 708 of file graph.c.

Referenced by ff_sws_graph_init().

◆ sws_graph_worker()

static void sws_graph_worker ( void *  priv,
int  jobnr,
int  threadnr,
int  nb_jobs,
int  nb_threads 
)
static

Definition at line 738 of file graph.c.

Referenced by ff_sws_graph_init().

◆ ff_sws_graph_alloc()

SwsGraph* ff_sws_graph_alloc ( void  )

Allocate an empty SwsGraph.

Returns NULL on failure.

Definition at line 749 of file graph.c.

Referenced by ff_sws_graph_create(), and sws_frame_setup().

◆ graph_uninit()

static void graph_uninit ( SwsGraph graph)
static

Definition at line 754 of file graph.c.

Referenced by ff_sws_graph_free(), ff_sws_graph_init(), and ff_sws_graph_reinit().

◆ ff_sws_graph_init()

int ff_sws_graph_init ( SwsGraph graph,
SwsContext ctx,
const SwsFormat dst,
const SwsFormat src,
int  field 
)

Initialize the filter graph for a given pair of formats.

Returns 0 or a negative error.

Definition at line 765 of file graph.c.

Referenced by ff_sws_graph_create(), and ff_sws_graph_reinit().

◆ ff_sws_graph_create()

int ff_sws_graph_create ( SwsContext ctx,
const SwsFormat dst,
const SwsFormat src,
int  field,
SwsGraph **  out_graph 
)

Allocate and initialize the filter graph.

Returns 0 or a negative error.

Definition at line 813 of file graph.c.

◆ ff_sws_graph_rollback()

void ff_sws_graph_rollback ( SwsGraph graph,
int  since_idx 
)

Remove all passes added since the given index.

Definition at line 830 of file graph.c.

Referenced by ff_sws_compile_pass().

◆ ff_sws_graph_free()

void ff_sws_graph_free ( SwsGraph **  pgraph)

Uninitialize any state associate with this filter graph and free it.

Definition at line 837 of file graph.c.

Referenced by ff_sws_graph_create(), sws_frame_setup(), and sws_freeContext().

◆ opts_equal()

static int opts_equal ( const SwsContext c1,
const SwsContext c2 
)
static

Definition at line 849 of file graph.c.

Referenced by ff_sws_graph_reinit().

◆ ff_sws_graph_reinit()

int ff_sws_graph_reinit ( SwsGraph graph,
SwsContext ctx,
const SwsFormat dst,
const SwsFormat src,
int  field 
)

Wrapper around ff_sws_graph_init() that reuses the existing graph if the format is compatible.

This will also update dynamic per-frame metadata.

Must also be called after changing any of the fields in ctx, or else they will have no effect.

Definition at line 867 of file graph.c.

Referenced by sws_frame_setup().

◆ ff_sws_graph_update_metadata()

void ff_sws_graph_update_metadata ( SwsGraph graph,
const SwsColor color 
)

Update dynamic per-frame HDR metadata without requiring a full reinit.

Definition at line 881 of file graph.c.

Referenced by ff_sws_graph_reinit().

◆ get_field()

static void get_field ( SwsGraph graph,
const AVFrame avframe,
SwsFrame frame 
)
static

Definition at line 889 of file graph.c.

Referenced by ff_sws_graph_run().

◆ ff_sws_graph_run()

int ff_sws_graph_run ( SwsGraph graph,
const AVFrame dst,
const AVFrame src 
)

Dispatch the filter graph on a single field of the given frames.

Internally threaded.

Definition at line 916 of file graph.c.