Skip to content
GitLab
Menu
Projects
Groups
Snippets
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
Menu
Open sidebar
BC
public
external
ffmpeg
Commits
9e4c6948
Commit
9e4c6948
authored
Sep 24, 2002
by
Michael Niedermayer
Browse files
adaptive quantization for h263
Originally committed as revision 969 to
svn://svn.ffmpeg.org/ffmpeg/trunk
parent
d87c0267
Changes
3
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
29 additions
and
8 deletions
+29
-8
libavcodec/h263.c
libavcodec/h263.c
+16
-3
libavcodec/mpegvideo.c
libavcodec/mpegvideo.c
+12
-5
libavcodec/mpegvideo.h
libavcodec/mpegvideo.h
+1
-0
No files found.
libavcodec/h263.c
View file @
9e4c6948
...
...
@@ -332,9 +332,8 @@ static inline int decide_ac_pred(MpegEncContext * s, DCTELEM block[6][64], int d
return
score0
>
score1
?
1
:
0
;
}
void
ff_clean_
mpeg4
_qscales
(
MpegEncContext
*
s
){
void
ff_clean_
h263
_qscales
(
MpegEncContext
*
s
){
int
i
;
/* more braindead iso mpeg mess */
for
(
i
=
1
;
i
<
s
->
mb_num
;
i
++
){
if
(
s
->
qscale_table
[
i
]
-
s
->
qscale_table
[
i
-
1
]
>
2
)
...
...
@@ -344,6 +343,12 @@ void ff_clean_mpeg4_qscales(MpegEncContext *s){
if
(
s
->
qscale_table
[
i
]
-
s
->
qscale_table
[
i
+
1
]
>
2
)
s
->
qscale_table
[
i
]
=
s
->
qscale_table
[
i
+
1
]
+
2
;
}
}
void
ff_clean_mpeg4_qscales
(
MpegEncContext
*
s
){
int
i
;
ff_clean_h263_qscales
(
s
);
for
(
i
=
1
;
i
<
s
->
mb_num
;
i
++
){
if
(
s
->
qscale_table
[
i
]
!=
s
->
qscale_table
[
i
-
1
]
&&
(
s
->
mb_type
[
i
]
&
MB_TYPE_INTER4V
)){
...
...
@@ -743,6 +748,7 @@ void h263_encode_mb(MpegEncContext * s,
INT16
pred_dc
;
INT16
rec_intradc
[
6
];
UINT16
*
dc_ptr
[
6
];
const
int
dquant_code
[
5
]
=
{
1
,
0
,
9
,
2
,
3
};
//printf("**mb x=%d y=%d\n", s->mb_x, s->mb_y);
if
(
!
s
->
mb_intra
)
{
...
...
@@ -752,19 +758,22 @@ void h263_encode_mb(MpegEncContext * s,
if
(
s
->
block_last_index
[
i
]
>=
0
)
cbp
|=
1
<<
(
5
-
i
);
}
if
((
cbp
|
motion_x
|
motion_y
)
==
0
)
{
if
((
cbp
|
motion_x
|
motion_y
|
s
->
dquant
)
==
0
)
{
/* skip macroblock */
put_bits
(
&
s
->
pb
,
1
,
1
);
return
;
}
put_bits
(
&
s
->
pb
,
1
,
0
);
/* mb coded */
cbpc
=
cbp
&
3
;
if
(
s
->
dquant
)
cbpc
+=
8
;
put_bits
(
&
s
->
pb
,
inter_MCBPC_bits
[
cbpc
],
inter_MCBPC_code
[
cbpc
]);
cbpy
=
cbp
>>
2
;
cbpy
^=
0xf
;
put_bits
(
&
s
->
pb
,
cbpy_tab
[
cbpy
][
1
],
cbpy_tab
[
cbpy
][
0
]);
if
(
s
->
dquant
)
put_bits
(
&
s
->
pb
,
2
,
dquant_code
[
s
->
dquant
+
2
]);
/* motion vectors: 16x16 mode only now */
h263_pred_motion
(
s
,
0
,
&
pred_x
,
&
pred_y
);
...
...
@@ -828,10 +837,12 @@ void h263_encode_mb(MpegEncContext * s,
cbpc
=
cbp
&
3
;
if
(
s
->
pict_type
==
I_TYPE
)
{
if
(
s
->
dquant
)
cbpc
+=
4
;
put_bits
(
&
s
->
pb
,
intra_MCBPC_bits
[
cbpc
],
intra_MCBPC_code
[
cbpc
]);
}
else
{
if
(
s
->
dquant
)
cbpc
+=
8
;
put_bits
(
&
s
->
pb
,
1
,
0
);
/* mb coded */
put_bits
(
&
s
->
pb
,
inter_MCBPC_bits
[
cbpc
+
4
],
...
...
@@ -843,6 +854,8 @@ void h263_encode_mb(MpegEncContext * s,
}
cbpy
=
cbp
>>
2
;
put_bits
(
&
s
->
pb
,
cbpy_tab
[
cbpy
][
1
],
cbpy_tab
[
cbpy
][
0
]);
if
(
s
->
dquant
)
put_bits
(
&
s
->
pb
,
2
,
dquant_code
[
s
->
dquant
+
2
]);
}
for
(
i
=
0
;
i
<
6
;
i
++
)
{
...
...
libavcodec/mpegvideo.c
View file @
9e4c6948
...
...
@@ -2190,12 +2190,19 @@ static void encode_picture(MpegEncContext *s, int picture_number)
else
s
->
frame_qscale
=
ff_rate_estimate_qscale
(
s
);
if
(
s
->
adaptive_quant
&&
s
->
codec_id
==
CODEC_ID_MPEG4
)
ff_clean_mpeg4_qscales
(
s
);
if
(
s
->
adaptive_quant
)
if
(
s
->
adaptive_quant
){
switch
(
s
->
codec_id
){
case
CODEC_ID_MPEG4
:
ff_clean_mpeg4_qscales
(
s
);
break
;
case
CODEC_ID_H263
:
case
CODEC_ID_H263P
:
ff_clean_h263_qscales
(
s
);
break
;
}
s
->
qscale
=
s
->
qscale_table
[
0
];
else
}
else
s
->
qscale
=
(
int
)(
s
->
frame_qscale
+
0
.
5
);
if
(
s
->
out_format
==
FMT_MJPEG
)
{
...
...
libavcodec/mpegvideo.h
View file @
9e4c6948
...
...
@@ -587,6 +587,7 @@ void ff_mpeg4_init_partitions(MpegEncContext *s);
void
ff_mpeg4_merge_partitions
(
MpegEncContext
*
s
);
extern
inline
int
ff_mpeg4_pred_dc
(
MpegEncContext
*
s
,
int
n
,
UINT16
**
dc_val_ptr
,
int
*
dir_ptr
);
void
ff_clean_mpeg4_qscales
(
MpegEncContext
*
s
);
void
ff_clean_h263_qscales
(
MpegEncContext
*
s
);
/* rv10.c */
void
rv10_encode_picture_header
(
MpegEncContext
*
s
,
int
picture_number
);
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment