FFmpeg
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Groups Pages
Data Structures | Macros | Typedefs | Enumerations | Functions | Variables
vf_selectivecolor.c File Reference
#include "libavutil/avassert.h"
#include "libavutil/file.h"
#include "libavutil/intreadwrite.h"
#include "libavutil/opt.h"
#include "libavutil/pixdesc.h"
#include "libavcodec/mathops.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  process_range
 
struct  ThreadData
 
struct  SelectiveColorContext
 

Macros

#define R   0
 
#define G   1
 
#define B   2
 
#define A   3
 
#define OFFSET(x)   offsetof(SelectiveColorContext, x)
 
#define FLAGS   AV_OPT_FLAG_FILTERING_PARAM|AV_OPT_FLAG_VIDEO_PARAM
 
#define RANGE_OPTION(color_name, range)   { color_name"s", "adjust "color_name" regions", OFFSET(opt_cmyk_adjust[range]), AV_OPT_TYPE_STRING, {.str=NULL}, CHAR_MIN, CHAR_MAX, FLAGS }
 
#define DECLARE_RANGE_SCALE_FUNCS(nbits)
 
#define READ16(dst)
 
#define DECLARE_SELECTIVE_COLOR_FUNC(nbits)
 
#define DEF_SELECTIVE_COLOR_FUNC(name, direct, correction_method, nbits)
 
#define DEF_SELECTIVE_COLOR_FUNCS(nbits)
 

Typedefs

typedef int(* get_range_scale_func )(int r, int g, int b, int min_val, int max_val)
 
typedef int(* selective_color_func_type )(AVFilterContext *ctx, void *td, int jobnr, int nb_jobs)
 

Enumerations

enum  color_range {
  RANGE_REDS, RANGE_YELLOWS, RANGE_GREENS, RANGE_CYANS,
  RANGE_BLUES, RANGE_MAGENTAS, RANGE_WHITES, RANGE_NEUTRALS,
  RANGE_BLACKS, NB_RANGES
}
 
enum  correction_method { CORRECTION_METHOD_ABSOLUTE, CORRECTION_METHOD_RELATIVE, NB_CORRECTION_METHODS }
 

Functions

 AVFILTER_DEFINE_CLASS (selectivecolor)
 
static int get_rgb_scale (int r, int g, int b, int min_val, int max_val)
 
static int get_cmy_scale (int r, int g, int b, int min_val, int max_val)
 
static int register_range (SelectiveColorContext *s, int range_id)
 
static int parse_psfile (AVFilterContext *ctx, const char *fname)
 
static int config_input (AVFilterLink *inlink)
 
static int query_formats (AVFilterContext *ctx)
 
static int comp_adjust (int scale, float value, float adjust, float k, int correction_method)
 
static int filter_frame (AVFilterLink *inlink, AVFrame *in)
 

Variables

static const char * color_names [NB_RANGES]
 
static const AVOption selectivecolor_options []
 
static const AVFilterPad selectivecolor_inputs []
 
static const AVFilterPad selectivecolor_outputs []
 
AVFilter ff_vf_selectivecolor
 

Macro Definition Documentation

#define R   0
See Also
http://blog.pkh.me/p/22-understanding-selective-coloring-in-adobe-photoshop.html
Todo:
  • use integers so it can be made bitexact and a FATE test can be added

Definition at line 39 of file vf_selectivecolor.c.

#define G   1

Definition at line 40 of file vf_selectivecolor.c.

#define B   2

Definition at line 41 of file vf_selectivecolor.c.

#define A   3

Definition at line 42 of file vf_selectivecolor.c.

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

Definition at line 93 of file vf_selectivecolor.c.

Definition at line 94 of file vf_selectivecolor.c.

#define RANGE_OPTION (   color_name,
  range 
)    { color_name"s", "adjust "color_name" regions", OFFSET(opt_cmyk_adjust[range]), AV_OPT_TYPE_STRING, {.str=NULL}, CHAR_MIN, CHAR_MAX, FLAGS }

Definition at line 95 of file vf_selectivecolor.c.

