Coverage Report

Created: 2024-11-21 06:45

/src/trunk/xvidcore/src/encoder.h
Line
Count
Source (jump to first uncovered line)
1
/*****************************************************************************
2
 *
3
 *  XVID MPEG-4 VIDEO CODEC
4
 *  - Encoder related header  -
5
 *
6
 *  Copyright(C) 2002-2010 Michael Militzer <isibaar@xvid.org>
7
 *               2002-2003 Peter Ross <pross@xvid.org>
8
 *
9
 *  This program is free software ; you can redistribute it and/or modify
10
 *  it under the terms of the GNU General Public License as published by
11
 *  the Free Software Foundation ; either version 2 of the License, or
12
 *  (at your option) any later version.
13
 *
14
 *  This program is distributed in the hope that it will be useful,
15
 *  but WITHOUT ANY WARRANTY ; without even the implied warranty of
16
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
17
 *  GNU General Public License for more details.
18
 *
19
 *  You should have received a copy of the GNU General Public License
20
 *  along with this program ; if not, write to the Free Software
21
 *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
22
 *
23
 * $Id: encoder.h 1988 2011-05-18 09:10:05Z Isibaar $
24
 *
25
 ****************************************************************************/
26
27
#ifndef _ENCODER_H_
28
#define _ENCODER_H_
29
30
#include "xvid.h"
31
#include "portab.h"
32
#include "global.h"
33
34
/*****************************************************************************
35
 * Constants
36
 ****************************************************************************/
37
38
/* lambda base exponential. 1<<LAMBDA_EXP is the neutral lambda */
39
0
#define LAMBDA_EXP    6
40
41
/*****************************************************************************
42
 * Types
43
 ****************************************************************************/
44
45
typedef int bool;
46
47
/*****************************************************************************
48
 * Structures
49
 ****************************************************************************/
50
51
typedef struct
52
{
53
    /* --- constants --- */
54
  uint32_t width;
55
  uint32_t height;
56
57
  uint32_t edged_width;
58
  uint32_t edged_height;
59
  uint32_t mb_width;
60
  uint32_t mb_height;
61
62
    int plugin_flags;
63
64
  /* frame rate increment & base */
65
  int32_t fincr;
66
  uint32_t fbase;
67
68
    int profile;
69
70
  int global_flags;
71
  int bquant_ratio;
72
  int bquant_offset;
73
  int frame_drop_ratio;
74
75
    int min_quant[3];
76
    int max_quant[3];
77
78
  int par;
79
  int par_width;
80
  int par_height;
81
82
  int iMaxKeyInterval;
83
  int max_bframes;
84
85
/* --- inbetween vop stuff --- */
86
  /* rounding type; alternate 0-1 after each interframe */
87
  /* 1 <= fixed_code <= 4
88
     automatically adjusted using motion vector statistics inside
89
   */
90
91
  /* vars that not "quite" frame independant */
92
  uint32_t m_rounding_type;
93
  uint32_t m_fcode;
94
    int vol_flags;
95
96
  int64_t m_stamp;
97
98
  uint16_t *mpeg_quant_matrices;
99
  uint32_t last_quant_initialized_intra; /* needed for mpeg matrices initialization */
100
} MBParam;
101
102
typedef struct
103
{
104
  int iTextBits;
105
  int iMvSum;
106
  int iMvCount;
107
  int kblks;
108
  int mblks;
109
  int ublks;
110
  int gblks;
111
  int iMVBits;
112
} Statistics;
113
114
/* encoding queue */
115
typedef struct
116
{
117
  xvid_enc_frame_t frame;
118
  unsigned char quant_intra_matrix[64];
119
  unsigned char quant_inter_matrix[64];
120
  IMAGE image;
121
} QUEUEINFO;
122
123
typedef struct
124
{
125
    int frame_num;
126
    int fincr;
127
  int vol_flags;
128
    int vop_flags;
129
  int motion_flags;
130
131
  int coding_type;
132
  uint32_t quant;
133
  uint32_t rounding_type;
134
  uint32_t fcode;
135
  uint32_t bcode;
136
137
  uint32_t seconds;
138
  uint32_t ticks;
139
  int64_t stamp;
140
141
  IMAGE image;
142
143
  MACROBLOCK *mbs;
144
145
  WARPPOINTS warp;    /* as in bitstream */
146
  GMC_DATA gmc_data;    /* common data for all MBs */
147
  NEW_GMC_DATA new_gmc_data;    /* common data for all MBs */
148
149
    int length;         /* the encoded size of this frame */
150
151
  Statistics sStat;
152
  int is_edged, is_interpolated;
153
} FRAMEINFO;
154
155
#include "motion/motion_smp.h"
156
157
typedef struct
158
{
159
  MBParam mbParam;
160
161
  int iFrameNum;
162
  int bitrate;
163
164
    /* zones */
165
    unsigned int num_zones;
166
    xvid_enc_zone_t * zones;
167
168
    /* plugins */
169
    int num_plugins;    /* note: we store plugin flags in MBPARAM */
170
    xvid_enc_plugin_t * plugins;
171
172
    /* dquant */
173
174
    int * temp_dquants;
175
176
    /* lambda */
177
178
    float * temp_lambda;
179
180
  /* images */
181
182
  FRAMEINFO *current;
183
  FRAMEINFO *reference;
184
185
  IMAGE sOriginal;    /* original image copy for i/p frames */
186
    IMAGE sOriginal2;   /* original image copy for b-frames */
187
  IMAGE vInterH;
188
  IMAGE vInterV;
189
  IMAGE vInterVf;
190
  IMAGE vInterHV;
191
  IMAGE vInterHVf;
192
193
  IMAGE vGMC;
194
195
  /* image queue */
196
  int queue_head;
197
  int queue_tail;
198
  int queue_size;
199
  QUEUEINFO *queue;
200
201
  /* bframe buffer */
202
  int bframenum_head;
203
  int bframenum_tail;
204
  int flush_bframes;
205
206
  FRAMEINFO **bframes;
207
  IMAGE f_refh;
208
  IMAGE f_refv;
209
  IMAGE f_refhv;
210
211
    /* closed_gop fixup temporary storage */
212
  int closed_bframenum; /* == -1 if there is no fixup intended */
213
    QUEUEINFO closed_qframe;  /* qFrame, only valid when >= 0 */
214
215
  /* multithreaded stuff */
216
  int num_threads;      /* number of encoder threads */
217
  SMPData * smpData;      /* data structures used to pass all thread-specific data */
218
219
  int m_framenum; /* debug frame num counter; unlike iFrameNum, does not reset at ivop */
220
221
  float fMvPrevSigma;
222
223
  int num_slices;     /* number of slices to code */
224
} Encoder;
225
226
/*****************************************************************************
227
 * Inline functions
228
 ****************************************************************************/
