Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Contribute to GitLab
Sign in / Register
Toggle navigation
F
ffmpeg.wasm-core
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Linshizhi
ffmpeg.wasm-core
Commits
9e4c6948
Commit
9e4c6948
authored
Sep 24, 2002
by
Michael Niedermayer
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
adaptive quantization for h263
Originally committed as revision 969 to
svn://svn.ffmpeg.org/ffmpeg/trunk
parent
d87c0267
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
29 additions
and
8 deletions
+29
-8
h263.c
libavcodec/h263.c
+16
-3
mpegvideo.c
libavcodec/mpegvideo.c
+12
-5
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