FFmpeg
Data Structures | Macros | Functions | Variables
vf_colorlevels.c File Reference
#include "libavutil/imgutils.h"
#include "libavutil/opt.h"
#include "libavutil/pixdesc.h"
#include "avfilter.h"
#include "drawutils.h"
#include "formats.h"
#include "internal.h"
#include "video.h"

Go to the source code of this file.

Data Structures

struct  Range
 
struct  ColorLevelsContext
 
struct  thread_data
 

Macros

#define R   0
 
#define G   1
 
#define B   2
 
#define A   3
 
#define OFFSET(x)   offsetof(ColorLevelsContext, x)
 
#define FLAGS   AV_OPT_FLAG_FILTERING_PARAM|AV_OPT_FLAG_VIDEO_PARAM|AV_OPT_FLAG_RUNTIME_PARAM
 
#define LOAD_COMMON
 

Functions

 AVFILTER_DEFINE_CLASS (colorlevels)
 
static int query_formats (AVFilterContext *ctx)
 
static int config_input (AVFilterLink *inlink)
 
static int colorlevel_slice_8 (AVFilterContext *ctx, void *arg, int jobnr, int nb_jobs)
 
static int colorlevel_slice_16 (AVFilterContext *ctx, void *arg, int jobnr, int nb_jobs)
 
static int filter_frame (AVFilterLink *inlink, AVFrame *in)
 

Variables

static const AVOption colorlevels_options []
 
static const AVFilterPad colorlevels_inputs []
 
static const AVFilterPad colorlevels_outputs []
 
AVFilter ff_vf_colorlevels
 

Macro Definition Documentation

◆ R

#define R   0

Definition at line 30 of file vf_colorlevels.c.

◆ G

#define G   1

Definition at line 31 of file vf_colorlevels.c.

◆ B

#define B   2

Definition at line 32 of file vf_colorlevels.c.

◆ A

#define A   3

Definition at line 33 of file vf_colorlevels.c.

◆ OFFSET

#define OFFSET (   x)    offsetof(ColorLevelsContext, x)

Definition at line 50 of file vf_colorlevels.c.

◆ FLAGS

Definition at line 51 of file vf_colorlevels.c.

◆ LOAD_COMMON

#define LOAD_COMMON
Value:
const struct thread_data *td = arg;\
\
int process_h = td->h;\
const int slice_start = (process_h * jobnr ) / nb_jobs;\
const int slice_end = (process_h * (jobnr+1)) / nb_jobs;\
int x, y;\
const uint8_t *srcrow = td->srcrow;\
uint8_t *dstrow = td->dstrow;\
const int step = s->step;\
const uint8_t offset = td->offset;\
\
int imin = td->imin;\
int omin = td->omin;\
double coeff = td->coeff;\

Definition at line 123 of file vf_colorlevels.c.

Function Documentation

◆ AVFILTER_DEFINE_CLASS()

AVFILTER_DEFINE_CLASS ( colorlevels  )

◆ query_formats()

static int query_formats ( AVFilterContext ctx)
static

Definition at line 74 of file vf_colorlevels.c.

◆ config_input()

static int config_input ( AVFilterLink inlink)
static

Definition at line 93 of file vf_colorlevels.c.

◆ colorlevel_slice_8()

static int colorlevel_slice_8 ( AVFilterContext ctx,
void *  arg,
int  jobnr,
int  nb_jobs 
)
static

Definition at line 140 of file vf_colorlevels.c.

Referenced by filter_frame().

◆ colorlevel_slice_16()

static int colorlevel_slice_16 ( AVFilterContext ctx,
void *  arg,
int  jobnr,
int  nb_jobs 
)
static

Definition at line 155 of file vf_colorlevels.c.

Referenced by filter_frame().

◆ filter_frame()

static int filter_frame ( AVFilterLink inlink,
AVFrame in 
)
static

Definition at line 170 of file vf_colorlevels.c.

Variable Documentation

◆ colorlevels_options

