1 /***************************************************************************** 2 * 3 * XVID MPEG-4 VIDEO CODEC 4 * - Postprocessing header - 5 * 6 * Copyright(C) 2003-2010 Michael Militzer <isibaar@xvid.org> 7 * 8 * This program is free software ; you can redistribute it and/or modify 9 * it under the terms of the GNU General Public License as published by 10 * the Free Software Foundation ; either version 2 of the License, or 11 * (at your option) any later version. 12 * 13 * This program is distributed in the hope that it will be useful, 14 * but WITHOUT ANY WARRANTY ; without even the implied warranty of 15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 16 * GNU General Public License for more details. 17 * 18 * You should have received a copy of the GNU General Public License 19 * along with this program ; if not, write to the Free Software 20 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA 21 * 22 * $Id: postprocessing.h 1985 2011-05-18 09:02:35Z Isibaar $ 23 * 24 ****************************************************************************/ 25 26 #ifndef _POSTPROCESSING_H_ 27 #define _POSTPROCESSING_H_ 28 29 #include <stdlib.h> 30 #include "../portab.h" 31 32 /* Filtering thresholds */ 33 34 #define THR1 2 35 #define THR2 6 36 37 #define MAX_NOISE 4096 38 #define MAX_SHIFT 1024 39 #define MAX_RES (MAX_NOISE - MAX_SHIFT) 40 41 #define DERING_STRENGTH 2 42 43 typedef struct { 44 int8_t xvid_thresh_tbl[511]; 45 uint8_t xvid_abs_tbl[511]; 46 int8_t xvid_noise1[MAX_NOISE * sizeof(int8_t)]; 47 int8_t xvid_noise2[MAX_NOISE * sizeof(int8_t)]; 48 int8_t *xvid_prev_shift[MAX_RES][6]; 49 int prev_quant; 50 } XVID_POSTPROC; 51 52 typedef struct 53 { 54 pthread_t handle; /* thread's handle */ 55 56 XVID_POSTPROC *tbls; 57 IMAGE * img; 58 const MACROBLOCK * mbs; 59 60 int stride; 61 int start_x; 62 int stop_x; 63 int start_y; 64 int stop_y; 65 int mb_stride; 66 int flags; 67 } SMPDeblock; 68 69 void 70 image_postproc(XVID_POSTPROC *tbls, IMAGE * img, int edged_width, 71 const MACROBLOCK * mbs, int mb_width, int mb_height, int mb_stride, 72 int flags, int brightness, int frame_num, int bvop, int threads); 73 74 void deblock8x8_h(XVID_POSTPROC *tbls, uint8_t *img, int stride, int quant, int dering); 75 void deblock8x8_v(XVID_POSTPROC *tbls, uint8_t *img, int stride, int quant, int dering); 76 77 void init_postproc(XVID_POSTPROC *tbls); 78 void init_noise(XVID_POSTPROC *tbls); 79 void init_deblock(XVID_POSTPROC *tbls); 80 81 void add_noise(XVID_POSTPROC * tbls, uint8_t *dst, uint8_t *src, int stride, int width, int height, int shiftptr, int quant); 82 83 84 typedef void (IMAGEBRIGHTNESS) (uint8_t * dst, 85 int stride, 86 int width, 87 int height, 88 int offset); 89 typedef IMAGEBRIGHTNESS *IMAGEBRIGHTNESS_PTR; 90 91 extern IMAGEBRIGHTNESS_PTR image_brightness; 92 93 IMAGEBRIGHTNESS image_brightness_c; 94 IMAGEBRIGHTNESS image_brightness_mmx; 95 IMAGEBRIGHTNESS image_brightness_sse2; 96 97 #endif 98