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(EQContext *eq); 104 void ff_eq_init_x86(EQContext *eq); 105 106 #endif /* AVFILTER_EQ_H */ 107