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