const AVOption colorlevels_options[]
static
Initial value:
= {
{ "rimin", "set input red black point", OFFSET(range[R].in_min), AV_OPT_TYPE_DOUBLE, {.dbl=0}, -1, 1, FLAGS },
{ "gimin", "set input green black point", OFFSET(range[G].in_min), AV_OPT_TYPE_DOUBLE, {.dbl=0}, -1, 1, FLAGS },
{ "bimin", "set input blue black point", OFFSET(range[B].in_min), AV_OPT_TYPE_DOUBLE, {.dbl=0}, -1, 1, FLAGS },
{ "aimin", "set input alpha black point", OFFSET(range[A].in_min), AV_OPT_TYPE_DOUBLE, {.dbl=0}, -1, 1, FLAGS },
{ "rimax", "set input red white point", OFFSET(range[R].in_max), AV_OPT_TYPE_DOUBLE, {.dbl=1}, -1, 1, FLAGS },
{ "gimax", "set input green white point", OFFSET(range[G].in_max), AV_OPT_TYPE_DOUBLE, {.dbl=1}, -1, 1, FLAGS },
{ "bimax", "set input blue white point", OFFSET(range[B].in_max), AV_OPT_TYPE_DOUBLE, {.dbl=1}, -1, 1, FLAGS },
{ "aimax", "set input alpha white point", OFFSET(range[A].in_max), AV_OPT_TYPE_DOUBLE, {.dbl=1}, -1, 1, FLAGS },
{ "romin", "set output red black point", OFFSET(range[R].out_min), AV_OPT_TYPE_DOUBLE, {.dbl=0}, 0, 1, FLAGS },
{ "gomin", "set output green black point", OFFSET(range[G].out_min), AV_OPT_TYPE_DOUBLE, {.dbl=0}, 0, 1, FLAGS },
{ "bomin", "set output blue black point", OFFSET(range[B].out_min), AV_OPT_TYPE_DOUBLE, {.dbl=0}, 0, 1, FLAGS },
{ "aomin", "set output alpha black point", OFFSET(range[A].out_min), AV_OPT_TYPE_DOUBLE, {.dbl=0}, 0, 1, FLAGS },
{ "romax", "set output red white point", OFFSET(range[R].out_max), AV_OPT_TYPE_DOUBLE, {.dbl=1}, 0, 1, FLAGS },
{ "gomax", "set output green white point", OFFSET(range[G].out_max), AV_OPT_TYPE_DOUBLE, {.dbl=1}, 0, 1, FLAGS },
{ "bomax", "set output blue white point", OFFSET(range[B].out_max), AV_OPT_TYPE_DOUBLE, {.dbl=1}, 0, 1, FLAGS },
{ "aomax", "set output alpha white point", OFFSET(range[A].out_max), AV_OPT_TYPE_DOUBLE, {.dbl=1}, 0, 1, FLAGS },
{ NULL }
}

Definition at line 52 of file vf_colorlevels.c.

◆ colorlevels_inputs

const AVFilterPad colorlevels_inputs[]
static
Initial value:
= {
{
.name = "default",
.filter_frame = filter_frame,
.config_props = config_input,
},
{ NULL }
}

Definition at line 301 of file vf_colorlevels.c.

◆ colorlevels_outputs

const AVFilterPad colorlevels_outputs[]
static
Initial value:
= {
{
.name = "default",
},
{ NULL }
}

Definition at line 311 of file vf_colorlevels.c.

◆ ff_vf_colorlevels

AVFilter ff_vf_colorlevels
Initial value:
= {
.name = "colorlevels",
.description = NULL_IF_CONFIG_SMALL("Adjust the color levels."),
.priv_size = sizeof(ColorLevelsContext),
.priv_class = &colorlevels_class,
}

Definition at line 319 of file vf_colorlevels.c.

