FFmpeg
vf_eq.h
1 /*
2  * Original MPlayer filters by Richard Felker, Hampa Hug, Daniel Moreno,
3  * and Michael Niedermeyer.
4  *
5  * Copyright (c) 2014 James Darnley <james.darnley@gmail.com>
6  * Copyright (c) 2015 Arwa Arif <arwaarif1994@gmail.com>
7  *
8  * This file is part of FFmpeg.
9  *
10  * FFmpeg is free software; you can redistribute it and/or modify
11  * it under the terms of the GNU General Public License as published by
12  * the Free Software Foundation; either version 2 of the License, or
13  * (at your option) any later version.
14  *
15  * FFmpeg is distributed in the hope that it will be useful,
16  * but WITHOUT ANY WARRANTY; without even the implied warranty of
17  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
18  * GNU General Public License for more details.
19  *
20  * You should have received a copy of the GNU General Public License along
21  * with FFmpeg; if not, write to the Free Software Foundation, Inc.,
22  * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
23  */
24 
25 #ifndef AVFILTER_EQ_H
26 #define AVFILTER_EQ_H
27 
28 #include "avfilter.h"
29 #include "libavutil/eval.h"
30 
31 static const char *const var_names[] = {
32  "n", // frame count
33  "pos", // frame position
34  "r", // frame rate
35  "t", // timestamp expressed in seconds
36  NULL
37 };
38 
39 enum var_name {
40  VAR_N,
41  VAR_POS,
42  VAR_R,
43  VAR_T,
44  VAR_NB
45 };
46 
47 typedef struct EQParameters {
48  void (*adjust)(struct EQParameters *eq, uint8_t *dst, int dst_stride,
49  const uint8_t *src, int src_stride, int w, int h);
50 
51  uint8_t lut[256];
52 
53  double brightness, contrast, gamma, gamma_weight;
54  int lut_clean;
55 
56 } EQParameters;
57 
58 typedef struct EQContext {
59  const AVClass *class;
60 
61  EQParameters param[3];
62 
63  char *contrast_expr;
64  AVExpr *contrast_pexpr;
65  double contrast;
66 
67  char *brightness_expr;
68  AVExpr *brightness_pexpr;
69  double brightness;
70 
71  char *saturation_expr;
72  AVExpr *saturation_pexpr;
73  double saturation;
74 
75  char *gamma_expr;
76  AVExpr *gamma_pexpr;
77  double gamma;
78 
79  char *gamma_weight_expr;
80  AVExpr *gamma_weight_pexpr;
81  double gamma_weight;
82 
83  char *gamma_r_expr;
84  AVExpr *gamma_r_pexpr;
85  double gamma_r;
86 
87  char *gamma_g_expr;
88  AVExpr *gamma_g_pexpr;
89  double gamma_g;
90 
91  char *gamma_b_expr;
92  AVExpr *gamma_b_pexpr;
93  double gamma_b;
94 
95  double var_values[VAR_NB];
96 
97  void (*process)(struct EQParameters *par, uint8_t *dst, int dst_stride,
98  const uint8_t *src, int src_stride, int w, int h);
99 
100  enum EvalMode { EVAL_MODE_INIT, EVAL_MODE_FRAME, EVAL_MODE_NB } eval_mode;
101 } EQContext;
102 
103 void ff_eq_init_x86(EQContext *eq);
104 
105 #endif /* AVFILTER_EQ_H */
Definition: vf_eq.h:47
Main libavfilter public API header.
Definition: eval.c:157
Definition: vf_eq.h:58
Describe the class of an AVClass context structure.
Definition: log.h:67
simple arithmetic expression evaluator