FFmpeg
Main Page
Related Pages
Modules
Namespaces
Data Structures
Files
Examples
File List
Globals
•
All
Data Structures
Namespaces
Files
Functions
Variables
Typedefs
Enumerations
Enumerator
Macros
Groups
Pages
libavcodec
mpeg4video.h
Go to the documentation of this file.
1
/*
2
* MPEG4 encoder/decoder internal header.
3
* Copyright (c) 2000,2001 Fabrice Bellard
4
* Copyright (c) 2002-2010 Michael Niedermayer <michaelni@gmx.at>
5
*
6
* This file is part of FFmpeg.
7
*
8
* FFmpeg is free software; you can redistribute it and/or
9
* modify it under the terms of the GNU Lesser General Public
10
* License as published by the Free Software Foundation; either
11
* version 2.1 of the License, or (at your option) any later version.
12
*
13
* FFmpeg 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 GNU
16
* Lesser General Public License for more details.
17
*
18
* You should have received a copy of the GNU Lesser General Public
19
* License along with FFmpeg; if not, write to the Free Software
20
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
21
*/
22
23
#ifndef AVCODEC_MPEG4VIDEO_H
24
#define AVCODEC_MPEG4VIDEO_H
25
26
#include <stdint.h>
27
28
#include "
get_bits.h
"
29
#include "
mpegvideo.h
"
30
#include "
rl.h
"
31
32
// shapes
33
#define RECT_SHAPE 0
34
#define BIN_SHAPE 1
35
#define BIN_ONLY_SHAPE 2
36
#define GRAY_SHAPE 3
37
38
#define SIMPLE_VO_TYPE 1
39
#define CORE_VO_TYPE 3
40
#define MAIN_VO_TYPE 4
41
#define NBIT_VO_TYPE 5
42
#define ARTS_VO_TYPE 10
43
#define ACE_VO_TYPE 12
44
#define ADV_SIMPLE_VO_TYPE 17
45
46
// aspect_ratio_info
47
#define EXTENDED_PAR 15
48
49
//vol_sprite_usage / sprite_enable
50
#define STATIC_SPRITE 1
51
#define GMC_SPRITE 2
52
53
#define MOTION_MARKER 0x1F001
54
#define DC_MARKER 0x6B001
55
56
#define VOS_STARTCODE 0x1B0
57
#define USER_DATA_STARTCODE 0x1B2
58
#define GOP_STARTCODE 0x1B3
59
#define VISUAL_OBJ_STARTCODE 0x1B5
60
#define VOP_STARTCODE 0x1B6
61
62
typedef
struct
Mpeg4DecContext
{
63
MpegEncContext
m
;
64
65
/// number of bits to represent the fractional part of time
66
int
time_increment_bits
;
67
int
shape
;
68
int
vol_sprite_usage
;
69
int
sprite_brightness_change
;
70
int
num_sprite_warping_points
;
71
/// sprite trajectory points
72
uint16_t
sprite_traj
[4][2];
73
/// sprite shift [isChroma]
74
int
sprite_shift
[2];
75
76
// reversible vlc
77
int
rvlc
;
78
/// could this stream contain resync markers
79
int
resync_marker
;
80
/// time distance of first I -> B, used for interlaced b frames
81
int
t_frame
;
82
83
int
new_pred
;
84
int
enhancement_type
;
85
int
scalability
;
86
int
use_intra_dc_vlc
;
87
88
/// QP above whch the ac VLC should be used for intra dc
89
int
intra_dc_threshold
;
90
91
/* bug workarounds */
92
int
divx_version
;
93
int
divx_build
;
94
int
xvid_build
;
95
int
lavc_build
;
96
97
/// flag for having shown the warning about divxs invalid b frames
98
int
showed_packed_warning
;
99
100
int
cplx_estimation_trash_i
;
101
int
cplx_estimation_trash_p
;
102
int
cplx_estimation_trash_b
;
103
}
Mpeg4DecContext
;
104
105
/* dc encoding for mpeg4 */
106
extern
const
uint8_t
ff_mpeg4_DCtab_lum
[13][2];
107
extern
const
uint8_t
ff_mpeg4_DCtab_chrom
[13][2];
108
109
extern
const
uint16_t
ff_mpeg4_intra_vlc
[103][2];
110
extern
const
int8_t
ff_mpeg4_intra_level
[102];
111
extern
const
int8_t
ff_mpeg4_intra_run
[102];
112
113
extern
RLTable
ff_mpeg4_rl_intra
;
114
115
/* Note this is identical to the intra rvlc except that it is reordered. */
116
extern
RLTable
ff_rvlc_rl_inter
;
117
extern
RLTable
ff_rvlc_rl_intra
;
118
119
extern
const
uint16_t
ff_sprite_trajectory_tab
[15][2];
120
extern
const
uint8_t
ff_mb_type_b_tab
[4][2];
121
122
/* these matrixes will be permuted for the idct */
123
extern
const
int16_t
ff_mpeg4_default_intra_matrix
[64];
124
extern
const
int16_t
ff_mpeg4_default_non_intra_matrix
[64];
125
126
extern
const
uint8_t
ff_mpeg4_y_dc_scale_table
[32];
127
extern
const
uint8_t
ff_mpeg4_c_dc_scale_table
[32];
128
extern
const
uint16_t
ff_mpeg4_resync_prefix
[8];
129
130
extern
const
uint8_t
ff_mpeg4_dc_threshold
[8];
131
132
void
ff_mpeg4_encode_mb
(
MpegEncContext
*
s
,
133
int16_t
block
[6][64],
134
int
motion_x,
int
motion_y);
135
void
ff_mpeg4_pred_ac
(
MpegEncContext
*
s
, int16_t *
block
,
int
n
,
136
int
dir);
137
void
ff_set_mpeg4_time
(
MpegEncContext
*
s
);
138
void
ff_mpeg4_encode_picture_header
(
MpegEncContext
*
s
,
int
picture_number);
139
140
int
ff_mpeg4_decode_picture_header
(
Mpeg4DecContext
*ctx,
GetBitContext
*gb);
141
void
ff_mpeg4_encode_video_packet_header
(
MpegEncContext
*
s
);
142
void
ff_mpeg4_clean_buffers
(
MpegEncContext
*
s
);
143
void
ff_mpeg4_stuffing
(
PutBitContext
*pbc);
144
void
ff_mpeg4_init_partitions
(
MpegEncContext
*
s
);
145
void
ff_mpeg4_merge_partitions
(
MpegEncContext
*
s
);
146
void
ff_clean_mpeg4_qscales
(
MpegEncContext
*
s
);
147
int
ff_mpeg4_decode_partitions
(
Mpeg4DecContext
*ctx);
148
int
ff_mpeg4_get_video_packet_prefix_length
(
MpegEncContext
*
s
);
149
int
ff_mpeg4_decode_video_packet_header
(
Mpeg4DecContext
*ctx);
150
void
ff_mpeg4_init_direct_mv
(
MpegEncContext
*
s
);
151
void
ff_mpeg4videodec_static_init
(
void
);
152
int
ff_mpeg4_workaround_bugs
(
AVCodecContext
*avctx);
153
int
ff_mpeg4_frame_end
(
AVCodecContext
*avctx,
const
uint8_t
*
buf
,
int
buf_size);
154
155
/**
156
*
157
* @return the mb_type
158
*/
159
int
ff_mpeg4_set_direct_mv
(
MpegEncContext
*
s
,
int
mx,
int
my);
160
161
extern
uint8_t
ff_mpeg4_static_rl_table_store
[3][2][2 *
MAX_RUN
+
MAX_LEVEL
+ 3];
162
163
#if 0 //3IV1 is quite rare and it slows things down a tiny bit
164
#define IS_3IV1 s->codec_tag == AV_RL32("3IV1")
165
#else
166
#define IS_3IV1 0
167
#endif
168
169
/**
170
* Predict the dc.
171
* encoding quantized level -> quantized diff
172
* decoding quantized diff -> quantized level
173
* @param n block index (0-3 are luma, 4-5 are chroma)
174
* @param dir_ptr pointer to an integer where the prediction direction will be stored
175
*/
176
static
inline
int
ff_mpeg4_pred_dc
(
MpegEncContext
*
s
,
int
n
,
int
level
,
177
int
*dir_ptr,
int
encoding)
178
{
179
int
a
,
b
,
c
,
wrap
,
pred
, scale,
ret
;
180
int16_t *dc_val;
181
182
/* find prediction */
183
if
(n < 4)
184
scale = s->
y_dc_scale
;
185
else
186
scale = s->
c_dc_scale
;
187
if
(
IS_3IV1
)
188
scale = 8;
189
190
wrap = s->
block_wrap
[
n
];
191
dc_val = s->
dc_val
[0] + s->
block_index
[
n
];
192
193
/* B C
194
* A X
195
*/
196
a = dc_val[-1];
197
b = dc_val[-1 -
wrap
];
198
c = dc_val[-
wrap
];
199
200
/* outside slice handling (we can't do that by memset as we need the
201
* dc for error resilience) */
202
if
(s->
first_slice_line
&& n != 3) {
203
if
(n != 2)
204
b = c = 1024;
205
if
(n != 1 && s->
mb_x
== s->
resync_mb_x
)
206
b = a = 1024;
207
}
208
if
(s->
mb_x
== s->
resync_mb_x
&& s->
mb_y
== s->
resync_mb_y
+ 1) {
209
if
(n == 0 || n == 4 || n == 5)
210
b = 1024;
211
}
212
213
if
(abs(a - b) < abs(b - c)) {
214
pred =
c
;
215
*dir_ptr = 1;
/* top */
216
}
else
{
217
pred =
a
;
218
*dir_ptr = 0;
/* left */
219
}
220
/* we assume pred is positive */
221
pred =
FASTDIV
((pred + (scale >> 1)), scale);
222
223
if
(encoding) {
224
ret = level -
pred
;
225
}
else
{
226
level +=
pred
;
227
ret =
level
;
228
if
(s->
err_recognition
& (
AV_EF_BITSTREAM
|
AV_EF_AGGRESSIVE
)) {
229
if
(level < 0) {
230
av_log
(s->
avctx
,
AV_LOG_ERROR
,
231
"dc<0 at %dx%d\n"
, s->
mb_x
, s->
mb_y
);
232
return
-1;
233
}
234
if
(level * scale > 2048 + scale) {
235
av_log
(s->
avctx
,
AV_LOG_ERROR
,
236
"dc overflow at %dx%d\n"
, s->
mb_x
, s->
mb_y
);
237
return
-1;
238
}
239
}
240
}
241
level *= scale;
242
if
(level & (~2047)) {
243
if
(level < 0)
244
level = 0;
245
else
if
(!(s->
workaround_bugs
&
FF_BUG_DC_CLIP
))
246
level = 2047;
247
}
248
dc_val[0] =
level
;
249
250
return
ret
;
251
}
252
253
#endif
/* AVCODEC_MPEG4VIDEO_H */
Generated on Sun Jul 20 2014 23:05:51 for FFmpeg by
1.8.2