td
#define td
Definition: regdef.h:70
filter_frame
static int filter_frame(AVFilterLink *inlink, AVFrame *in)
Definition: vf_colorlevels.c:170
colorlevels_inputs
static const AVFilterPad colorlevels_inputs[]
Definition: vf_colorlevels.c:301
step
trying all byte sequences megabyte in length and selecting the best looking sequence will yield cases to try But a word about which is also called distortion Distortion can be quantified by almost any quality measurement one chooses the sum of squared differences is used but more complex methods that consider psychovisual effects can be used as well It makes no difference in this discussion First step
Definition: rate_distortion.txt:58
thread_data::srcrow
const uint8_t * srcrow
Definition: vf_colorlevels.c:109
config_input
static int config_input(AVFilterLink *inlink)
Definition: vf_colorlevels.c:93
A
#define A
Definition: vf_colorlevels.c:33
ColorLevelsContext
Definition: vf_colorlevels.c:40
thread_data
Definition: vf_colorlevels.c:108
s
#define s(width, name)
Definition: cbs_vp9.c:257
AV_OPT_TYPE_DOUBLE
@ AV_OPT_TYPE_DOUBLE
Definition: opt.h:225
slice_end
static int slice_end(AVCodecContext *avctx, AVFrame *pict)
Handle slice ends.
Definition: mpeg12dec.c:2040
outputs
static const AVFilterPad outputs[]
Definition: af_acontrast.c:203
ctx
AVFormatContext * ctx
Definition: movenc.c:48
arg
const char * arg
Definition: jacosubdec.c:66
query_formats
static int query_formats(AVFilterContext *ctx)
Definition: vf_colorlevels.c:74
NULL
#define NULL
Definition: coverity.c:32
inputs
these buffered frames must be flushed immediately if a new input produces new the filter must not call request_frame to get more It must just process the frame or queue it The task of requesting more frames is left to the filter s request_frame method or the application If a filter has several inputs
Definition: filter_design.txt:243
G
#define G
Definition: vf_colorlevels.c:31
OFFSET
#define OFFSET(x)
Definition: vf_colorlevels.c:50
NULL_IF_CONFIG_SMALL
#define NULL_IF_CONFIG_SMALL(x)
Return NULL if CONFIG_SMALL is true, otherwise the argument without modification.
Definition: internal.h:188
ff_filter_process_command
int ff_filter_process_command(AVFilterContext *ctx, const char *cmd, const char *arg, char *res, int res_len, int flags)
Generic processing of user supplied commands that are set in the same way as the filter options.
Definition: avfilter.c:869
B
#define B
Definition: vf_colorlevels.c:32
offset
it s the only field you need to keep assuming you have a context There is some magic you don t need to care about around this just let it vf offset
Definition: writing_filters.txt:86
AVFILTER_FLAG_SUPPORT_TIMELINE_GENERIC
#define AVFILTER_FLAG_SUPPORT_TIMELINE_GENERIC
Some filters support a generic "enable" expression option that can be used to enable or disable a fil...
Definition: avfilter.h:125
process_command
static int process_command(AVFilterContext *ctx, const char *cmd, const char *args, char *res, int res_len, int flags)
Definition: af_afftdn.c:1374
uint8_t
uint8_t
Definition: audio_convert.c:194
thread_data::dstrow
uint8_t * dstrow
Definition: vf_colorlevels.c:110
colorlevels_outputs
static const AVFilterPad colorlevels_outputs[]
Definition: vf_colorlevels.c:311
FLAGS
#define FLAGS
Definition: vf_colorlevels.c:51
AVFILTER_FLAG_SLICE_THREADS
#define AVFILTER_FLAG_SLICE_THREADS
The filter supports multithreading by splitting frames into multiple parts and processing them concur...
Definition: avfilter.h:116
AVMEDIA_TYPE_VIDEO
@ AVMEDIA_TYPE_VIDEO
Definition: avutil.h:201
flags
#define flags(name, subs,...)
Definition: cbs_av1.c:565
coeff
static const double coeff[2][5]
Definition: vf_owdenoise.c:72
thread_data::omin
int omin
Definition: vf_colorlevels.c:120
thread_data::imin
int imin
Definition: vf_colorlevels.c:119
R
#define R
Definition: vf_colorlevels.c:30