229
230
static __inline uint8_t
231
get_fcode(uint16_t sr)
232
0
{
233
0
  if (sr <= 16)
234
0
    return 1;
235
0
236
0
  else if (sr <= 32)
237
0
    return 2;
238
0
239
0
  else if (sr <= 64)
240
0
    return 3;
241
0
242
0
  else if (sr <= 128)
243
0
    return 4;
244
0
245
0
  else if (sr <= 256)
246
0
    return 5;
247
0
248
0
  else if (sr <= 512)
249
0
    return 6;
250
0
251
0
  else if (sr <= 1024)
252
0
    return 7;
253
0
254
0
  else
255
0
    return 0;
256
0
}
Unexecuted instantiation: xvid.c:get_fcode
Unexecuted instantiation: mbcoding.c:get_fcode
Unexecuted instantiation: gmc.c:get_fcode
Unexecuted instantiation: mbtransquant.c:get_fcode
Unexecuted instantiation: decoder.c:get_fcode
Unexecuted instantiation: encoder.c:get_fcode
Unexecuted instantiation: bitstream.c:get_fcode
Unexecuted instantiation: estimation_bvop.c:get_fcode
Unexecuted instantiation: estimation_common.c:get_fcode
Unexecuted instantiation: estimation_gmc.c:get_fcode
Unexecuted instantiation: estimation_pvop.c:get_fcode
Unexecuted instantiation: estimation_rd_based.c:get_fcode
Unexecuted instantiation: estimation_rd_based_bvop.c:get_fcode
Unexecuted instantiation: motion_comp.c:get_fcode
Unexecuted instantiation: vop_type_decision.c:get_fcode
Unexecuted instantiation: mbprediction.c:get_fcode
257
258
/*****************************************************************************
259
 * Prototypes
260
 ****************************************************************************/
261
262
void init_encoder(uint32_t cpu_flags);
263
264
int enc_create(xvid_enc_create_t * create);
265
int enc_destroy(Encoder * pEnc);
266
int enc_encode(Encoder * pEnc,
267
           xvid_enc_frame_t * pFrame,
268
           xvid_enc_stats_t * stats);
269
270
#endif