62     char   *comp_expr_str[4];
 
   79 #define OFFSET(x) offsetof(LutContext, x) 
   80 #define FLAGS AV_OPT_FLAG_FILTERING_PARAM|AV_OPT_FLAG_VIDEO_PARAM 
  102     for (i = 0; i < 4; i++) {
 
  109 #define YUV_FORMATS                                         \ 
  110     AV_PIX_FMT_YUV444P,  AV_PIX_FMT_YUV422P,  AV_PIX_FMT_YUV420P,    \ 
  111     AV_PIX_FMT_YUV411P,  AV_PIX_FMT_YUV410P,  AV_PIX_FMT_YUV440P,    \ 
  112     AV_PIX_FMT_YUVA420P,                                       \ 
  113     AV_PIX_FMT_YUVJ444P, AV_PIX_FMT_YUVJ422P, AV_PIX_FMT_YUVJ420P,   \ 
  116 #define RGB_FORMATS                             \ 
  117     AV_PIX_FMT_ARGB,         AV_PIX_FMT_RGBA,         \ 
  118     AV_PIX_FMT_ABGR,         AV_PIX_FMT_BGRA,         \ 
  119     AV_PIX_FMT_RGB24,        AV_PIX_FMT_BGR24 
  139 static double clip(
void *opaque, 
double val)
 
  145     return av_clip(val, minval, maxval);
 
  159     return pow((val-minval)/(maxval-minval), gamma) * (maxval-minval)+minval;
 
  162 static double (* 
const funcs1[])(
void *, double) = {
 
  197         min[
Y] = min[
U] = min[
V] = 16;
 
  199         max[
U] = max[
V] = 240;
 
  200         min[
A] = 0; max[
A] = 255;
 
  203         min[0] = min[1] = min[2] = min[3] = 0;
 
  204         max[0] = max[1] = max[2] = max[3] = 255;
 
  225                    "Error when parsing the expression '%s' for the component %d and color %d.\n",
 
  234         for (val = 0; val < 256; val++) {
 
  239                         min[color], max[color]);
 
  244                        "Error when evaluating the expression '%s' for the value %d for the component %d.\n",
 
  248             lut->
lut[
comp][val] = av_clip((
int)res, min[color], max[color]);
 
  262     uint8_t *inrow, *outrow, *inrow0, *outrow0;
 
  274         inrow0  = in ->
data[0];
 
  275         outrow0 = out->
data[0];
 
  277         for (i = 0; i < in->
video->
h; i ++) {
 
  282             for (j = 0; j < w; j++) {
 
  283                 outrow[0] = 
tab[0][inrow[0]];
 
  285                     outrow[1] = 
tab[1][inrow[1]];
 
  287                         outrow[2] = 
tab[2][inrow[2]];
 
  289                             outrow[3] = 
tab[3][inrow[3]];
 
  301         for (plane = 0; plane < 4 && in->
data[plane]; plane++) {
 
  302             int vsub = plane == 1 || plane == 2 ? lut->
vsub : 0;
 
  303             int hsub = plane == 1 || plane == 2 ? lut->
hsub : 0;
 
  305             inrow  = in ->
data[plane];
 
  306             outrow = out->
data[plane];
 
  308             for (i = 0; i < (in->
video->
h + (1<<vsub) - 1)>>vsub; i ++) {
 
  310                 int w = (inlink->
w + (1<<hsub) - 1)>>hsub;
 
  311                 for (j = 0; j < w; j++)
 
  312                     outrow[j] = tab[inrow[j]];
 
  336 #define DEFINE_LUT_FILTER(name_, description_)                          \ 
  337     AVFilter avfilter_vf_##name_ = {                                    \ 
  339         .description   = NULL_IF_CONFIG_SMALL(description_),            \ 
  340         .priv_size     = sizeof(LutContext),                            \ 
  342         .init          = name_##_init,                                  \ 
  344         .query_formats = query_formats,                                 \ 
  347         .outputs       = outputs,                                       \ 
  348         .priv_class    = &name_##_class,                                \ 
  351 #if CONFIG_LUT_FILTER 
  353 #define lut_options options 
  361     lut->
class = &lut_class;
 
  370 DEFINE_LUT_FILTER(lut, 
"Compute and apply a lookup table to the RGB/YUV input video.");
 
  373 #if CONFIG_LUTYUV_FILTER 
  375 #define lutyuv_options options 
  383     lut->
class = &lutyuv_class;
 
  393 DEFINE_LUT_FILTER(lutyuv, 
"Compute and apply a lookup table to the YUV input video.");
 
  396 #if CONFIG_LUTRGB_FILTER 
  398 #define lutrgb_options options 
  406     lut->
class = &lutrgb_class;
 
  416 DEFINE_LUT_FILTER(lutrgb, 
"Compute and apply a lookup table to the RGB input video.");
 
  419 #if CONFIG_NEGATE_FILTER 
  421 #define negate_options options 
  434     snprintf(lut_params, 
sizeof(lut_params), 
"c0=negval:c1=negval:c2=negval:a=%s",
 
  437     lut->
class = &negate_class;