1 /* 2 * This file is part of FFmpeg. 3 * 4 * FFmpeg is free software; you can redistribute it and/or 5 * modify it under the terms of the GNU Lesser General Public 6 * License as published by the Free Software Foundation; either 7 * version 2.1 of the License, or (at your option) any later version. 8 * 9 * FFmpeg is distributed in the hope that it will be useful, 10 * but WITHOUT ANY WARRANTY; without even the implied warranty of 11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 12 * Lesser General Public License for more details. 13 * 14 * You should have received a copy of the GNU Lesser General Public 15 * License along with FFmpeg; if not, write to the Free Software 16 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA 17 */ 18 19 #ifndef AVFILTER_OVERLAY_H 20 #define AVFILTER_OVERLAY_H 21 22 #include "libavutil/eval.h" 23 #include "libavutil/pixdesc.h" 24 #include "framesync.h" 25 #include "avfilter.h" 26 27 enum var_name { 28 VAR_MAIN_W, VAR_MW, 29 VAR_MAIN_H, VAR_MH, 30 VAR_OVERLAY_W, VAR_OW, 31 VAR_OVERLAY_H, VAR_OH, 32 VAR_HSUB, 33 VAR_VSUB, 34 VAR_X, 35 VAR_Y, 36 VAR_N, 37 VAR_POS, 38 VAR_T, 39 VAR_VARS_NB 40 }; 41 42 enum OverlayFormat { 43 OVERLAY_FORMAT_YUV420, 44 OVERLAY_FORMAT_YUV420P10, 45 OVERLAY_FORMAT_YUV422, 46 OVERLAY_FORMAT_YUV422P10, 47 OVERLAY_FORMAT_YUV444, 48 OVERLAY_FORMAT_RGB, 49 OVERLAY_FORMAT_GBRP, 50 OVERLAY_FORMAT_AUTO, 51 OVERLAY_FORMAT_NB 52 }; 53 54 typedef struct OverlayContext { 55 const AVClass *class; 56 int x, y; ///< position of overlaid picture 57 58 uint8_t main_is_packed_rgb; 59 uint8_t main_rgba_map[4]; 60 uint8_t main_has_alpha; 61 uint8_t overlay_is_packed_rgb; 62 uint8_t overlay_rgba_map[4]; 63 uint8_t overlay_has_alpha; 64 int format; ///< OverlayFormat 65 int alpha_format; 66 int eval_mode; ///< EvalMode 67 68 FFFrameSync fs; 69 70 int main_pix_step[4]; ///< steps per pixel for each plane of the main output 71 int overlay_pix_step[4]; ///< steps per pixel for each plane of the overlay 72 int hsub, vsub; ///< chroma subsampling values 73 const AVPixFmtDescriptor *main_desc; ///< format descriptor for main input 74 75 double var_values[VAR_VARS_NB]; 76 char *x_expr, *y_expr; 77 78 AVExpr *x_pexpr, *y_pexpr; 79 80 int (*blend_row[4])(uint8_t *d, uint8_t *da, uint8_t *s, uint8_t *a, int w, 81 ptrdiff_t alinesize); 82 int (*blend_slice)(AVFilterContext *ctx, void *arg, int jobnr, int nb_jobs); 83 } OverlayContext; 84 85 void ff_overlay_init_x86(OverlayContext *s, int format, int pix_format, 86 int alpha_format, int main_has_alpha); 87 88 #endif /* AVFILTER_OVERLAY_H */ 89