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