blob: 8525048b3fc314b0b5e65501e90ac5953d38ca4a
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 { |
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 */ |
106 |