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
#include "
get_bits.h
"
28
#include "
mpegvideo.h
"
29
#include "
rl.h
"
30
31
// shapes
32
#define RECT_SHAPE 0
33
#define BIN_SHAPE 1
34
#define BIN_ONLY_SHAPE 2
35
#define GRAY_SHAPE 3
36
37
#define SIMPLE_VO_TYPE 1
38
#define CORE_VO_TYPE 3
39
#define MAIN_VO_TYPE 4
40
#define NBIT_VO_TYPE 5
41
#define ARTS_VO_TYPE 10
42
#define ACE_VO_TYPE 12
43
#define ADV_SIMPLE_VO_TYPE 17
44
45
// aspect_ratio_info
46
#define EXTENDED_PAR 15
47
48
//vol_sprite_usage / sprite_enable
49
#define STATIC_SPRITE 1
50
#define GMC_SPRITE 2
51
52
#define MOTION_MARKER 0x1F001
53
#define DC_MARKER 0x6B001
54
55
#define VOS_STARTCODE 0x1B0
56
#define USER_DATA_STARTCODE 0x1B2
57
#define GOP_STARTCODE 0x1B3
58
#define VISUAL_OBJ_STARTCODE 0x1B5
59
#define VOP_STARTCODE 0x1B6
60
61
/* dc encoding for mpeg4 */
62
extern
const
uint8_t
ff_mpeg4_DCtab_lum
[13][2];
63
extern
const
uint8_t
ff_mpeg4_DCtab_chrom
[13][2];
64
65
extern
const
uint16_t
ff_mpeg4_intra_vlc
[103][2];
66
extern
const
int8_t
ff_mpeg4_intra_level
[102];
67
extern
const
int8_t
ff_mpeg4_intra_run
[102];
68
69
extern
RLTable
ff_mpeg4_rl_intra
;
70
71
/* Note this is identical to the intra rvlc except that it is reordered. */
72
extern
RLTable
ff_rvlc_rl_inter
;
73
extern
RLTable
ff_rvlc_rl_intra
;
74
75
extern
const
uint16_t
ff_sprite_trajectory_tab
[15][2];
76
extern
const
uint8_t
ff_mb_type_b_tab
[4][2];
77
78
/* these matrixes will be permuted for the idct */
79
extern
const
int16_t
ff_mpeg4_default_intra_matrix
[64];
80
extern
const
int16_t
ff_mpeg4_default_non_intra_matrix
[64];
81
82
extern
const
uint8_t
ff_mpeg4_y_dc_scale_table
[32];
83
extern
const
uint8_t
ff_mpeg4_c_dc_scale_table
[32];
84
extern
const
uint16_t
ff_mpeg4_resync_prefix
[8];
85
86
extern
const
uint8_t
ff_mpeg4_dc_threshold
[8];
87
88
void
ff_mpeg4_encode_mb
(
MpegEncContext
*
s
,
89
int16_t
block
[6][64],
90
int
motion_x,
int
motion_y);
91
void
ff_mpeg4_pred_ac
(
MpegEncContext
*
s
, int16_t *
block
,
int
n
,
92
int
dir);
93
void
ff_set_mpeg4_time
(
MpegEncContext
*
s
);
94
void
ff_mpeg4_encode_picture_header
(
MpegEncContext
*
s
,
int
picture_number);
95
96
int
ff_mpeg4_decode_picture_header
(
MpegEncContext
*
s
,
GetBitContext
*gb);
97
void
ff_mpeg4_encode_video_packet_header
(
MpegEncContext
*
s
);
98
void
ff_mpeg4_clean_buffers
(
MpegEncContext
*
s
);
99
void
ff_mpeg4_stuffing
(
PutBitContext
* pbc);
100
void
ff_mpeg4_init_partitions
(
MpegEncContext
*
s
);
101
void
ff_mpeg4_merge_partitions
(
MpegEncContext
*
s
);
102
void
ff_clean_mpeg4_qscales
(
MpegEncContext
*
s
);
103
int
ff_mpeg4_decode_partitions
(
MpegEncContext
*
s
);
104
int
ff_mpeg4_get_video_packet_prefix_length
(
MpegEncContext
*
s
);
105
int
ff_mpeg4_decode_video_packet_header
(
MpegEncContext
*
s
);
106
void
ff_mpeg4_init_direct_mv
(
MpegEncContext
*
s
);
107
void
ff_mpeg4videodec_static_init
(
void
);
108
109
/**
110
*
111
* @return the mb_type
112
*/
113
int
ff_mpeg4_set_direct_mv
(
MpegEncContext
*
s
,
int
mx,
int
my);
114
115
extern
uint8_t
ff_mpeg4_static_rl_table_store
[3][2][2*
MAX_RUN
+
MAX_LEVEL
+ 3];
116
117
118
#if 0 //3IV1 is quite rare and it slows things down a tiny bit
119
#define IS_3IV1 s->codec_tag == AV_RL32("3IV1")
120
#else
121
#define IS_3IV1 0
122
#endif
123
124
125
/**
126
* Predict the dc.
127
* encoding quantized level -> quantized diff
128
* decoding quantized diff -> quantized level
129
* @param n block index (0-3 are luma, 4-5 are chroma)
130
* @param dir_ptr pointer to an integer where the prediction direction will be stored
131
*/
132
static
inline
int
ff_mpeg4_pred_dc
(
MpegEncContext
*
s
,
int
n
,
int
level
,
int
*dir_ptr,
int
encoding)
133
{
134
int
a
,
b
,
c
,
wrap
,
pred
,
scale
,
ret
;
135
int16_t *dc_val;
136
137
/* find prediction */
138
if
(n < 4) {
139
scale = s->
y_dc_scale
;
140
}
else
{
141
scale = s->
c_dc_scale
;
142
}
143
if
(
IS_3IV1
)
144
scale= 8;
145
146
wrap= s->
block_wrap
[
n
];
147
dc_val = s->
dc_val
[0] + s->
block_index
[
n
];
148
149
/* B C
150
* A X
151
*/
152
a = dc_val[ - 1];
153
b = dc_val[ - 1 -
wrap
];
154
c = dc_val[ -
wrap
];
155
156
/* outside slice handling (we can't do that by memset as we need the dc for error resilience) */
157
if
(s->
first_slice_line
&& n!=3){
158
if
(n!=2) b=c= 1024;
159
if
(n!=1 && s->
mb_x
== s->
resync_mb_x
) b=a= 1024;
160
}
161
if
(s->
mb_x
== s->
resync_mb_x
&& s->
mb_y
== s->
resync_mb_y
+1){
162
if
(n==0 || n==4 || n==5)
163
b=1024;
164
}
165
166
if
(abs(a - b) < abs(b - c)) {
167
pred =
c
;
168
*dir_ptr = 1;
/* top */
169
}
else
{
170
pred =
a
;
171
*dir_ptr = 0;
/* left */
172
}
173
/* we assume pred is positive */
174
pred =
FASTDIV
((pred + (scale >> 1)), scale);
175
176
if
(encoding){
177
ret = level -
pred
;
178
}
else
{
179
level +=
pred
;
180
ret=
level
;
181
if
(s->
err_recognition
&(
AV_EF_BITSTREAM
|
AV_EF_AGGRESSIVE
)){
182
if
(level<0){
183
av_log
(s->
avctx
,
AV_LOG_ERROR
,
"dc<0 at %dx%d\n"
, s->
mb_x
, s->
mb_y
);
184
return
-1;
185
}
186
if
(level*scale > 2048 + scale){
187
av_log
(s->
avctx
,
AV_LOG_ERROR
,
"dc overflow at %dx%d\n"
, s->
mb_x
, s->
mb_y
);
188
return
-1;
189
}
190
}
191
}
192
level *=
scale
;
193
if
(level&(~2047)){
194
if
(level<0)
195
level=0;
196
else
if
(!(s->
workaround_bugs
&
FF_BUG_DC_CLIP
))
197
level=2047;
198
}
199
dc_val[0]=
level
;
200
201
return
ret
;
202
}
203
#endif
/* AVCODEC_MPEG4VIDEO_H */
Generated on Sat Jan 25 2014 19:51:51 for FFmpeg by
1.8.2