#define DECLARE_RANGE_SCALE_FUNCS (   nbits)
Value:
static int get_neutrals_scale##nbits(int r, int g, int b, int min_val, int max_val) \
{ \
/* 1 - (|max-0.5| + |min-0.5|) */ \
return (((1<<nbits)-1)*2 - ( abs((max_val<<1) - ((1<<nbits)-1)) \
+ abs((min_val<<1) - ((1<<nbits)-1))) + 1) >> 1; \
} \
\
static int get_whites_scale##nbits(int r, int g, int b, int min_val, int max_val) \
{ \
/* (min - 0.5) * 2 */ \
return (min_val<<1) - ((1<<nbits)-1); \
} \
\
static int get_blacks_scale##nbits(int r, int g, int b, int min_val, int max_val) \
{ \
/* (0.5 - max) * 2 */ \
return ((1<<nbits)-1) - (max_val<<1); \
} \
const char * g
Definition: vf_curves.c:112
const char * b
Definition: vf_curves.c:113
const char * r
Definition: vf_curves.c:111
return

Definition at line 127 of file vf_selectivecolor.c.

#define READ16 (   dst)
Value:
do { \
if (size < 2) { \
goto end; \
} \
dst = AV_RB16(buf); \
buf += 2; \
size -= 2; \
} while (0)
#define AVERROR_INVALIDDATA
Invalid data found when processing input.
Definition: error.h:59
uint64_t_TMPL AV_WL64 unsigned int_TMPL AV_WL32 unsigned int_TMPL AV_WL24 unsigned int_TMPL AV_WL16 uint64_t_TMPL AV_WB64 unsigned int_TMPL AV_WB32 unsigned int_TMPL AV_WB24 unsigned int_TMPL AV_RB16
Definition: bytestream.h:87
static av_cold int end(AVCodecContext *avctx)
Definition: avrndec.c:90
ptrdiff_t size
Definition: opengl_enc.c:101
void * buf
Definition: avisynth_c.h:690
if(ret< 0)
Definition: vf_mcdeint.c:279

Referenced by parse_psfile().

#define DECLARE_SELECTIVE_COLOR_FUNC (   nbits)

Definition at line 316 of file vf_selectivecolor.c.

#define DEF_SELECTIVE_COLOR_FUNC (   name,
  direct,
  correction_method,
  nbits 
)
Value:
static int selective_color_##name##_##nbits(AVFilterContext *ctx, void *arg, int jobnr, int nb_jobs) \
{ \
return selective_color_##nbits(ctx, arg, jobnr, nb_jobs, direct, correction_method); \
}
correction_method
const char * arg
Definition: jacosubdec.c:66
return
AVFormatContext * ctx
Definition: movenc.c:48
#define _
Definition: wtv_common.c:49
An instance of a filter.
Definition: avfilter.h:338
const char * name
Definition: opengl_enc.c:103

Definition at line 396 of file vf_selectivecolor.c.

#define DEF_SELECTIVE_COLOR_FUNCS (   nbits)
Value:
#define DEF_SELECTIVE_COLOR_FUNC(name, direct, correction_method, nbits)
#define DECLARE_SELECTIVE_COLOR_FUNC(nbits)

Definition at line 402 of file vf_selectivecolor.c.

Typedef Documentation

typedef int(* get_range_scale_func)(int r, int g, int b, int min_val, int max_val)

Definition at line 68 of file vf_selectivecolor.c.

typedef int(* selective_color_func_type)(AVFilterContext *ctx, void *td, int jobnr, int nb_jobs)

Definition at line 412 of file vf_selectivecolor.c.

Enumeration Type Documentation

Enumerator
RANGE_REDS 
RANGE_YELLOWS 
RANGE_GREENS 
RANGE_CYANS 
RANGE_BLUES 
RANGE_MAGENTAS 
RANGE_WHITES 
RANGE_NEUTRALS 
RANGE_BLACKS 
NB_RANGES 

Definition at line 44 of file vf_selectivecolor.c.

Enumerator
CORRECTION_METHOD_ABSOLUTE 
CORRECTION_METHOD_RELATIVE 
NB_CORRECTION_METHODS 

Definition at line 58 of file vf_selectivecolor.c.

Function Documentation

AVFILTER_DEFINE_CLASS ( selectivecolor  )
static int get_rgb_scale ( int  r,
int  g,
int  b,
int  min_val,
int  max_val 
)
static

Definition at line 117 of file vf_selectivecolor.c.

Referenced by register_range().

