FFmpeg
Main Page
Related Pages
Modules
Data Structures
Files
Examples
File List
Globals
All
Data Structures
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
RLTable
ff_mpeg4_rl_intra
;
67
68
/* Note this is identical to the intra rvlc except that it is reordered. */
69
extern
RLTable
ff_rvlc_rl_inter
;
70
extern
RLTable
ff_rvlc_rl_intra
;
71
72
extern
const
uint16_t
ff_sprite_trajectory_tab
[15][2];
73
extern
const
uint8_t
ff_mb_type_b_tab
[4][2];
74
75
/* these matrixes will be permuted for the idct */
76
extern
const
int16_t
ff_mpeg4_default_intra_matrix
[64];
77
extern
const
int16_t
ff_mpeg4_default_non_intra_matrix
[64];
78
79
extern
const
uint8_t
ff_mpeg4_y_dc_scale_table
[32];
80
extern
const
uint8_t
ff_mpeg4_c_dc_scale_table
[32];
81
extern
const
uint16_t
ff_mpeg4_resync_prefix
[8];
82
83
extern
const
uint8_t
ff_mpeg4_dc_threshold
[8];
84
85
void
ff_mpeg4_encode_mb
(
MpegEncContext
*s,
86
DCTELEM
block
[6][64],
87
int
motion_x,
int
motion_y);
88
void
ff_mpeg4_pred_ac
(
MpegEncContext
* s,
DCTELEM
*
block
,
int
n,
89
int
dir);
90
void
ff_set_mpeg4_time
(
MpegEncContext
* s);
91
void
ff_mpeg4_encode_picture_header
(
MpegEncContext
*s,
int
picture_number);
92
93
int
ff_mpeg4_decode_picture_header
(
MpegEncContext
* s,
GetBitContext
*gb);
94
void
ff_mpeg4_encode_video_packet_header
(
MpegEncContext
*s);
95
void
ff_mpeg4_clean_buffers
(
MpegEncContext
*s);
96
void
ff_mpeg4_stuffing
(
PutBitContext
* pbc);
97
void
ff_mpeg4_init_partitions
(
MpegEncContext
*s);
98
void
ff_mpeg4_merge_partitions
(
MpegEncContext
*s);
99
void
ff_clean_mpeg4_qscales
(
MpegEncContext
*s);
100
int
ff_mpeg4_decode_partitions
(
MpegEncContext
*s);
101
int
ff_mpeg4_get_video_packet_prefix_length
(
MpegEncContext
*s);
102
int
ff_mpeg4_decode_video_packet_header
(
MpegEncContext
*s);
103
void
ff_mpeg4_init_direct_mv
(
MpegEncContext
*s);
104
void
ff_mpeg4videodec_static_init
(
void
);
105
106
/**
107
*
108
* @return the mb_type
109
*/
110
int
ff_mpeg4_set_direct_mv
(
MpegEncContext
*s,
int
mx,
int
my);
111
112
extern
uint8_t
ff_mpeg4_static_rl_table_store
[3][2][2*
MAX_RUN
+
MAX_LEVEL
+ 3];
113
114
115
#if 0 //3IV1 is quite rare and it slows things down a tiny bit
116
#define IS_3IV1 s->codec_tag == AV_RL32("3IV1")
117
#else
118
#define IS_3IV1 0
119
#endif
120
121
122
/**
123
* Predict the dc.
124
* encoding quantized level -> quantized diff
125
* decoding quantized diff -> quantized level
126
* @param n block index (0-3 are luma, 4-5 are chroma)
127
* @param dir_ptr pointer to an integer where the prediction direction will be stored
128
*/
129
static
inline
int
ff_mpeg4_pred_dc
(
MpegEncContext
* s,
int
n,
int
level
,
int
*dir_ptr,
int
encoding)
130
{
131
int
a
,
b
,
c
,
wrap
,
pred
,
scale
, ret;
132
int16_t *dc_val;
133
134
/* find prediction */
135
if
(n < 4) {
136
scale = s->
y_dc_scale
;
137
}
else
{
138
scale = s->
c_dc_scale
;
139
}
140
if
(
IS_3IV1
)
141
scale= 8;
142
143
wrap= s->
block_wrap
[n];
144
dc_val = s->
dc_val
[0] + s->
block_index
[n];
145
146
/* B C
147
* A X
148
*/
149
a = dc_val[ - 1];
150
b = dc_val[ - 1 -
wrap
];
151
c = dc_val[ -
wrap
];
152
153
/* outside slice handling (we can't do that by memset as we need the dc for error resilience) */
154
if
(s->
first_slice_line
&& n!=3){
155
if
(n!=2) b=c= 1024;
156
if
(n!=1 && s->
mb_x
== s->
resync_mb_x
) b=a= 1024;
157
}
158
if
(s->
mb_x
== s->
resync_mb_x
&& s->
mb_y
== s->
resync_mb_y
+1){
159
if
(n==0 || n==4 || n==5)
160
b=1024;
161
}
162
163
if
(abs(a - b) < abs(b - c)) {
164
pred =
c
;
165
*dir_ptr = 1;
/* top */
166
}
else
{
167
pred =
a
;
168
*dir_ptr = 0;
/* left */
169
}
170
/* we assume pred is positive */
171
pred =
FASTDIV
((pred + (scale >> 1)), scale);
172
173
if
(encoding){
174
ret = level -
pred
;
175
}
else
{
176
level +=
pred
;
177
ret=
level
;
178
if
(s->
err_recognition
&(
AV_EF_BITSTREAM
|
AV_EF_AGGRESSIVE
)){
179
if
(level<0){
180
av_log
(s->
avctx
,
AV_LOG_ERROR
,
"dc<0 at %dx%d\n"
, s->
mb_x
, s->
mb_y
);
181
return
-1;
182
}
183
if
(level*scale > 2048 + scale){
184
av_log
(s->
avctx
,
AV_LOG_ERROR
,
"dc overflow at %dx%d\n"
, s->
mb_x
, s->
mb_y
);
185
return
-1;
186
}
187
}
188
}
189
level *=
scale
;
190
if
(level&(~2047)){
191
if
(level<0)
192
level=0;
193
else
if
(!(s->
workaround_bugs
&
FF_BUG_DC_CLIP
))
194
level=2047;
195
}
196
dc_val[0]=
level
;
197
198
return
ret;
199
}
200
#endif
/* AVCODEC_MPEG4VIDEO_H */
Generated on Sat May 25 2013 03:58:37 for FFmpeg by
1.8.2