Skip to content
GitLab
Projects
Groups
Snippets
/
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Menu
Open sidebar
Xiph.Org
aom-rav1e
Commits
4aafd018
Commit
4aafd018
authored
Nov 04, 2015
by
Yaowu Xu
Browse files
Merge branch 'master' into nextgenv2
parents
4101154d
c6641709
Changes
9
Hide whitespace changes
Inline
Side-by-side
build/make/configure.sh
View file @
4aafd018
...
...
@@ -688,6 +688,10 @@ process_common_toolchain() {
tgt_isa
=
x86_64
tgt_os
=
darwin14
;;
*
darwin15
*
)
tgt_isa
=
x86_64
tgt_os
=
darwin15
;;
x86_64
*
mingw32
*
)
tgt_os
=
win64
;;
...
...
@@ -795,6 +799,10 @@ process_common_toolchain() {
add_cflags
"-mmacosx-version-min=10.10"
add_ldflags
"-mmacosx-version-min=10.10"
;;
*
-darwin15-
*
)
add_cflags
"-mmacosx-version-min=10.11"
add_ldflags
"-mmacosx-version-min=10.11"
;;
*
-iphonesimulator-
*
)
add_cflags
"-miphoneos-version-min=
${
IOS_VERSION_MIN
}
"
add_ldflags
"-miphoneos-version-min=
${
IOS_VERSION_MIN
}
"
...
...
configure
View file @
4aafd018
...
...
@@ -122,6 +122,7 @@ all_platforms="${all_platforms} x86-darwin11-gcc"
all_platforms
=
"
${
all_platforms
}
x86-darwin12-gcc"
all_platforms
=
"
${
all_platforms
}
x86-darwin13-gcc"
all_platforms
=
"
${
all_platforms
}
x86-darwin14-gcc"
all_platforms
=
"
${
all_platforms
}
x86-darwin15-gcc"
all_platforms
=
"
${
all_platforms
}
x86-iphonesimulator-gcc"
all_platforms
=
"
${
all_platforms
}
x86-linux-gcc"
all_platforms
=
"
${
all_platforms
}
x86-linux-icc"
...
...
@@ -142,6 +143,7 @@ all_platforms="${all_platforms} x86_64-darwin11-gcc"
all_platforms
=
"
${
all_platforms
}
x86_64-darwin12-gcc"
all_platforms
=
"
${
all_platforms
}
x86_64-darwin13-gcc"
all_platforms
=
"
${
all_platforms
}
x86_64-darwin14-gcc"
all_platforms
=
"
${
all_platforms
}
x86_64-darwin15-gcc"
all_platforms
=
"
${
all_platforms
}
x86_64-iphonesimulator-gcc"
all_platforms
=
"
${
all_platforms
}
x86_64-linux-gcc"
all_platforms
=
"
${
all_platforms
}
x86_64-linux-icc"
...
...
test/datarate_test.cc
View file @
4aafd018
...
...
@@ -538,7 +538,7 @@ TEST_P(DatarateTestVP9Large, ChangingDropFrameThresh) {
<<
" The first dropped frame for drop_thresh "
<<
i
<<
" > first dropped frame for drop_thresh "
<<
i
-
kDropFrameThreshTestStep
;
ASSERT_GE
(
num_drops_
,
last_num_drops
*
0.
90
)
ASSERT_GE
(
num_drops_
,
last_num_drops
*
0.
85
)
<<
" The number of dropped frames for drop_thresh "
<<
i
<<
" < number of dropped frames for drop_thresh "
<<
i
-
kDropFrameThreshTestStep
;
...
...
vp10/common/reconintra.c
View file @
4aafd018
...
...
@@ -305,6 +305,9 @@ static void build_intra_predictors_high(const MACROBLOCKD *xd,
int
x0
,
y0
;
const
struct
macroblockd_plane
*
const
pd
=
&
xd
->
plane
[
plane
];
#endif
const
int
need_left
=
extend_modes
[
mode
]
&
NEED_LEFT
;
const
int
need_above
=
extend_modes
[
mode
]
&
NEED_ABOVE
;
const
int
need_aboveright
=
extend_modes
[
mode
]
&
NEED_ABOVERIGHT
;
int
base
=
128
<<
(
bd
-
8
);
// 127 127 127 .. 127 127 127 127 127 127
// 129 A B .. Y Z
...
...
@@ -316,6 +319,9 @@ static void build_intra_predictors_high(const MACROBLOCKD *xd,
(
void
)
x
;
(
void
)
y
;
(
void
)
plane
;
(
void
)
need_left
;
(
void
)
need_above
;
(
void
)
need_aboveright
;
// NEED_LEFT
if
(
extend_modes
[
mode
]
&
NEED_LEFT
)
{
...
...
@@ -372,79 +378,110 @@ static void build_intra_predictors_high(const MACROBLOCKD *xd,
x0
=
(
-
xd
->
mb_to_left_edge
>>
(
3
+
pd
->
subsampling_x
))
+
x
;
y0
=
(
-
xd
->
mb_to_top_edge
>>
(
3
+
pd
->
subsampling_y
))
+
y
;
// left
if
(
left_available
)
{
if
(
xd
->
mb_to_bottom_edge
<
0
)
{
/* slower path if the block needs border extension */
if
(
y0
+
bs
<=
frame_height
)
{
for
(
i
=
0
;
i
<
bs
;
++
i
)
left_col
[
i
]
=
ref
[
i
*
ref_stride
-
1
];
// NEED_LEFT
if
(
need_left
)
{
if
(
left_available
)
{
if
(
xd
->
mb_to_bottom_edge
<
0
)
{
/* slower path if the block needs border extension */
if
(
y0
+
bs
<=
frame_height
)
{
for
(
i
=
0
;
i
<
bs
;
++
i
)
left_col
[
i
]
=
ref
[
i
*
ref_stride
-
1
];
}
else
{
const
int
extend_bottom
=
frame_height
-
y0
;
for
(
i
=
0
;
i
<
extend_bottom
;
++
i
)
left_col
[
i
]
=
ref
[
i
*
ref_stride
-
1
];
for
(;
i
<
bs
;
++
i
)
left_col
[
i
]
=
ref
[(
extend_bottom
-
1
)
*
ref_stride
-
1
];
}
}
else
{
const
int
extend_bottom
=
frame_height
-
y0
;
for
(
i
=
0
;
i
<
extend_bottom
;
++
i
)
/* faster path if the block does not need extension */
for
(
i
=
0
;
i
<
bs
;
++
i
)
left_col
[
i
]
=
ref
[
i
*
ref_stride
-
1
];
for
(;
i
<
bs
;
++
i
)
left_col
[
i
]
=
ref
[(
extend_bottom
-
1
)
*
ref_stride
-
1
];
}
}
else
{
/* faster path if the block does not need extension */
for
(
i
=
0
;
i
<
bs
;
++
i
)
left_col
[
i
]
=
ref
[
i
*
ref_stride
-
1
];
// TODO(Peter): this value should probably change for high bitdepth
vpx_memset16
(
left_col
,
base
+
1
,
bs
);
}
}
else
{
// TODO(Peter): this value should probably change for high bitdepth
vpx_memset16
(
left_col
,
base
+
1
,
bs
);
}
// TODO(hkuang) do not extend 2*bs pixels for all modes.
// above
if
(
up_available
)
{
const
uint16_t
*
above_ref
=
ref
-
ref_stride
;
if
(
xd
->
mb_to_right_edge
<
0
)
{
/* slower path if the block needs border extension */
if
(
x0
+
2
*
bs
<=
frame_width
)
{
if
(
right_available
&&
bs
==
4
)
{
memcpy
(
above_row
,
above_ref
,
2
*
bs
*
sizeof
(
above_row
[
0
]));
// NEED_ABOVE
if
(
need_above
)
{
if
(
up_available
)
{
const
uint16_t
*
above_ref
=
ref
-
ref_stride
;
if
(
xd
->
mb_to_right_edge
<
0
)
{
/* slower path if the block needs border extension */
if
(
x0
+
bs
<=
frame_width
)
{
memcpy
(
above_row
,
above_ref
,
bs
*
sizeof
(
above_row
[
0
]));
}
else
if
(
x0
<=
frame_width
)
{
const
int
r
=
frame_width
-
x0
;
memcpy
(
above_row
,
above_ref
,
r
*
sizeof
(
above_row
[
0
]));
vpx_memset16
(
above_row
+
r
,
above_row
[
r
-
1
],
x0
+
bs
-
frame_width
);
}
}
else
{
/* faster path if the block does not need extension */
if
(
bs
==
4
&&
right_available
&&
left_available
)
{
const_above_row
=
above_ref
;
}
else
{
memcpy
(
above_row
,
above_ref
,
bs
*
sizeof
(
above_row
[
0
]));
vpx_memset16
(
above_row
+
bs
,
above_row
[
bs
-
1
],
bs
);
}
}
else
if
(
x0
+
bs
<=
frame_width
)
{
const
int
r
=
frame_width
-
x0
;
if
(
right_available
&&
bs
==
4
)
{
}
above_row
[
-
1
]
=
left_available
?
above_ref
[
-
1
]
:
(
base
+
1
);
}
else
{
vpx_memset16
(
above_row
,
base
-
1
,
bs
);
above_row
[
-
1
]
=
base
-
1
;
}
}
// NEED_ABOVERIGHT
if
(
need_aboveright
)
{
if
(
up_available
)
{
const
uint16_t
*
above_ref
=
ref
-
ref_stride
;
if
(
xd
->
mb_to_right_edge
<
0
)
{
/* slower path if the block needs border extension */
if
(
x0
+
2
*
bs
<=
frame_width
)
{
if
(
right_available
&&
bs
==
4
)
{
memcpy
(
above_row
,
above_ref
,
2
*
bs
*
sizeof
(
above_row
[
0
]));
}
else
{
memcpy
(
above_row
,
above_ref
,
bs
*
sizeof
(
above_row
[
0
]));
vpx_memset16
(
above_row
+
bs
,
above_row
[
bs
-
1
],
bs
);
}
}
else
if
(
x0
+
bs
<=
frame_width
)
{
const
int
r
=
frame_width
-
x0
;
if
(
right_available
&&
bs
==
4
)
{
memcpy
(
above_row
,
above_ref
,
r
*
sizeof
(
above_row
[
0
]));
vpx_memset16
(
above_row
+
r
,
above_row
[
r
-
1
],
x0
+
2
*
bs
-
frame_width
);
}
else
{
memcpy
(
above_row
,
above_ref
,
bs
*
sizeof
(
above_row
[
0
]));
vpx_memset16
(
above_row
+
bs
,
above_row
[
bs
-
1
],
bs
);
}
}
else
if
(
x0
<=
frame_width
)
{
const
int
r
=
frame_width
-
x0
;
memcpy
(
above_row
,
above_ref
,
r
*
sizeof
(
above_row
[
0
]));
vpx_memset16
(
above_row
+
r
,
above_row
[
r
-
1
],
x0
+
2
*
bs
-
frame_width
);
}
// TODO(Peter) this value should probably change for high bitdepth
above_row
[
-
1
]
=
left_available
?
above_ref
[
-
1
]
:
(
base
+
1
);
}
else
{
/* faster path if the block does not need extension */
if
(
bs
==
4
&&
right_available
&&
left_available
)
{
const_above_row
=
above_ref
;
}
else
{
memcpy
(
above_row
,
above_ref
,
bs
*
sizeof
(
above_row
[
0
]));
vpx_memset16
(
above_row
+
bs
,
above_row
[
bs
-
1
],
bs
);
if
(
bs
==
4
&&
right_available
)
memcpy
(
above_row
+
bs
,
above_ref
+
bs
,
bs
*
sizeof
(
above_row
[
0
]));
else
vpx_memset16
(
above_row
+
bs
,
above_row
[
bs
-
1
],
bs
);
// TODO(Peter): this value should probably change for high bitdepth
above_row
[
-
1
]
=
left_available
?
above_ref
[
-
1
]
:
(
base
+
1
);
}
}
else
if
(
x0
<=
frame_width
)
{
const
int
r
=
frame_width
-
x0
;
memcpy
(
above_row
,
above_ref
,
r
*
sizeof
(
above_row
[
0
]));
vpx_memset16
(
above_row
+
r
,
above_row
[
r
-
1
],
x0
+
2
*
bs
-
frame_width
);
}
// TODO(Peter) this value should probably change for high bitdepth
above_row
[
-
1
]
=
left_available
?
above_ref
[
-
1
]
:
(
base
+
1
);
}
else
{
/* faster path if the block does not need extension */
if
(
bs
==
4
&&
right_available
&&
left_available
)
{
const_above_row
=
above_ref
;
}
else
{
memcpy
(
above_row
,
above_ref
,
bs
*
sizeof
(
above_row
[
0
]));
if
(
bs
==
4
&&
right_available
)
memcpy
(
above_row
+
bs
,
above_ref
+
bs
,
bs
*
sizeof
(
above_row
[
0
]));
else
vpx_memset16
(
above_row
+
bs
,
above_row
[
bs
-
1
],
bs
);
// TODO(Peter): this value should probably change for high bitdepth
above_row
[
-
1
]
=
left_available
?
above_ref
[
-
1
]
:
(
base
+
1
);
}
vpx_memset16
(
above_row
,
base
-
1
,
bs
*
2
);
// TODO(Peter): this value should probably change for high bitdepth
above_row
[
-
1
]
=
base
-
1
;
}
}
else
{
vpx_memset16
(
above_row
,
base
-
1
,
bs
*
2
);
// TODO(Peter): this value should probably change for high bitdepth
above_row
[
-
1
]
=
base
-
1
;
}
#endif
...
...
vp10/decoder/dsubexp.c
View file @
4aafd018
...
...
@@ -23,13 +23,13 @@ static int inv_recenter_nonneg(int v, int m) {
static
int
decode_uniform
(
vpx_reader
*
r
)
{
const
int
l
=
8
;
const
int
m
=
(
1
<<
l
)
-
191
;
const
int
m
=
(
1
<<
l
)
-
191
+
CONFIG_MISC_FIXES
;
const
int
v
=
vpx_read_literal
(
r
,
l
-
1
);
return
v
<
m
?
v
:
(
v
<<
1
)
-
m
+
vpx_read_bit
(
r
);
}
static
int
inv_remap_prob
(
int
v
,
int
m
)
{
static
uint8_t
inv_map_table
[
MAX_PROB
]
=
{
static
uint8_t
inv_map_table
[
MAX_PROB
-
CONFIG_MISC_FIXES
]
=
{
7
,
20
,
33
,
46
,
59
,
72
,
85
,
98
,
111
,
124
,
137
,
150
,
163
,
176
,
189
,
202
,
215
,
228
,
241
,
254
,
1
,
2
,
3
,
4
,
5
,
6
,
8
,
9
,
10
,
11
,
12
,
13
,
14
,
15
,
16
,
17
,
18
,
19
,
21
,
22
,
23
,
24
,
25
,
26
,
27
,
...
...
@@ -46,7 +46,10 @@ static int inv_remap_prob(int v, int m) {
191
,
192
,
193
,
194
,
195
,
196
,
197
,
198
,
199
,
200
,
201
,
203
,
204
,
205
,
206
,
207
,
208
,
209
,
210
,
211
,
212
,
213
,
214
,
216
,
217
,
218
,
219
,
220
,
221
,
222
,
223
,
224
,
225
,
226
,
227
,
229
,
230
,
231
,
232
,
233
,
234
,
235
,
236
,
237
,
238
,
239
,
240
,
242
,
243
,
244
,
245
,
246
,
247
,
248
,
249
,
250
,
251
,
252
,
253
,
253
239
,
240
,
242
,
243
,
244
,
245
,
246
,
247
,
248
,
249
,
250
,
251
,
252
,
253
,
#if !CONFIG_MISC_FIXES
253
#endif
};
assert
(
v
<
(
int
)(
sizeof
(
inv_map_table
)
/
sizeof
(
inv_map_table
[
0
])));
v
=
inv_map_table
[
v
];
...
...
vp10/encoder/subexp.c
View file @
4aafd018
...
...
@@ -25,7 +25,8 @@ static const uint8_t update_bits[255] = {
10
,
10
,
10
,
10
,
10
,
10
,
10
,
10
,
10
,
10
,
10
,
10
,
10
,
10
,
10
,
10
,
10
,
10
,
10
,
10
,
10
,
10
,
10
,
10
,
10
,
10
,
10
,
10
,
10
,
10
,
10
,
10
,
10
,
10
,
10
,
10
,
10
,
10
,
10
,
10
,
10
,
10
,
10
,
10
,
10
,
10
,
10
,
10
,
10
,
11
,
11
,
11
,
11
,
11
,
11
,
11
,
11
,
11
,
11
,
11
,
11
,
11
,
11
,
11
,
10
,
11
-
CONFIG_MISC_FIXES
,
11
,
11
,
11
,
11
,
11
,
11
,
11
,
11
,
11
,
11
,
11
,
11
,
11
,
11
,
11
,
11
,
11
,
11
,
11
,
11
,
11
,
11
,
11
,
11
,
11
,
11
,
11
,
11
,
11
,
11
,
11
,
11
,
11
,
11
,
11
,
11
,
11
,
11
,
11
,
11
,
11
,
11
,
11
,
11
,
11
,
11
,
11
,
11
,
11
,
11
,
11
,
11
,
11
,
11
,
11
,
11
,
11
,
11
,
11
,
11
,
11
,
11
,
...
...
@@ -85,7 +86,7 @@ static int prob_diff_update_cost(vpx_prob newp, vpx_prob oldp) {
static
void
encode_uniform
(
vpx_writer
*
w
,
int
v
)
{
const
int
l
=
8
;
const
int
m
=
(
1
<<
l
)
-
191
;
const
int
m
=
(
1
<<
l
)
-
191
+
CONFIG_MISC_FIXES
;
if
(
v
<
m
)
{
vpx_write_literal
(
w
,
v
,
l
-
1
);
}
else
{
...
...
vp9/common/vp9_reconintra.c
View file @
4aafd018
...
...
@@ -133,6 +133,9 @@ static void build_intra_predictors_high(const MACROBLOCKD *xd,
int
frame_width
,
frame_height
;
int
x0
,
y0
;
const
struct
macroblockd_plane
*
const
pd
=
&
xd
->
plane
[
plane
];
const
int
need_left
=
extend_modes
[
mode
]
&
NEED_LEFT
;
const
int
need_above
=
extend_modes
[
mode
]
&
NEED_ABOVE
;
const
int
need_aboveright
=
extend_modes
[
mode
]
&
NEED_ABOVERIGHT
;
int
base
=
128
<<
(
bd
-
8
);
// 127 127 127 .. 127 127 127 127 127 127
// 129 A B .. Y Z
...
...
@@ -153,79 +156,110 @@ static void build_intra_predictors_high(const MACROBLOCKD *xd,
x0
=
(
-
xd
->
mb_to_left_edge
>>
(
3
+
pd
->
subsampling_x
))
+
x
;
y0
=
(
-
xd
->
mb_to_top_edge
>>
(
3
+
pd
->
subsampling_y
))
+
y
;
// left
if
(
left_available
)
{
if
(
xd
->
mb_to_bottom_edge
<
0
)
{
/* slower path if the block needs border extension */
if
(
y0
+
bs
<=
frame_height
)
{
for
(
i
=
0
;
i
<
bs
;
++
i
)
left_col
[
i
]
=
ref
[
i
*
ref_stride
-
1
];
// NEED_LEFT
if
(
need_left
)
{
if
(
left_available
)
{
if
(
xd
->
mb_to_bottom_edge
<
0
)
{
/* slower path if the block needs border extension */
if
(
y0
+
bs
<=
frame_height
)
{
for
(
i
=
0
;
i
<
bs
;
++
i
)
left_col
[
i
]
=
ref
[
i
*
ref_stride
-
1
];
}
else
{
const
int
extend_bottom
=
frame_height
-
y0
;
for
(
i
=
0
;
i
<
extend_bottom
;
++
i
)
left_col
[
i
]
=
ref
[
i
*
ref_stride
-
1
];
for
(;
i
<
bs
;
++
i
)
left_col
[
i
]
=
ref
[(
extend_bottom
-
1
)
*
ref_stride
-
1
];
}
}
else
{
const
int
extend_bottom
=
frame_height
-
y0
;
for
(
i
=
0
;
i
<
extend_bottom
;
++
i
)
/* faster path if the block does not need extension */
for
(
i
=
0
;
i
<
bs
;
++
i
)
left_col
[
i
]
=
ref
[
i
*
ref_stride
-
1
];
for
(;
i
<
bs
;
++
i
)
left_col
[
i
]
=
ref
[(
extend_bottom
-
1
)
*
ref_stride
-
1
];
}
}
else
{
/* faster path if the block does not need extension */
for
(
i
=
0
;
i
<
bs
;
++
i
)
left_col
[
i
]
=
ref
[
i
*
ref_stride
-
1
];
// TODO(Peter): this value should probably change for high bitdepth
vpx_memset16
(
left_col
,
base
+
1
,
bs
);
}
}
else
{
// TODO(Peter): this value should probably change for high bitdepth
vpx_memset16
(
left_col
,
base
+
1
,
bs
);
}
// TODO(hkuang) do not extend 2*bs pixels for all modes.
// above
if
(
up_available
)
{
const
uint16_t
*
above_ref
=
ref
-
ref_stride
;
if
(
xd
->
mb_to_right_edge
<
0
)
{
/* slower path if the block needs border extension */
if
(
x0
+
2
*
bs
<=
frame_width
)
{
if
(
right_available
&&
bs
==
4
)
{
memcpy
(
above_row
,
above_ref
,
2
*
bs
*
sizeof
(
above_row
[
0
]));
// NEED_ABOVE
if
(
need_above
)
{
if
(
up_available
)
{
const
uint16_t
*
above_ref
=
ref
-
ref_stride
;
if
(
xd
->
mb_to_right_edge
<
0
)
{
/* slower path if the block needs border extension */
if
(
x0
+
bs
<=
frame_width
)
{
memcpy
(
above_row
,
above_ref
,
bs
*
sizeof
(
above_row
[
0
]));
}
else
if
(
x0
<=
frame_width
)
{
const
int
r
=
frame_width
-
x0
;
memcpy
(
above_row
,
above_ref
,
r
*
sizeof
(
above_row
[
0
]));
vpx_memset16
(
above_row
+
r
,
above_row
[
r
-
1
],
x0
+
bs
-
frame_width
);
}
}
else
{
/* faster path if the block does not need extension */
if
(
bs
==
4
&&
right_available
&&
left_available
)
{
const_above_row
=
above_ref
;
}
else
{
memcpy
(
above_row
,
above_ref
,
bs
*
sizeof
(
above_row
[
0
]));
vpx_memset16
(
above_row
+
bs
,
above_row
[
bs
-
1
],
bs
);
}
}
else
if
(
x0
+
bs
<=
frame_width
)
{
const
int
r
=
frame_width
-
x0
;
if
(
right_available
&&
bs
==
4
)
{
}
above_row
[
-
1
]
=
left_available
?
above_ref
[
-
1
]
:
(
base
+
1
);
}
else
{
vpx_memset16
(
above_row
,
base
-
1
,
bs
);
above_row
[
-
1
]
=
base
-
1
;
}
}
// NEED_ABOVERIGHT
if
(
need_aboveright
)
{
if
(
up_available
)
{
const
uint16_t
*
above_ref
=
ref
-
ref_stride
;
if
(
xd
->
mb_to_right_edge
<
0
)
{
/* slower path if the block needs border extension */
if
(
x0
+
2
*
bs
<=
frame_width
)
{
if
(
right_available
&&
bs
==
4
)
{
memcpy
(
above_row
,
above_ref
,
2
*
bs
*
sizeof
(
above_row
[
0
]));
}
else
{
memcpy
(
above_row
,
above_ref
,
bs
*
sizeof
(
above_row
[
0
]));
vpx_memset16
(
above_row
+
bs
,
above_row
[
bs
-
1
],
bs
);
}
}
else
if
(
x0
+
bs
<=
frame_width
)
{
const
int
r
=
frame_width
-
x0
;
if
(
right_available
&&
bs
==
4
)
{
memcpy
(
above_row
,
above_ref
,
r
*
sizeof
(
above_row
[
0
]));
vpx_memset16
(
above_row
+
r
,
above_row
[
r
-
1
],
x0
+
2
*
bs
-
frame_width
);
}
else
{
memcpy
(
above_row
,
above_ref
,
bs
*
sizeof
(
above_row
[
0
]));
vpx_memset16
(
above_row
+
bs
,
above_row
[
bs
-
1
],
bs
);
}
}
else
if
(
x0
<=
frame_width
)
{
const
int
r
=
frame_width
-
x0
;
memcpy
(
above_row
,
above_ref
,
r
*
sizeof
(
above_row
[
0
]));
vpx_memset16
(
above_row
+
r
,
above_row
[
r
-
1
],
x0
+
2
*
bs
-
frame_width
);
}
// TODO(Peter) this value should probably change for high bitdepth
above_row
[
-
1
]
=
left_available
?
above_ref
[
-
1
]
:
(
base
+
1
);
}
else
{
/* faster path if the block does not need extension */
if
(
bs
==
4
&&
right_available
&&
left_available
)
{
const_above_row
=
above_ref
;
}
else
{
memcpy
(
above_row
,
above_ref
,
bs
*
sizeof
(
above_row
[
0
]));
vpx_memset16
(
above_row
+
bs
,
above_row
[
bs
-
1
],
bs
);
if
(
bs
==
4
&&
right_available
)
memcpy
(
above_row
+
bs
,
above_ref
+
bs
,
bs
*
sizeof
(
above_row
[
0
]));
else
vpx_memset16
(
above_row
+
bs
,
above_row
[
bs
-
1
],
bs
);
// TODO(Peter): this value should probably change for high bitdepth
above_row
[
-
1
]
=
left_available
?
above_ref
[
-
1
]
:
(
base
+
1
);
}
}
else
if
(
x0
<=
frame_width
)
{
const
int
r
=
frame_width
-
x0
;
memcpy
(
above_row
,
above_ref
,
r
*
sizeof
(
above_row
[
0
]));
vpx_memset16
(
above_row
+
r
,
above_row
[
r
-
1
],
x0
+
2
*
bs
-
frame_width
);
}
// TODO(Peter) this value should probably change for high bitdepth
above_row
[
-
1
]
=
left_available
?
above_ref
[
-
1
]
:
(
base
+
1
);
}
else
{
/* faster path if the block does not need extension */
if
(
bs
==
4
&&
right_available
&&
left_available
)
{
const_above_row
=
above_ref
;
}
else
{
memcpy
(
above_row
,
above_ref
,
bs
*
sizeof
(
above_row
[
0
]));
if
(
bs
==
4
&&
right_available
)
memcpy
(
above_row
+
bs
,
above_ref
+
bs
,
bs
*
sizeof
(
above_row
[
0
]));
else
vpx_memset16
(
above_row
+
bs
,
above_row
[
bs
-
1
],
bs
);
// TODO(Peter): this value should probably change for high bitdepth
above_row
[
-
1
]
=
left_available
?
above_ref
[
-
1
]
:
(
base
+
1
);
}
vpx_memset16
(
above_row
,
base
-
1
,
bs
*
2
);
// TODO(Peter): this value should probably change for high bitdepth
above_row
[
-
1
]
=
base
-
1
;
}
}
else
{
vpx_memset16
(
above_row
,
base
-
1
,
bs
*
2
);
// TODO(Peter): this value should probably change for high bitdepth
above_row
[
-
1
]
=
base
-
1
;
}
// predict
...
...
vp9/encoder/vp9_noise_estimate.c
View file @
4aafd018
...
...
@@ -186,7 +186,7 @@ void vp9_update_noise_estimate(VP9_COMP *const cpi) {
// Normalize.
avg_est
=
(
avg_est
<<
8
)
/
num_samples
;
// Update noise estimate.
ne
->
value
=
(
3
*
ne
->
value
+
avg_est
)
>>
2
;
ne
->
value
=
(
int
)(
(
3
*
ne
->
value
+
avg_est
)
>>
2
)
;
ne
->
count
++
;
if
(
ne
->
count
==
num_frames_estimate
)
{
// Reset counter and check noise level condition.
...
...
vp9/encoder/vp9_pickmode.c
View file @
4aafd018
...
...
@@ -779,14 +779,20 @@ static void encode_breakout_test(VP9_COMP *cpi, MACROBLOCK *x,
struct
buf_2d
yv12_mb
[][
MAX_MB_PLANE
],
int
*
rate
,
int64_t
*
dist
)
{
MACROBLOCKD
*
xd
=
&
x
->
e_mbd
;
MB_MODE_INFO
*
const
mbmi
=
&
xd
->
mi
[
0
]
->
mbmi
;
const
BLOCK_SIZE
uv_size
=
get_plane_block_size
(
bsize
,
&
xd
->
plane
[
1
]);
unsigned
int
var
=
var_y
,
sse
=
sse_y
;
// Skipping threshold for ac.
unsigned
int
thresh_ac
;
// Skipping threshold for dc.
unsigned
int
thresh_dc
;
if
(
x
->
encode_breakout
>
0
)
{
int
motion_low
=
1
;
if
(
mbmi
->
mv
[
0
].
as_mv
.
row
>
64
||
mbmi
->
mv
[
0
].
as_mv
.
row
<
-
64
||
mbmi
->
mv
[
0
].
as_mv
.
col
>
64
||
mbmi
->
mv
[
0
].
as_mv
.
col
<
-
64
)
motion_low
=
0
;
if
(
x
->
encode_breakout
>
0
&&
motion_low
==
1
)
{
// Set a maximum for threshold to avoid big PSNR loss in low bit rate
// case. Use extreme low threshold for static frames to limit
// skipping.
...
...
@@ -1477,6 +1483,20 @@ void vp9_pick_inter_mode(VP9_COMP *cpi, MACROBLOCK *x,
this_rdc
.
rate
+=
ref_frame_cost
[
ref_frame
];
this_rdc
.
rdcost
=
RDCOST
(
x
->
rdmult
,
x
->
rddiv
,
this_rdc
.
rate
,
this_rdc
.
dist
);
// Bias against non-zero (above some threshold) motion for large blocks.
// This is temporary fix to avoid selection of large mv for big blocks.
if
(
cpi
->
oxcf
.
speed
>
5
&&
cpi
->
oxcf
.
content
!=
VP9E_CONTENT_SCREEN
&&
(
frame_mv
[
this_mode
][
ref_frame
].
as_mv
.
row
>
64
||
frame_mv
[
this_mode
][
ref_frame
].
as_mv
.
row
<
-
64
||
frame_mv
[
this_mode
][
ref_frame
].
as_mv
.
col
>
64
||
frame_mv
[
this_mode
][
ref_frame
].
as_mv
.
col
<
-
64
))
{
if
(
bsize
==
BLOCK_64X64
)
this_rdc
.
rdcost
=
this_rdc
.
rdcost
<<
1
;
else
if
(
bsize
>=
BLOCK_32X32
)
this_rdc
.
rdcost
=
3
*
this_rdc
.
rdcost
>>
1
;
}
// Skipping checking: test to see if this block can be reconstructed by
// prediction only.
if
(
cpi
->
allow_encode_breakout
)
{
...
...
Write
Preview
Supports
Markdown
0%
Try again
or
attach a new 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