static int get_cmy_scale ( int  r,
int  g,
int  b,
int  min_val,
int  max_val 
)
static

Definition at line 122 of file vf_selectivecolor.c.

Referenced by register_range().

static int register_range ( SelectiveColorContext s,
int  range_id 
)
static

Definition at line 150 of file vf_selectivecolor.c.

Referenced by config_input(), and parse_psfile().

static int parse_psfile ( AVFilterContext ctx,
const char *  fname 
)
static

Definition at line 185 of file vf_selectivecolor.c.

Referenced by config_input().

static int config_input ( AVFilterLink inlink)
static

Definition at line 238 of file vf_selectivecolor.c.

static int query_formats ( AVFilterContext ctx)
static

Definition at line 288 of file vf_selectivecolor.c.

static int comp_adjust ( int  scale,
float  value,
float  adjust,
float  k,
int  correction_method 
)
inlinestatic

Definition at line 306 of file vf_selectivecolor.c.

static int filter_frame ( AVFilterLink inlink,
AVFrame in 
)
static

Definition at line 414 of file vf_selectivecolor.c.

Variable Documentation

const char* color_names[NB_RANGES]
static
Initial value:
= {
"red", "yellow", "green", "cyan", "blue", "magenta", "white", "neutral", "black"
}

Definition at line 64 of file vf_selectivecolor.c.

Referenced by config_input(), register_range(), and test_av_parse_color().

const AVOption selectivecolor_options[]
static
Initial value:
= {
{ "correction_method", "select correction method", OFFSET(correction_method), AV_OPT_TYPE_INT, {.i64 = CORRECTION_METHOD_ABSOLUTE}, 0, NB_CORRECTION_METHODS-1, FLAGS, "correction_method" },
{ "absolute", NULL, 0, AV_OPT_TYPE_CONST, {.i64=CORRECTION_METHOD_ABSOLUTE}, INT_MIN, INT_MAX, FLAGS, "correction_method" },
{ "relative", NULL, 0, AV_OPT_TYPE_CONST, {.i64=CORRECTION_METHOD_RELATIVE}, INT_MIN, INT_MAX, FLAGS, "correction_method" },
{ "psfile", "set Photoshop selectivecolor file name", OFFSET(psfile), AV_OPT_TYPE_STRING, {.str=NULL}, .flags = FLAGS },
{ NULL }
}
#define NULL
Definition: coverity.c:32
correction_method
#define OFFSET(x)
#define RANGE_OPTION(color_name, range)
#define FLAGS

Definition at line 98 of file vf_selectivecolor.c.

const AVFilterPad selectivecolor_inputs[]
static
Initial value:
= {
{
.name = "default",
.filter_frame = filter_frame,
.config_props = config_input,
},
{ NULL }
}
#define NULL
Definition: coverity.c:32
static int filter_frame(AVFilterLink *inlink, AVFrame *in)
static int config_input(AVFilterLink *inlink)

Definition at line 455 of file vf_selectivecolor.c.

const AVFilterPad selectivecolor_outputs[]
static
Initial value:
= {
{
.name = "default",
},
{ NULL }
}
#define NULL
Definition: coverity.c:32

Definition at line 465 of file vf_selectivecolor.c.

AVFilter ff_vf_selectivecolor
Initial value:
= {
.name = "selectivecolor",
.description = NULL_IF_CONFIG_SMALL("Apply CMYK adjustments to specific color ranges."),
.priv_size = sizeof(SelectiveColorContext),
.priv_class = &selectivecolor_class,
}
#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
static const AVFilterPad selectivecolor_inputs[]
static int flags
Definition: log.c:57
#define NULL_IF_CONFIG_SMALL(x)
Return NULL if CONFIG_SMALL is true, otherwise the argument without modification. ...
Definition: internal.h:179
#define AVFILTER_FLAG_SLICE_THREADS
The filter supports multithreading by splitting frames into multiple parts and processing them concur...
Definition: avfilter.h:116
static const AVFilterPad selectivecolor_outputs[]
static const AVFilterPad outputs[]
Definition: af_afftfilt.c:389
static const AVFilterPad inputs[]
Definition: af_afftfilt.c:379
static int query_formats(AVFilterContext *ctx)

Definition at line 473 of file vf_selectivecolor.c.