1 /***************************************************************************** 2 * 3 * XVID MPEG-4 VIDEO CODEC 4 * - Decoder related header - 5 * 6 * Copyright(C) 2002-2010 Peter Ross <pross@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: decoder.h 1985 2011-05-18 09:02:35Z Isibaar $ 23 * 24 ****************************************************************************/ 25 26 #ifndef _DECODER_H_ 27 #define _DECODER_H_ 28 29 #include "xvid.h" 30 #include "portab.h" 31 #include "global.h" 32 #include "image/image.h" 33 #include "image/postprocessing.h" 34 35 /***************************************************************************** 36 * Structures 37 ****************************************************************************/ 38 39 /* complexity estimation toggles */ 40 typedef struct 41 { 42 int method; 43 44 int opaque; 45 int transparent; 46 int intra_cae; 47 int inter_cae; 48 int no_update; 49 int upsampling; 50 51 int intra_blocks; 52 int inter_blocks; 53 int inter4v_blocks; 54 int gmc_blocks; 55 int not_coded_blocks; 56 57 int dct_coefs; 58 int dct_lines; 59 int vlc_symbols; 60 int vlc_bits; 61 62 int apm; 63 int npm; 64 int interpolate_mc_q; 65 int forw_back_mc_q; 66 int halfpel2; 67 int halfpel4; 68 69 int sadct; 70 int quarterpel; 71 } ESTIMATION; 72 73 74 typedef struct 75 { 76 /* vol bitstream */ 77 78 int time_inc_resolution; 79 int fixed_time_inc; 80 uint32_t time_inc_bits; 81 82 uint32_t shape; 83 int ver_id; 84 uint32_t quant_bits; 85 uint32_t quant_type; 86 uint16_t *mpeg_quant_matrices; 87 int32_t quarterpel; 88 int32_t cartoon_mode; 89 int complexity_estimation_disable; 90 ESTIMATION estimation; 91 92 int interlacing; 93 uint32_t top_field_first; 94 uint32_t alternate_vertical_scan; 95 96 int aspect_ratio; 97 int par_width; 98 int par_height; 99 100 int sprite_enable; 101 int sprite_warping_points; 102 int sprite_warping_accuracy; 103 int sprite_brightness_change; 104 105 int newpred_enable; 106 int reduced_resolution_enable; 107 108 /* The bitstream version if it's a Xvid stream */ 109 int bs_version; 110 111 /* image */ 112 113 int fixed_dimensions; 114 uint32_t width; 115 uint32_t height; 116 uint32_t edged_width; 117 uint32_t edged_height; 118 119 IMAGE cur; 120 IMAGE refn[2]; /* 0 -- last I or P VOP */ 121 /* 1 -- first I or P */ 122 IMAGE tmp; /* bframe interpolation, and post processing tmp buffer */ 123 IMAGE qtmp; /* quarter pel tmp buffer */ 124 125 /* postprocessing */ 126 XVID_POSTPROC postproc; 127 128 /* macroblock */ 129 130 uint32_t mb_width; 131 uint32_t mb_height; 132 MACROBLOCK *mbs; 133 134 /* 135 * for B-frame & low_delay==0 136 * XXX: should move frame based stuff into a DECODER_FRAMEINFO struct 137 */ 138 MACROBLOCK *last_mbs; /* last MB */ 139 int last_coding_type; /* last coding type value */ 140 int last_reduced_resolution; /* last reduced_resolution value */ 141 int32_t frames; /* total frame number */ 142 int32_t packed_mode; /* bframes packed bitstream? (1 = yes) */ 143 int8_t scalability; 144 VECTOR p_fmv, p_bmv; /* pred forward & backward motion vector */ 145 int64_t time; /* for record time */ 146 int64_t time_base; 147 int64_t last_time_base; 148 int64_t last_non_b_time; 149 int32_t time_pp; 150 int32_t time_bp; 151 uint32_t low_delay; /* low_delay flage (1 means no B_VOP) */ 152 uint32_t low_delay_default; /* default value for low_delay flag */ 153 154 /* for GMC: central place for all parameters */ 155 156 IMAGE gmc; /* gmc tmp buffer, remove for blockbased compensation */ 157 GMC_DATA gmc_data; 158 NEW_GMC_DATA new_gmc_data; 159 160 xvid_image_t* out_frm; /* This is used for slice rendering */ 161 162 int * qscale; /* quantization table for decoder's stats */ 163 164 /* Tells if the reference image is edged or not */ 165 int is_edged[2]; 166 167 int num_threads; 168 } 169 DECODER; 170 171 /***************************************************************************** 172 * Decoder prototypes 173 ****************************************************************************/ 174 175 void init_decoder(uint32_t cpu_flags); 176 177 int decoder_create(xvid_dec_create_t * param); 178 int decoder_destroy(DECODER * dec); 179 int decoder_decode(DECODER * dec, 180 xvid_dec_frame_t * frame, xvid_dec_stats_t * stats); 181 182 183 #endif 184