Skip to content
GitLab
Projects
Groups
Snippets
Help
Loading...
Help
What's new
10
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Open sidebar
Xiph.Org
aom-rav1e
Commits
d9f9a34b
Commit
d9f9a34b
authored
Aug 11, 2016
by
clang-format
Committed by
James Zern
Aug 12, 2016
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
vp10/encoder: apply clang-format
Change-Id: I58a42ced5b8a4338524434ff3356850b89aa705a
parent
7feae8e8
Changes
83
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
83 changed files
with
9082 additions
and
11790 deletions
+9082
-11790
vp10/encoder/aq_complexity.c
vp10/encoder/aq_complexity.c
+27
-29
vp10/encoder/aq_complexity.h
vp10/encoder/aq_complexity.h
+2
-3
vp10/encoder/aq_cyclicrefresh.c
vp10/encoder/aq_cyclicrefresh.c
+64
-72
vp10/encoder/aq_cyclicrefresh.h
vp10/encoder/aq_cyclicrefresh.h
+8
-9
vp10/encoder/aq_variance.c
vp10/encoder/aq_variance.c
+32
-36
vp10/encoder/aq_variance.h
vp10/encoder/aq_variance.h
+0
-1
vp10/encoder/arm/neon/dct_neon.c
vp10/encoder/arm/neon/dct_neon.c
+8
-11
vp10/encoder/arm/neon/error_neon.c
vp10/encoder/arm/neon/error_neon.c
+1
-1
vp10/encoder/arm/neon/quantize_neon.c
vp10/encoder/arm/neon/quantize_neon.c
+20
-21
vp10/encoder/bitstream.c
vp10/encoder/bitstream.c
+466
-575
vp10/encoder/bitstream.h
vp10/encoder/bitstream.h
+0
-1
vp10/encoder/block.h
vp10/encoder/block.h
+3
-3
vp10/encoder/blockiness.c
vp10/encoder/blockiness.c
+10
-10
vp10/encoder/buf_ans.h
vp10/encoder/buf_ans.h
+6
-6
vp10/encoder/context_tree.c
vp10/encoder/context_tree.c
+44
-46
vp10/encoder/cost.c
vp10/encoder/cost.c
+104
-112
vp10/encoder/cost.h
vp10/encoder/cost.h
+3
-4
vp10/encoder/dct.c
vp10/encoder/dct.c
+147
-181
vp10/encoder/encodeframe.c
vp10/encoder/encodeframe.c
+1098
-1399
vp10/encoder/encodeframe.h
vp10/encoder/encodeframe.h
+3
-4
vp10/encoder/encodemb.c
vp10/encoder/encodemb.c
+152
-196
vp10/encoder/encodemb.h
vp10/encoder/encodemb.h
+8
-9
vp10/encoder/encodemv.c
vp10/encoder/encodemv.c
+51
-63
vp10/encoder/encodemv.h
vp10/encoder/encodemv.h
+3
-4
vp10/encoder/encoder.c
vp10/encoder/encoder.c
+910
-1314
vp10/encoder/encoder.h
vp10/encoder/encoder.h
+58
-68
vp10/encoder/ethread.c
vp10/encoder/ethread.c
+9
-12
vp10/encoder/extend.c
vp10/encoder/extend.c
+36
-46
vp10/encoder/extend.h
vp10/encoder/extend.h
+3
-5
vp10/encoder/firstpass.c
vp10/encoder/firstpass.c
+345
-439
vp10/encoder/firstpass.h
vp10/encoder/firstpass.h
+5
-6
vp10/encoder/global_motion.c
vp10/encoder/global_motion.c
+6
-6
vp10/encoder/global_motion.h
vp10/encoder/global_motion.h
+0
-2
vp10/encoder/hybrid_fwd_txfm.c
vp10/encoder/hybrid_fwd_txfm.c
+32
-61
vp10/encoder/lookahead.c
vp10/encoder/lookahead.c
+29
-50
vp10/encoder/lookahead.h
vp10/encoder/lookahead.h
+14
-19
vp10/encoder/mbgraph.c
vp10/encoder/mbgraph.c
+60
-80
vp10/encoder/mbgraph.h
vp10/encoder/mbgraph.h
+1
-3
vp10/encoder/mcomp.c
vp10/encoder/mcomp.c
+906
-1117
vp10/encoder/mcomp.h
vp10/encoder/mcomp.h
+58
-108
vp10/encoder/mips/msa/error_msa.c
vp10/encoder/mips/msa/error_msa.c
+79
-86
vp10/encoder/mips/msa/fdct16x16_msa.c
vp10/encoder/mips/msa/fdct16x16_msa.c
+63
-70
vp10/encoder/mips/msa/fdct4x4_msa.c
vp10/encoder/mips/msa/fdct4x4_msa.c
+3
-5
vp10/encoder/mips/msa/fdct8x8_msa.c
vp10/encoder/mips/msa/fdct8x8_msa.c
+28
-30
vp10/encoder/mips/msa/fdct_msa.h
vp10/encoder/mips/msa/fdct_msa.h
+91
-92
vp10/encoder/mips/msa/temporal_filter_msa.c
vp10/encoder/mips/msa/temporal_filter_msa.c
+41
-47
vp10/encoder/palette.c
vp10/encoder/palette.c
+4
-7
vp10/encoder/picklpf.c
vp10/encoder/picklpf.c
+14
-17
vp10/encoder/picklpf.h
vp10/encoder/picklpf.h
+0
-1
vp10/encoder/pickrst.c
vp10/encoder/pickrst.c
+69
-86
vp10/encoder/pickrst.h
vp10/encoder/pickrst.h
+2
-3
vp10/encoder/quantize.c
vp10/encoder/quantize.c
+248
-454
vp10/encoder/quantize.h
vp10/encoder/quantize.h
+46
-84
vp10/encoder/ratectrl.c
vp10/encoder/ratectrl.c
+233
-293
vp10/encoder/ratectrl.h
vp10/encoder/ratectrl.h
+31
-32
vp10/encoder/rd.c
vp10/encoder/rd.c
+113
-151
vp10/encoder/rd.h
vp10/encoder/rd.h
+18
-20
vp10/encoder/rdopt.c
vp10/encoder/rdopt.c
+1995
-2550
vp10/encoder/rdopt.h
vp10/encoder/rdopt.h
+21
-27
vp10/encoder/resize.c
vp10/encoder/resize.c
+215
-323
vp10/encoder/resize.h
vp10/encoder/resize.h
+41
-106
vp10/encoder/segmentation.c
vp10/encoder/segmentation.c
+63
-77
vp10/encoder/segmentation.h
vp10/encoder/segmentation.h
+5
-8
vp10/encoder/speed_features.c
vp10/encoder/speed_features.c
+57
-56
vp10/encoder/speed_features.h
vp10/encoder/speed_features.h
+26
-38
vp10/encoder/subexp.c
vp10/encoder/subexp.c
+57
-70
vp10/encoder/subexp.h
vp10/encoder/subexp.h
+14
-21
vp10/encoder/temporal_filter.c
vp10/encoder/temporal_filter.c
+133
-213
vp10/encoder/tokenize.c
vp10/encoder/tokenize.c
+324
-338
vp10/encoder/tokenize.h
vp10/encoder/tokenize.h
+20
-22
vp10/encoder/treewriter.c
vp10/encoder/treewriter.c
+3
-3
vp10/encoder/treewriter.h
vp10/encoder/treewriter.h
+7
-7
vp10/encoder/variance_tree.c
vp10/encoder/variance_tree.c
+4
-7
vp10/encoder/variance_tree.h
vp10/encoder/variance_tree.h
+9
-12
vp10/encoder/wedge_utils.c
vp10/encoder/wedge_utils.c
+11
-18
vp10/encoder/x86/dct_intrin_sse2.c
vp10/encoder/x86/dct_intrin_sse2.c
+93
-98
vp10/encoder/x86/dct_ssse3.c
vp10/encoder/x86/dct_ssse3.c
+38
-42
vp10/encoder/x86/error_intrin_avx2.c
vp10/encoder/x86/error_intrin_avx2.c
+5
-7
vp10/encoder/x86/highbd_block_error_intrin_sse2.c
vp10/encoder/x86/highbd_block_error_intrin_sse2.c
+17
-17
vp10/encoder/x86/highbd_fwd_txfm_sse4.c
vp10/encoder/x86/highbd_fwd_txfm_sse4.c
+51
-46
vp10/encoder/x86/quantize_sse2.c
vp10/encoder/x86/quantize_sse2.c
+35
-36
vp10/encoder/x86/vp10_highbd_quantize_sse4.c
vp10/encoder/x86/vp10_highbd_quantize_sse4.c
+12
-20
vp10/encoder/x86/wedge_utils_sse2.c
vp10/encoder/x86/wedge_utils_sse2.c
+11
-18
No files found.
vp10/encoder/aq_complexity.c
View file @
d9f9a34b
...
...
@@ -19,25 +19,27 @@
#include "vpx_dsp/vpx_dsp_common.h"
#include "vpx_ports/system_state.h"
#define AQ_C_SEGMENTS
5
#define DEFAULT_AQ2_SEG 3
// Neutral Q segment
#define AQ_C_SEGMENTS 5
#define DEFAULT_AQ2_SEG 3 // Neutral Q segment
#define AQ_C_STRENGTHS 3
static
const
double
aq_c_q_adj_factor
[
AQ_C_STRENGTHS
][
AQ_C_SEGMENTS
]
=
{
{
1
.
75
,
1
.
25
,
1
.
05
,
1
.
00
,
0
.
90
},
{
2
.
00
,
1
.
50
,
1
.
15
,
1
.
00
,
0
.
85
},
{
2
.
50
,
1
.
75
,
1
.
25
,
1
.
00
,
0
.
80
}
};
static
const
double
aq_c_transitions
[
AQ_C_STRENGTHS
][
AQ_C_SEGMENTS
]
=
{
{
0
.
15
,
0
.
30
,
0
.
55
,
2
.
00
,
100
.
0
},
{
0
.
20
,
0
.
40
,
0
.
65
,
2
.
00
,
100
.
0
},
{
0
.
25
,
0
.
50
,
0
.
75
,
2
.
00
,
100
.
0
}
};
static
const
double
aq_c_var_thresholds
[
AQ_C_STRENGTHS
][
AQ_C_SEGMENTS
]
=
{
{
-
4
.
0
,
-
3
.
0
,
-
2
.
0
,
100
.
00
,
100
.
0
},
{
-
3
.
5
,
-
2
.
5
,
-
1
.
5
,
100
.
00
,
100
.
0
},
{
-
3
.
0
,
-
2
.
0
,
-
1
.
0
,
100
.
00
,
100
.
0
}
};
static
const
double
aq_c_q_adj_factor
[
AQ_C_STRENGTHS
][
AQ_C_SEGMENTS
]
=
{
{
1
.
75
,
1
.
25
,
1
.
05
,
1
.
00
,
0
.
90
},
{
2
.
00
,
1
.
50
,
1
.
15
,
1
.
00
,
0
.
85
},
{
2
.
50
,
1
.
75
,
1
.
25
,
1
.
00
,
0
.
80
}
};
static
const
double
aq_c_transitions
[
AQ_C_STRENGTHS
][
AQ_C_SEGMENTS
]
=
{
{
0
.
15
,
0
.
30
,
0
.
55
,
2
.
00
,
100
.
0
},
{
0
.
20
,
0
.
40
,
0
.
65
,
2
.
00
,
100
.
0
},
{
0
.
25
,
0
.
50
,
0
.
75
,
2
.
00
,
100
.
0
}
};
static
const
double
aq_c_var_thresholds
[
AQ_C_STRENGTHS
][
AQ_C_SEGMENTS
]
=
{
{
-
4
.
0
,
-
3
.
0
,
-
2
.
0
,
100
.
00
,
100
.
0
},
{
-
3
.
5
,
-
2
.
5
,
-
1
.
5
,
100
.
00
,
100
.
0
},
{
-
3
.
0
,
-
2
.
0
,
-
1
.
0
,
100
.
00
,
100
.
0
}
};
#define DEFAULT_COMPLEXITY 64
static
int
get_aq_c_strength
(
int
q_index
,
vpx_bit_depth_t
bit_depth
)
{
// Approximate base quatizer (truncated to int)
const
int
base_quant
=
vp10_ac_quant
(
q_index
,
0
,
bit_depth
)
/
4
;
...
...
@@ -81,14 +83,11 @@ void vp10_setup_in_frame_q_adj(VP10_COMP *cpi) {
for
(
segment
=
0
;
segment
<
AQ_C_SEGMENTS
;
++
segment
)
{
int
qindex_delta
;
if
(
segment
==
DEFAULT_AQ2_SEG
)
continue
;
qindex_delta
=
vp10_compute_qdelta_by_rate
(
&
cpi
->
rc
,
cm
->
frame_type
,
cm
->
base_qindex
,
aq_c_q_adj_factor
[
aq_strength
][
segment
],
cm
->
bit_depth
);
if
(
segment
==
DEFAULT_AQ2_SEG
)
continue
;
qindex_delta
=
vp10_compute_qdelta_by_rate
(
&
cpi
->
rc
,
cm
->
frame_type
,
cm
->
base_qindex
,
aq_c_q_adj_factor
[
aq_strength
][
segment
],
cm
->
bit_depth
);
// For AQ complexity mode, we dont allow Q0 in a segment if the base
// Q is not 0. Q0 (lossless) implies 4x4 only and in AQ mode 2 a segment
...
...
@@ -112,7 +111,7 @@ void vp10_setup_in_frame_q_adj(VP10_COMP *cpi) {
// The choice of segment for a block depends on the ratio of the projected
// bits for the block vs a target average and its spatial complexity.
void
vp10_caq_select_segment
(
VP10_COMP
*
cpi
,
MACROBLOCK
*
mb
,
BLOCK_SIZE
bs
,
int
mi_row
,
int
mi_col
,
int
projected_rate
)
{
int
mi_row
,
int
mi_col
,
int
projected_rate
)
{
VP10_COMMON
*
const
cm
=
&
cpi
->
common
;
const
int
mi_offset
=
mi_row
*
cm
->
mi_cols
+
mi_col
;
...
...
@@ -134,19 +133,18 @@ void vp10_caq_select_segment(VP10_COMP *cpi, MACROBLOCK *mb, BLOCK_SIZE bs,
const
int
aq_strength
=
get_aq_c_strength
(
cm
->
base_qindex
,
cm
->
bit_depth
);
vpx_clear_system_state
();
low_var_thresh
=
(
cpi
->
oxcf
.
pass
==
2
)
?
VPXMAX
(
cpi
->
twopass
.
mb_av_energy
,
MIN_DEFAULT_LV_THRESH
)
:
DEFAULT_LV_THRESH
;
low_var_thresh
=
(
cpi
->
oxcf
.
pass
==
2
)
?
VPXMAX
(
cpi
->
twopass
.
mb_av_energy
,
MIN_DEFAULT_LV_THRESH
)
:
DEFAULT_LV_THRESH
;
vp10_setup_src_planes
(
mb
,
cpi
->
Source
,
mi_row
,
mi_col
);
logvar
=
vp10_log_block_var
(
cpi
,
mb
,
bs
);
segment
=
AQ_C_SEGMENTS
-
1
;
// Just in case no break out below.
segment
=
AQ_C_SEGMENTS
-
1
;
// Just in case no break out below.
for
(
i
=
0
;
i
<
AQ_C_SEGMENTS
;
++
i
)
{
// Test rate against a threshold value and variance against a threshold.
// Increasing segment number (higher variance and complexity) = higher Q.
if
((
projected_rate
<
target_rate
*
aq_c_transitions
[
aq_strength
][
i
])
&&
if
((
projected_rate
<
target_rate
*
aq_c_transitions
[
aq_strength
][
i
])
&&
(
logvar
<
(
low_var_thresh
+
aq_c_var_thresholds
[
aq_strength
][
i
])))
{
segment
=
i
;
break
;
...
...
vp10/encoder/aq_complexity.h
View file @
d9f9a34b
...
...
@@ -8,7 +8,6 @@
* be found in the AUTHORS file in the root of the source tree.
*/
#ifndef VP10_ENCODER_AQ_COMPLEXITY_H_
#define VP10_ENCODER_AQ_COMPLEXITY_H_
...
...
@@ -23,8 +22,8 @@ struct macroblock;
// Select a segment for the current Block.
void
vp10_caq_select_segment
(
struct
VP10_COMP
*
cpi
,
struct
macroblock
*
,
BLOCK_SIZE
bs
,
int
mi_row
,
int
mi_col
,
int
projected_rate
);
BLOCK_SIZE
bs
,
int
mi_row
,
int
mi_col
,
int
projected_rate
);
// This function sets up a set of segments with delta Q values around
// the baseline frame quantizer.
...
...
vp10/encoder/aq_cyclicrefresh.c
View file @
d9f9a34b
...
...
@@ -59,8 +59,7 @@ struct CYCLIC_REFRESH {
CYCLIC_REFRESH
*
vp10_cyclic_refresh_alloc
(
int
mi_rows
,
int
mi_cols
)
{
size_t
last_coded_q_map_size
;
CYCLIC_REFRESH
*
const
cr
=
vpx_calloc
(
1
,
sizeof
(
*
cr
));
if
(
cr
==
NULL
)
return
NULL
;
if
(
cr
==
NULL
)
return
NULL
;
cr
->
map
=
vpx_calloc
(
mi_rows
*
mi_cols
,
sizeof
(
*
cr
->
map
));
if
(
cr
->
map
==
NULL
)
{
...
...
@@ -94,7 +93,7 @@ static int apply_cyclic_refresh_bitrate(const VP10_COMMON *cm,
// Average bits available per frame = avg_frame_bandwidth
// Number of (8x8) blocks in frame = mi_rows * mi_cols;
const
float
factor
=
0
.
25
;
const
int
number_blocks
=
cm
->
mi_rows
*
cm
->
mi_cols
;
const
int
number_blocks
=
cm
->
mi_rows
*
cm
->
mi_cols
;
// The condition below corresponds to turning off at target bitrates:
// (at 30fps), ~12kbps for CIF, 36kbps for VGA, 100kps for HD/720p.
// Also turn off at very small frame sizes, to avoid too large fraction of
...
...
@@ -111,10 +110,8 @@ static int apply_cyclic_refresh_bitrate(const VP10_COMMON *cm,
// size of the coding block (i.e., below min_block size rejected), coding
// mode, and rate/distortion.
static
int
candidate_refresh_aq
(
const
CYCLIC_REFRESH
*
cr
,
const
MB_MODE_INFO
*
mbmi
,
int64_t
rate
,
int64_t
dist
,
int
bsize
)
{
const
MB_MODE_INFO
*
mbmi
,
int64_t
rate
,
int64_t
dist
,
int
bsize
)
{
MV
mv
=
mbmi
->
mv
[
0
].
as_mv
;
// Reject the block for lower-qp coding if projected distortion
// is above the threshold, and any of the following is true:
...
...
@@ -126,11 +123,9 @@ static int candidate_refresh_aq(const CYCLIC_REFRESH *cr,
mv
.
col
>
cr
->
motion_thresh
||
mv
.
col
<
-
cr
->
motion_thresh
||
!
is_inter_block
(
mbmi
)))
return
CR_SEGMENT_ID_BASE
;
else
if
(
bsize
>=
BLOCK_16X16
&&
rate
<
cr
->
thresh_rate_sb
&&
is_inter_block
(
mbmi
)
&&
mbmi
->
mv
[
0
].
as_int
==
0
&&
cr
->
rate_boost_fac
>
10
)
else
if
(
bsize
>=
BLOCK_16X16
&&
rate
<
cr
->
thresh_rate_sb
&&
is_inter_block
(
mbmi
)
&&
mbmi
->
mv
[
0
].
as_int
==
0
&&
cr
->
rate_boost_fac
>
10
)
// More aggressive delta-q for bigger blocks with zero motion.
return
CR_SEGMENT_ID_BOOST2
;
else
...
...
@@ -141,9 +136,8 @@ static int candidate_refresh_aq(const CYCLIC_REFRESH *cr,
static
int
compute_deltaq
(
const
VP10_COMP
*
cpi
,
int
q
,
double
rate_factor
)
{
const
CYCLIC_REFRESH
*
const
cr
=
cpi
->
cyclic_refresh
;
const
RATE_CONTROL
*
const
rc
=
&
cpi
->
rc
;
int
deltaq
=
vp10_compute_qdelta_by_rate
(
rc
,
cpi
->
common
.
frame_type
,
q
,
rate_factor
,
cpi
->
common
.
bit_depth
);
int
deltaq
=
vp10_compute_qdelta_by_rate
(
rc
,
cpi
->
common
.
frame_type
,
q
,
rate_factor
,
cpi
->
common
.
bit_depth
);
if
((
-
deltaq
)
>
cr
->
max_qdelta_perc
*
q
/
100
)
{
deltaq
=
-
cr
->
max_qdelta_perc
*
q
/
100
;
}
...
...
@@ -155,7 +149,7 @@ static int compute_deltaq(const VP10_COMP *cpi, int q, double rate_factor) {
// (with different delta-q). Note this function is called in the postencode
// (called from rc_update_rate_correction_factors()).
int
vp10_cyclic_refresh_estimate_bits_at_q
(
const
VP10_COMP
*
cpi
,
double
correction_factor
)
{
double
correction_factor
)
{
const
VP10_COMMON
*
const
cm
=
&
cpi
->
common
;
const
CYCLIC_REFRESH
*
const
cr
=
cpi
->
cyclic_refresh
;
int
estimated_bits
;
...
...
@@ -166,17 +160,18 @@ int vp10_cyclic_refresh_estimate_bits_at_q(const VP10_COMP *cpi,
double
weight_segment1
=
(
double
)
cr
->
actual_num_seg1_blocks
/
num8x8bl
;
double
weight_segment2
=
(
double
)
cr
->
actual_num_seg2_blocks
/
num8x8bl
;
// Take segment weighted average for estimated bits.
estimated_bits
=
(
int
)((
1
.
0
-
weight_segment1
-
weight_segment2
)
*
vp10_estimate_bits_at_q
(
cm
->
frame_type
,
cm
->
base_qindex
,
mbs
,
correction_factor
,
cm
->
bit_depth
)
+
weight_segment1
*
vp10_estimate_bits_at_q
(
cm
->
frame_type
,
cm
->
base_qindex
+
cr
->
qindex_delta
[
1
],
mbs
,
correction_factor
,
cm
->
bit_depth
)
+
weight_segment2
*
vp10_estimate_bits_at_q
(
cm
->
frame_type
,
cm
->
base_qindex
+
cr
->
qindex_delta
[
2
],
mbs
,
correction_factor
,
cm
->
bit_depth
));
estimated_bits
=
(
int
)((
1
.
0
-
weight_segment1
-
weight_segment2
)
*
vp10_estimate_bits_at_q
(
cm
->
frame_type
,
cm
->
base_qindex
,
mbs
,
correction_factor
,
cm
->
bit_depth
)
+
weight_segment1
*
vp10_estimate_bits_at_q
(
cm
->
frame_type
,
cm
->
base_qindex
+
cr
->
qindex_delta
[
1
],
mbs
,
correction_factor
,
cm
->
bit_depth
)
+
weight_segment2
*
vp10_estimate_bits_at_q
(
cm
->
frame_type
,
cm
->
base_qindex
+
cr
->
qindex_delta
[
2
],
mbs
,
correction_factor
,
cm
->
bit_depth
));
return
estimated_bits
;
}
...
...
@@ -186,24 +181,28 @@ int vp10_cyclic_refresh_estimate_bits_at_q(const VP10_COMP *cpi,
// Note: the segment map is set to either 0/CR_SEGMENT_ID_BASE (no refresh) or
// to 1/CR_SEGMENT_ID_BOOST1 (refresh) for each superblock, prior to encoding.
int
vp10_cyclic_refresh_rc_bits_per_mb
(
const
VP10_COMP
*
cpi
,
int
i
,
double
correction_factor
)
{
double
correction_factor
)
{
const
VP10_COMMON
*
const
cm
=
&
cpi
->
common
;
CYCLIC_REFRESH
*
const
cr
=
cpi
->
cyclic_refresh
;
int
bits_per_mb
;
int
num8x8bl
=
cm
->
MBs
<<
2
;
// Weight for segment prior to encoding: take the average of the target
// number for the frame to be encoded and the actual from the previous frame.
double
weight_segment
=
(
double
)((
cr
->
target_num_seg_blocks
+
cr
->
actual_num_seg1_blocks
+
cr
->
actual_num_seg2_blocks
)
>>
1
)
/
double
weight_segment
=
(
double
)((
cr
->
target_num_seg_blocks
+
cr
->
actual_num_seg1_blocks
+
cr
->
actual_num_seg2_blocks
)
>>
1
)
/
num8x8bl
;
// Compute delta-q corresponding to qindex i.
int
deltaq
=
compute_deltaq
(
cpi
,
i
,
cr
->
rate_ratio_qdelta
);
// Take segment weighted average for bits per mb.
bits_per_mb
=
(
int
)((
1
.
0
-
weight_segment
)
*
vp10_rc_bits_per_mb
(
cm
->
frame_type
,
i
,
correction_factor
,
cm
->
bit_depth
)
+
weight_segment
*
vp10_rc_bits_per_mb
(
cm
->
frame_type
,
i
+
deltaq
,
correction_factor
,
cm
->
bit_depth
));
bits_per_mb
=
(
int
)((
1
.
0
-
weight_segment
)
*
vp10_rc_bits_per_mb
(
cm
->
frame_type
,
i
,
correction_factor
,
cm
->
bit_depth
)
+
weight_segment
*
vp10_rc_bits_per_mb
(
cm
->
frame_type
,
i
+
deltaq
,
correction_factor
,
cm
->
bit_depth
));
return
bits_per_mb
;
}
...
...
@@ -211,12 +210,9 @@ int vp10_cyclic_refresh_rc_bits_per_mb(const VP10_COMP *cpi, int i,
// check if we should reset the segment_id, and update the cyclic_refresh map
// and segmentation map.
void
vp10_cyclic_refresh_update_segment
(
VP10_COMP
*
const
cpi
,
MB_MODE_INFO
*
const
mbmi
,
int
mi_row
,
int
mi_col
,
BLOCK_SIZE
bsize
,
int64_t
rate
,
int64_t
dist
,
int
skip
)
{
MB_MODE_INFO
*
const
mbmi
,
int
mi_row
,
int
mi_col
,
BLOCK_SIZE
bsize
,
int64_t
rate
,
int64_t
dist
,
int
skip
)
{
const
VP10_COMMON
*
const
cm
=
&
cpi
->
common
;
CYCLIC_REFRESH
*
const
cr
=
cpi
->
cyclic_refresh
;
const
int
bw
=
num_8x8_blocks_wide_lookup
[
bsize
];
...
...
@@ -224,19 +220,19 @@ void vp10_cyclic_refresh_update_segment(VP10_COMP *const cpi,
const
int
xmis
=
VPXMIN
(
cm
->
mi_cols
-
mi_col
,
bw
);
const
int
ymis
=
VPXMIN
(
cm
->
mi_rows
-
mi_row
,
bh
);
const
int
block_index
=
mi_row
*
cm
->
mi_cols
+
mi_col
;
const
int
refresh_this_block
=
candidate_refresh_aq
(
cr
,
mbmi
,
rate
,
dist
,
bsize
);
const
int
refresh_this_block
=
candidate_refresh_aq
(
cr
,
mbmi
,
rate
,
dist
,
bsize
);
// Default is to not update the refresh map.
int
new_map_value
=
cr
->
map
[
block_index
];
int
x
=
0
;
int
y
=
0
;
int
x
=
0
;
int
y
=
0
;
// If this block is labeled for refresh, check if we should reset the
// segment_id.
if
(
cyclic_refresh_segment_id_boosted
(
mbmi
->
segment_id
))
{
mbmi
->
segment_id
=
refresh_this_block
;
// Reset segment_id if will be skipped.
if
(
skip
)
mbmi
->
segment_id
=
CR_SEGMENT_ID_BASE
;
if
(
skip
)
mbmi
->
segment_id
=
CR_SEGMENT_ID_BASE
;
}
// Update the cyclic refresh map, to be used for setting segmentation map
...
...
@@ -249,8 +245,7 @@ void vp10_cyclic_refresh_update_segment(VP10_COMP *const cpi,
// Else if it is accepted as candidate for refresh, and has not already
// been refreshed (marked as 1) then mark it as a candidate for cleanup
// for future time (marked as 0), otherwise don't update it.
if
(
cr
->
map
[
block_index
]
==
1
)
new_map_value
=
0
;
if
(
cr
->
map
[
block_index
]
==
1
)
new_map_value
=
0
;
}
else
{
// Leave it marked as block that is not candidate for refresh.
new_map_value
=
1
;
...
...
@@ -291,11 +286,12 @@ void vp10_cyclic_refresh_postencode(VP10_COMP *const cpi) {
cr
->
actual_num_seg2_blocks
=
0
;
for
(
mi_row
=
0
;
mi_row
<
cm
->
mi_rows
;
mi_row
++
)
for
(
mi_col
=
0
;
mi_col
<
cm
->
mi_cols
;
mi_col
++
)
{
if
(
cyclic_refresh_segment_id
(
seg_map
[
mi_row
*
cm
->
mi_cols
+
mi_col
])
==
CR_SEGMENT_ID_BOOST1
)
if
(
cyclic_refresh_segment_id
(
seg_map
[
mi_row
*
cm
->
mi_cols
+
mi_col
])
==
CR_SEGMENT_ID_BOOST1
)
cr
->
actual_num_seg1_blocks
++
;
else
if
(
cyclic_refresh_segment_id
(
seg_map
[
mi_row
*
cm
->
mi_cols
+
mi_col
])
==
CR_SEGMENT_ID_BOOST2
)
seg_map
[
mi_row
*
cm
->
mi_cols
+
mi_col
])
==
CR_SEGMENT_ID_BOOST2
)
cr
->
actual_num_seg2_blocks
++
;
}
}
...
...
@@ -334,22 +330,22 @@ void vp10_cyclic_refresh_check_golden_update(VP10_COMP *const cpi) {
mi
=
cm
->
mi_grid_visible
+
mi_row
*
cm
->
mi_stride
;
for
(
mi_col
=
0
;
mi_col
<
cols
;
mi_col
++
)
{
int16_t
abs_mvr
=
mi
[
0
]
->
mbmi
.
mv
[
0
].
as_mv
.
row
>=
0
?
mi
[
0
]
->
mbmi
.
mv
[
0
].
as_mv
.
row
:
-
1
*
mi
[
0
]
->
mbmi
.
mv
[
0
].
as_mv
.
row
;
int16_t
abs_mvc
=
mi
[
0
]
->
mbmi
.
mv
[
0
].
as_mv
.
col
>=
0
?
mi
[
0
]
->
mbmi
.
mv
[
0
].
as_mv
.
col
:
-
1
*
mi
[
0
]
->
mbmi
.
mv
[
0
].
as_mv
.
col
;
int16_t
abs_mvr
=
mi
[
0
]
->
mbmi
.
mv
[
0
].
as_mv
.
row
>=
0
?
mi
[
0
]
->
mbmi
.
mv
[
0
].
as_mv
.
row
:
-
1
*
mi
[
0
]
->
mbmi
.
mv
[
0
].
as_mv
.
row
;
int16_t
abs_mvc
=
mi
[
0
]
->
mbmi
.
mv
[
0
].
as_mv
.
col
>=
0
?
mi
[
0
]
->
mbmi
.
mv
[
0
].
as_mv
.
col
:
-
1
*
mi
[
0
]
->
mbmi
.
mv
[
0
].
as_mv
.
col
;
// Calculate the motion of the background.
if
(
abs_mvr
<=
16
&&
abs_mvc
<=
16
)
{
cnt1
++
;
if
(
abs_mvr
==
0
&&
abs_mvc
==
0
)
cnt2
++
;
if
(
abs_mvr
==
0
&&
abs_mvc
==
0
)
cnt2
++
;
}
mi
++
;
// Accumulate low_content_frame.
if
(
cr
->
map
[
mi_row
*
cols
+
mi_col
]
<
1
)
low_content_frame
++
;
if
(
cr
->
map
[
mi_row
*
cols
+
mi_col
]
<
1
)
low_content_frame
++
;
}
}
...
...
@@ -359,7 +355,7 @@ void vp10_cyclic_refresh_check_golden_update(VP10_COMP *const cpi) {
// Also, force this frame as a golden update frame if this frame will change
// the resolution (resize_pending != 0).
if
(
cpi
->
resize_pending
!=
0
||
(
cnt1
*
10
>
(
70
*
rows
*
cols
)
&&
cnt2
*
20
<
cnt1
))
{
(
cnt1
*
10
>
(
70
*
rows
*
cols
)
&&
cnt2
*
20
<
cnt1
))
{
vp10_cyclic_refresh_set_golden_update
(
cpi
);
rc
->
frames_till_gf_update_due
=
rc
->
baseline_gf_interval
;
...
...
@@ -369,8 +365,7 @@ void vp10_cyclic_refresh_check_golden_update(VP10_COMP *const cpi) {
force_gf_refresh
=
1
;
}
fraction_low
=
(
double
)
low_content_frame
/
(
rows
*
cols
);
fraction_low
=
(
double
)
low_content_frame
/
(
rows
*
cols
);
// Update average.
cr
->
low_content_avg
=
(
fraction_low
+
3
*
cr
->
low_content_avg
)
/
4
;
if
(
!
force_gf_refresh
&&
cpi
->
refresh_golden_frame
==
1
)
{
...
...
@@ -432,8 +427,7 @@ static void cyclic_refresh_update_map(VP10_COMP *const cpi) {
// for possible boost/refresh (segment 1). The segment id may get
// reset to 0 later if block gets coded anything other than ZEROMV.
if
(
cr
->
map
[
bl_index2
]
==
0
)
{
if
(
cr
->
last_coded_q_map
[
bl_index2
]
>
qindex_thresh
)
sum_map
++
;
if
(
cr
->
last_coded_q_map
[
bl_index2
]
>
qindex_thresh
)
sum_map
++
;
}
else
if
(
cr
->
map
[
bl_index2
]
<
0
)
{
cr
->
map
[
bl_index2
]
++
;
}
...
...
@@ -466,14 +460,12 @@ void vp10_cyclic_refresh_update_parameters(VP10_COMP *const cpi) {
cr
->
time_for_refresh
=
0
;
// Use larger delta-qp (increase rate_ratio_qdelta) for first few (~4)
// periods of the refresh cycle, after a key frame.
if
(
rc
->
frames_since_key
<
4
*
cr
->
percent_refresh
)
if
(
rc
->
frames_since_key
<
4
*
cr
->
percent_refresh
)
cr
->
rate_ratio_qdelta
=
3
.
0
;
else
cr
->
rate_ratio_qdelta
=
2
.
0
;
// Adjust some parameters for low resolutions at low bitrates.
if
(
cm
->
width
<=
352
&&
cm
->
height
<=
288
&&
rc
->
avg_frame_bandwidth
<
3400
)
{
if
(
cm
->
width
<=
352
&&
cm
->
height
<=
288
&&
rc
->
avg_frame_bandwidth
<
3400
)
{
cr
->
motion_thresh
=
4
;
cr
->
rate_boost_fac
=
10
;
}
else
{
...
...
@@ -488,9 +480,8 @@ void vp10_cyclic_refresh_setup(VP10_COMP *const cpi) {
const
RATE_CONTROL
*
const
rc
=
&
cpi
->
rc
;
CYCLIC_REFRESH
*
const
cr
=
cpi
->
cyclic_refresh
;
struct
segmentation
*
const
seg
=
&
cm
->
seg
;
const
int
apply_cyclic_refresh
=
apply_cyclic_refresh_bitrate
(
cm
,
rc
);
if
(
cm
->
current_video_frame
==
0
)
cr
->
low_content_avg
=
0
.
0
;
const
int
apply_cyclic_refresh
=
apply_cyclic_refresh_bitrate
(
cm
,
rc
);
if
(
cm
->
current_video_frame
==
0
)
cr
->
low_content_avg
=
0
.
0
;
// Don't apply refresh on key frame or enhancement layer frames.
if
(
!
apply_cyclic_refresh
||
cm
->
frame_type
==
KEY_FRAME
)
{
// Set segmentation map to 0 and disable.
...
...
@@ -524,7 +515,8 @@ void vp10_cyclic_refresh_setup(VP10_COMP *const cpi) {
seg
->
abs_delta
=
SEGMENT_DELTADATA
;
// Note: setting temporal_update has no effect, as the seg-map coding method
// (temporal or spatial) is determined in vp10_choose_segmap_coding_method(),
// (temporal or spatial) is determined in
// vp10_choose_segmap_coding_method(),
// based on the coding cost of each method. For error_resilient mode on the
// last_frame_seg_map is set to 0, so if temporal coding is used, it is
// relative to 0 previous map.
...
...
vp10/encoder/aq_cyclicrefresh.h
View file @
d9f9a34b
...
...
@@ -8,7 +8,6 @@
* be found in the AUTHORS file in the root of the source tree.
*/
#ifndef VP10_ENCODER_AQ_CYCLICREFRESH_H_
#define VP10_ENCODER_AQ_CYCLICREFRESH_H_
...
...
@@ -20,9 +19,9 @@ extern "C" {
// The segment ids used in cyclic refresh: from base (no boost) to increasing
// boost (higher delta-qp).
#define CR_SEGMENT_ID_BASE
0
#define CR_SEGMENT_ID_BOOST1
1
#define CR_SEGMENT_ID_BOOST2
2
#define CR_SEGMENT_ID_BASE 0
#define CR_SEGMENT_ID_BOOST1 1
#define CR_SEGMENT_ID_BOOST2 2
// Maximum rate target ratio for setting segment delta-qp.
#define CR_MAX_RATE_TARGET_RATIO 4.0
...
...
@@ -39,20 +38,20 @@ void vp10_cyclic_refresh_free(CYCLIC_REFRESH *cr);
// Estimate the bits, incorporating the delta-q from segment 1, after encoding
// the frame.
int
vp10_cyclic_refresh_estimate_bits_at_q
(
const
struct
VP10_COMP
*
cpi
,
double
correction_factor
);
double
correction_factor
);
// Estimate the bits per mb, for a given q = i and a corresponding delta-q
// (for segment 1), prior to encoding the frame.
int
vp10_cyclic_refresh_rc_bits_per_mb
(
const
struct
VP10_COMP
*
cpi
,
int
i
,
double
correction_factor
);
double
correction_factor
);
// Prior to coding a given prediction block, of size bsize at (mi_row, mi_col),
// check if we should reset the segment_id, and update the cyclic_refresh map
// and segmentation map.
void
vp10_cyclic_refresh_update_segment
(
struct
VP10_COMP
*
const
cpi
,
MB_MODE_INFO
*
const
mbmi
,
int
mi_row
,
int
mi_col
,
BLOCK_SIZE
bsize
,
int64_t
rate
,
int64_t
dist
,
int
skip
);
MB_MODE_INFO
*
const
mbmi
,
int
mi_row
,
int
mi_col
,
BLOCK_SIZE
bsize
,
int64_t
rate
,
int64_t
dist
,
int
skip
);
// Update the segmentation map, and related quantities: cyclic refresh map,
// refresh sb_index, and target number of blocks to be refreshed.
...
...
vp10/encoder/aq_variance.c
View file @
d9f9a34b
...
...
@@ -22,21 +22,20 @@
#define ENERGY_MIN (-4)
#define ENERGY_MAX (1)
#define ENERGY_SPAN (ENERGY_MAX - ENERGY_MIN +
1)
#define ENERGY_IN_BOUNDS(energy)\
#define ENERGY_SPAN (ENERGY_MAX - ENERGY_MIN + 1)
#define ENERGY_IN_BOUNDS(energy)
\
assert((energy) >= ENERGY_MIN && (energy) <= ENERGY_MAX)
static
const
double
rate_ratio
[
MAX_SEGMENTS
]
=
{
2
.
5
,
2
.
0
,
1
.
5
,
1
.
0
,
0
.
75
,
1
.
0
,
1
.
0
,
1
.
0
};
static
const
int
segment_id
[
ENERGY_SPAN
]
=
{
0
,
1
,
1
,
2
,
3
,
4
};
static
const
double
rate_ratio
[
MAX_SEGMENTS
]
=
{
2
.
5
,
2
.
0
,
1
.
5
,
1
.
0
,
0
.
75
,
1
.
0
,
1
.
0
,
1
.
0
};
static
const
int
segment_id
[
ENERGY_SPAN
]
=
{
0
,
1
,
1
,
2
,
3
,
4
};
#define SEGMENT_ID(i) segment_id[(i)
-
ENERGY_MIN]
#define SEGMENT_ID(i) segment_id[(i)
-
ENERGY_MIN]
DECLARE_ALIGNED
(
16
,
static
const
uint8_t
,
vp10_all_zeros
[
MAX_SB_SIZE
])
=
{
0
};
DECLARE_ALIGNED
(
16
,
static
const
uint8_t
,
vp10_all_zeros
[
MAX_SB_SIZE
])
=
{
0
};
#if CONFIG_VP9_HIGHBITDEPTH
DECLARE_ALIGNED
(
16
,
static
const
uint16_t
,
vp10_highbd_all_zeros
[
MAX_SB_SIZE
])
=
{
0
};
vp10_highbd_all_zeros
[
MAX_SB_SIZE
])
=
{
0
};
#endif
unsigned
int
vp10_vaq_segment_id
(
int
energy
)
{
...
...
@@ -64,7 +63,7 @@ void vp10_vaq_frame_setup(VP10_COMP *cpi) {
for
(
i
=
0
;
i
<
MAX_SEGMENTS
;
++
i
)
{
int
qindex_delta
=
vp10_compute_qdelta_by_rate
(
&
cpi
->
rc
,
cm
->
frame_type
,
cm
->
base_qindex
,
rate_ratio
[
i
],
cm
->
bit_depth
);
rate_ratio
[
i
],
cm
->
bit_depth
);
// We don't allow qindex 0 in a segment if the base value is not 0.
// Q index 0 (lossless) implies 4x4 encoding only and in AQ mode a segment
...
...
@@ -88,9 +87,9 @@ void vp10_vaq_frame_setup(VP10_COMP *cpi) {
/* TODO(agrange, paulwilkins): The block_variance calls the unoptimized versions
* of variance() and highbd_8_variance(). It should not.
*/
static
void
aq_variance
(
const
uint8_t
*
a
,
int
a_stride
,
const
uint8_t
*
b
,
int
b_strid
e
,
int
w
,
int
h
,
unsigned
int
*
sse
,
int
*
sum
)
{
static
void
aq_variance
(
const
uint8_t
*
a
,
int
a_stride
,
const
uint8_t
*
b
,
int
b_stride
,
int
w
,
int
h
,
unsigned
int
*
ss
e
,
int
*
sum
)
{
int
i
,
j
;
*
sum
=
0
;
...
...
@@ -109,9 +108,9 @@ static void aq_variance(const uint8_t *a, int a_stride,
}
#if CONFIG_VP9_HIGHBITDEPTH
static
void
aq_highbd_variance64
(
const
uint8_t
*
a8
,
int
a_stride
,
const
uint8_t
*
b8
,
int
b_stride
,
int
w
,
int
h
,
uint64_t
*
sse
,
uint64_t
*
sum
)
{
static
void
aq_highbd_variance64
(
const
uint8_t
*
a8
,
int
a_stride
,
const
uint8_t
*
b8
,
int
b_stride
,
int
w
,
int
h
,
uint64_t
*
sse
,
uint64_t
*
sum
)
{
int
i
,
j
;
uint16_t
*
a
=
CONVERT_TO_SHORTPTR
(
a8
);
...
...
@@ -130,9 +129,9 @@ static void aq_highbd_variance64(const uint8_t *a8, int a_stride,
}
}
static
void
aq_highbd_8_variance
(
const
uint8_t
*
a8
,
int
a_stride
,
const
uint8_t
*
b8
,
int
b_stride
,
int
w
,
int
h
,
unsigned
int
*
sse
,
int
*
sum
)
{
static
void
aq_highbd_8_variance
(
const
uint8_t
*
a8
,
int
a_stride
,
const
uint8_t
*
b8
,
int
b_stride
,
int
w
,
int
h
,
unsigned
int
*
sse
,
int
*
sum
)
{
uint64_t
sse_long
=
0
;
uint64_t
sum_long
=
0
;
aq_highbd_variance64
(
a8
,
a_stride
,
b8
,
b_stride
,
w
,
h
,
&
sse_long
,
&
sum_long
);
...
...
@@ -145,10 +144,10 @@ static unsigned int block_variance(VP10_COMP *cpi, MACROBLOCK *x,
BLOCK_SIZE
bs
)
{
MACROBLOCKD
*
xd
=
&
x
->
e_mbd
;
unsigned
int
var
,
sse
;
int
right_overflow
=
(
xd
->
mb_to_right_edge
<
0
)
?
((
-
xd
->
mb_to_right_edge
)
>>
3
)
:
0
;
int
bottom_overflow
=
(
xd
->
mb_to_bottom_edge
<
0
)
?
((
-
xd
->
mb_to_bottom_edge
)
>>
3
)
:
0
;
int
right_overflow
=
(
xd
->
mb_to_right_edge
<
0
)
?
((
-
xd
->
mb_to_right_edge
)
>>
3
)
:
0
;
int
bottom_overflow
=
(
xd
->
mb_to_bottom_edge
<
0
)
?
((
-
xd
->
mb_to_bottom_edge
)
>>
3
)
:
0
;
if
(
right_overflow
||
bottom_overflow
)
{
const
int
bw
=
8
*
num_8x8_blocks_wide_lookup
[
bs
]
-
right_overflow
;
...
...
@@ -162,30 +161,27 @@ static unsigned int block_variance(VP10_COMP *cpi, MACROBLOCK *x,
sse
>>=
2
*
(
xd
->
bd
-
8
);
avg
>>=
(
xd
->
bd
-
8
);
}
else
{
aq_variance
(
x
->
plane
[
0
].
src
.
buf
,
x
->
plane
[
0
].
src
.
stride
,
vp10_all_zeros
,
0
,
bw
,
bh
,
&
sse
,
&
avg
);
aq_variance
(
x
->
plane
[
0
].
src
.
buf
,
x
->
plane
[
0
].
src
.
stride
,
vp10_all_zeros
,
0
,
bw
,
bh
,
&
sse
,
&
avg
);
}
#else
aq_variance
(
x
->
plane
[
0
].
src
.
buf
,
x
->
plane
[
0
].
src
.
stride
,
vp10_all_zeros
,
0
,
bw
,
bh
,
&
sse
,
&
avg
);
aq_variance
(
x
->
plane
[
0
].
src
.
buf
,
x
->
plane
[
0
].
src
.
stride
,
vp10_all_zeros
,
0
,
bw
,
bh
,
&
sse
,
&
avg
);
#endif // CONFIG_VP9_HIGHBITDEPTH
var
=
sse
-
(((
int64_t
)
avg
*
avg
)
/
(
bw
*
bh
));
return
(
256
*
var
)
/
(
bw
*
bh
);