1 /* 2 * Copyright (c) 2013 Paul B Mahol 3 * 4 * This file is part of FFmpeg. 5 * 6 * FFmpeg is free software; you can redistribute it and/or 7 * modify it under the terms of the GNU Lesser General Public 8 * License as published by the Free Software Foundation; either 9 * version 2.1 of the License, or (at your option) any later version. 10 * 11 * FFmpeg is distributed in the hope that it will be useful, 12 * but WITHOUT ANY WARRANTY; without even the implied warranty of 13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 14 * Lesser General Public License for more details. 15 * 16 * You should have received a copy of the GNU Lesser General Public 17 * License along with FFmpeg; if not, write to the Free Software 18 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA 19 */ 20 21 #ifndef AVFILTER_BLEND_H 22 #define AVFILTER_BLEND_H 23 24 #include "libavutil/eval.h" 25 #include "avfilter.h" 26 27 enum BlendMode { 28 BLEND_UNSET = -1, 29 BLEND_NORMAL, 30 BLEND_ADDITION, 31 BLEND_AND, 32 BLEND_AVERAGE, 33 BLEND_BURN, 34 BLEND_DARKEN, 35 BLEND_DIFFERENCE, 36 BLEND_GRAINEXTRACT, 37 BLEND_DIVIDE, 38 BLEND_DODGE, 39 BLEND_EXCLUSION, 40 BLEND_HARDLIGHT, 41 BLEND_LIGHTEN, 42 BLEND_MULTIPLY, 43 BLEND_NEGATION, 44 BLEND_OR, 45 BLEND_OVERLAY, 46 BLEND_PHOENIX, 47 BLEND_PINLIGHT, 48 BLEND_REFLECT, 49 BLEND_SCREEN, 50 BLEND_SOFTLIGHT, 51 BLEND_SUBTRACT, 52 BLEND_VIVIDLIGHT, 53 BLEND_XOR, 54 BLEND_HARDMIX, 55 BLEND_LINEARLIGHT, 56 BLEND_GLOW, 57 BLEND_GRAINMERGE, 58 BLEND_MULTIPLY128, 59 BLEND_HEAT, 60 BLEND_FREEZE, 61 BLEND_EXTREMITY, 62 BLEND_SOFTDIFFERENCE, 63 BLEND_GEOMETRIC, 64 BLEND_HARMONIC, 65 BLEND_BLEACH, 66 BLEND_STAIN, 67 BLEND_INTERPOLATE, 68 BLEND_HARDOVERLAY, 69 BLEND_NB 70 }; 71 72 typedef struct FilterParams { 73 enum BlendMode mode; 74 double opacity; 75 AVExpr *e; 76 char *expr_str; 77 void (*blend)(const uint8_t *top, ptrdiff_t top_linesize, 78 const uint8_t *bottom, ptrdiff_t bottom_linesize, 79 uint8_t *dst, ptrdiff_t dst_linesize, 80 ptrdiff_t width, ptrdiff_t height, 81 struct FilterParams *param, double *values, int starty); 82 } FilterParams; 83 84 void ff_blend_init_x86(FilterParams *param, int depth); 85 86 #endif /* AVFILTER_BLEND_H */ 87