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