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
39de1e14
Commit
39de1e14
authored
Dec 12, 2012
by
Ronald S. Bultje
Committed by
Gerrit Code Review
Dec 12, 2012
Browse files
Merge "Consistently use get_prob(), clip_prob() and newly added clip_pixel()." into experimental
parents
0c35b276
4d0ec7aa
Changes
20
Hide whitespace changes
Inline
Side-by-side
vp9/common/vp9_common.h
View file @
39de1e14
...
...
@@ -17,7 +17,7 @@
/* Interface header for common constant data structures and lookup tables */
#include
"vpx_mem/vpx_mem.h"
#include
"vpx/vpx_integer.h"
#include
"vp9/common/vp9_common_types.h"
/* Only need this for fixed-size arrays, for structs just assign. */
...
...
@@ -38,4 +38,8 @@
#define vp9_zero_array( Dest, N) vpx_memset( Dest, 0, N * sizeof( *Dest));
static
__inline
uint8_t
clip_pixel
(
int
val
)
{
return
(
val
>
255
)
?
255u
:
(
val
<
0
)
?
0u
:
val
;
}
#endif
/* common_h */
vp9/common/vp9_entropy.c
View file @
39de1e14
...
...
@@ -360,15 +360,13 @@ static void update_coef_probs(vp9_coeff_probs *dst_coef_probs,
vp9_tree_probs_from_distribution
(
MAX_ENTROPY_TOKENS
,
vp9_coef_encodings
,
vp9_coef_tree
,
coef_probs
,
branch_ct
,
coef_counts
[
i
][
j
][
k
]
,
256
,
1
);
coef_counts
[
i
][
j
][
k
]);
for
(
t
=
0
;
t
<
ENTROPY_NODES
;
++
t
)
{
int
prob
;
count
=
branch_ct
[
t
][
0
]
+
branch_ct
[
t
][
1
];
count
=
count
>
count_sat
?
count_sat
:
count
;
factor
=
(
update_factor
*
count
/
count_sat
);
prob
=
((
int
)
pre_coef_probs
[
i
][
j
][
k
][
t
]
*
(
256
-
factor
)
+
(
int
)
coef_probs
[
t
]
*
factor
+
128
)
>>
8
;
dst_coef_probs
[
i
][
j
][
k
][
t
]
=
clip_prob
(
prob
);
dst_coef_probs
[
i
][
j
][
k
][
t
]
=
weighted_prob
(
pre_coef_probs
[
i
][
j
][
k
][
t
],
coef_probs
[
t
],
factor
);
}
}
}
...
...
vp9/common/vp9_entropymode.c
View file @
39de1e14
...
...
@@ -309,24 +309,24 @@ void vp9_init_mbmode_probs(VP9_COMMON *x) {
vp9_tree_probs_from_distribution
(
VP9_YMODES
,
vp9_ymode_encodings
,
vp9_ymode_tree
,
x
->
fc
.
ymode_prob
,
bct
,
y_mode_cts
,
256
,
1
);
bct
,
y_mode_cts
);
#if CONFIG_SUPERBLOCKS
vp9_tree_probs_from_distribution
(
VP9_I32X32_MODES
,
vp9_sb_ymode_encodings
,
vp9_sb_ymode_tree
,
x
->
fc
.
sb_ymode_prob
,
bct
,
y_mode_cts
,
256
,
1
);
bct
,
y_mode_cts
);
#endif
{
int
i
;
for
(
i
=
0
;
i
<
8
;
i
++
)
{
vp9_tree_probs_from_distribution
(
VP9_YMODES
,
vp9_kf_ymode_encodings
,
vp9_kf_ymode_tree
,
x
->
kf_ymode_prob
[
i
],
bct
,
kf_y_mode_cts
[
i
]
,
256
,
1
);
bct
,
kf_y_mode_cts
[
i
]);
#if CONFIG_SUPERBLOCKS
vp9_tree_probs_from_distribution
(
VP9_I32X32_MODES
,
vp9_sb_kf_ymode_encodings
,
vp9_sb_kf_ymode_tree
,
x
->
sb_kf_ymode_prob
[
i
],
bct
,
kf_y_mode_cts
[
i
]
,
256
,
1
);
kf_y_mode_cts
[
i
]);
#endif
}
}
...
...
@@ -335,16 +335,16 @@ void vp9_init_mbmode_probs(VP9_COMMON *x) {
for
(
i
=
0
;
i
<
VP9_YMODES
;
i
++
)
{
vp9_tree_probs_from_distribution
(
VP9_UV_MODES
,
vp9_uv_mode_encodings
,
vp9_uv_mode_tree
,
x
->
kf_uv_mode_prob
[
i
],
bct
,
kf_uv_mode_cts
[
i
]
,
256
,
1
);
bct
,
kf_uv_mode_cts
[
i
]);
vp9_tree_probs_from_distribution
(
VP9_UV_MODES
,
vp9_uv_mode_encodings
,
vp9_uv_mode_tree
,
x
->
fc
.
uv_mode_prob
[
i
],
bct
,
uv_mode_cts
[
i
]
,
256
,
1
);
bct
,
uv_mode_cts
[
i
]);
}
}
vp9_tree_probs_from_distribution
(
VP9_I8X8_MODES
,
vp9_i8x8_mode_encodings
,
vp9_i8x8_mode_tree
,
x
->
fc
.
i8x8_mode_prob
,
bct
,
i8x8_mode_cts
,
256
,
1
);
bct
,
i8x8_mode_cts
);
vpx_memcpy
(
x
->
fc
.
sub_mv_ref_prob
,
vp9_sub_mv_ref_prob2
,
sizeof
(
vp9_sub_mv_ref_prob2
));
...
...
@@ -362,7 +362,7 @@ static void intra_bmode_probs_from_distribution(
unsigned
int
branch_ct
[
VP9_NKF_BINTRAMODES
-
1
][
2
],
const
unsigned
int
events
[
VP9_NKF_BINTRAMODES
])
{
vp9_tree_probs_from_distribution
(
VP9_NKF_BINTRAMODES
,
vp9_bmode_encodings
,
vp9_bmode_tree
,
p
,
branch_ct
,
events
,
256
,
1
);
vp9_bmode_tree
,
p
,
branch_ct
,
events
);
}
void
vp9_default_bmode_probs
(
vp9_prob
p
[
VP9_NKF_BINTRAMODES
-
1
])
{
...
...
@@ -375,7 +375,7 @@ static void intra_kf_bmode_probs_from_distribution(
unsigned
int
branch_ct
[
VP9_KF_BINTRAMODES
-
1
][
2
],
const
unsigned
int
events
[
VP9_KF_BINTRAMODES
])
{
vp9_tree_probs_from_distribution
(
VP9_KF_BINTRAMODES
,
vp9_kf_bmode_encodings
,
vp9_kf_bmode_tree
,
p
,
branch_ct
,
events
,
256
,
1
);
vp9_kf_bmode_tree
,
p
,
branch_ct
,
events
);
}
void
vp9_kf_default_bmode_probs
(
vp9_prob
p
[
VP9_KF_BINTRAMODES
]
...
...
@@ -495,17 +495,14 @@ void vp9_update_mode_context(VP9_COMMON *pc) {
for
(
j
=
0
;
j
<
INTER_MODE_CONTEXTS
;
j
++
)
{
for
(
i
=
0
;
i
<
4
;
i
++
)
{
int
this_prob
;
int
count
=
mv_ref_ct
[
j
][
i
][
0
]
+
mv_ref_ct
[
j
][
i
][
1
];
int
factor
;
{
this_prob
=
count
>
0
?
256
*
mv_ref_ct
[
j
][
i
][
0
]
/
count
:
128
;
count
=
count
>
MVREF_COUNT_SAT
?
MVREF_COUNT_SAT
:
count
;
factor
=
(
MVREF_MAX_UPDATE_FACTOR
*
count
/
MVREF_COUNT_SAT
);
this_prob
=
(
pc
->
fc
.
vp9_mode_contexts
[
j
][
i
]
*
(
256
-
factor
)
+
this_prob
*
factor
+
128
)
>>
8
;
mode_context
[
j
][
i
]
=
clip_prob
(
this_prob
);
}
int
count
=
mv_ref_ct
[
j
][
i
][
0
]
+
mv_ref_ct
[
j
][
i
][
1
],
factor
;
count
=
count
>
MVREF_COUNT_SAT
?
MVREF_COUNT_SAT
:
count
;
factor
=
(
MVREF_MAX_UPDATE_FACTOR
*
count
/
MVREF_COUNT_SAT
);
mode_context
[
j
][
i
]
=
weighted_prob
(
pc
->
fc
.
vp9_mode_contexts
[
j
][
i
],
get_binary_prob
(
mv_ref_ct
[
j
][
i
][
0
],
mv_ref_ct
[
j
][
i
][
1
]),
factor
);
}
}
}
...
...
@@ -531,25 +528,33 @@ void print_mode_contexts(VP9_COMMON *pc) {
}
#endif
// #define MODE_COUNT_TESTING
#define MODE_COUNT_SAT 20
#define MODE_MAX_UPDATE_FACTOR 144
static
void
update_mode_probs
(
int
n_modes
,
struct
vp9_token_struct
*
encoding
,
const
vp9_tree_index
*
tree
,
unsigned
int
*
cnt
,
vp9_prob
*
pre_probs
,
vp9_prob
*
dst_probs
)
{
#define MAX_PROBS 32
vp9_prob
probs
[
MAX_PROBS
];
unsigned
int
branch_ct
[
MAX_PROBS
][
2
];
int
t
,
count
,
factor
;
assert
(
n_modes
-
1
<
MAX_PROBS
);
vp9_tree_probs_from_distribution
(
n_modes
,
encoding
,
tree
,
probs
,
branch_ct
,
cnt
);
for
(
t
=
0
;
t
<
n_modes
-
1
;
++
t
)
{
count
=
branch_ct
[
t
][
0
]
+
branch_ct
[
t
][
1
];
count
=
count
>
MODE_COUNT_SAT
?
MODE_COUNT_SAT
:
count
;
factor
=
(
MODE_MAX_UPDATE_FACTOR
*
count
/
MODE_COUNT_SAT
);
dst_probs
[
t
]
=
weighted_prob
(
pre_probs
[
t
],
probs
[
t
],
factor
);
}
}
// #define MODE_COUNT_TESTING
void
vp9_adapt_mode_probs
(
VP9_COMMON
*
cm
)
{
int
i
,
t
,
count
,
factor
;
unsigned
int
branch_ct
[
32
][
2
];
vp9_prob
ymode_probs
[
VP9_YMODES
-
1
];
#if CONFIG_SUPERBLOCKS
vp9_prob
sb_ymode_probs
[
VP9_I32X32_MODES
-
1
];
#endif
vp9_prob
uvmode_probs
[
VP9_UV_MODES
-
1
];
vp9_prob
bmode_probs
[
VP9_NKF_BINTRAMODES
-
1
];
vp9_prob
i8x8_mode_probs
[
VP9_I8X8_MODES
-
1
];
vp9_prob
sub_mv_ref_probs
[
VP9_SUBMVREFS
-
1
];
vp9_prob
mbsplit_probs
[
VP9_NUMMBSPLITS
-
1
];
#if CONFIG_COMP_INTERINTRA_PRED
vp9_prob
interintra_prob
;
#endif
int
i
;
#ifdef MODE_COUNT_TESTING
int
t
;
printf
(
"static const unsigned int
\n
ymode_counts"
"[VP9_YMODES] = {
\n
"
);
for
(
t
=
0
;
t
<
VP9_YMODES
;
++
t
)
printf
(
"%d, "
,
cm
->
fc
.
ymode_counts
[
t
]);
...
...
@@ -590,116 +595,45 @@ void vp9_adapt_mode_probs(VP9_COMMON *cm) {
printf
(
"};
\n
"
);
#endif
#endif
vp9_tree_probs_from_distribution
(
VP9_YMODES
,
vp9_ymode_encodings
,
vp9_ymode_tree
,
ymode_probs
,
branch_ct
,
cm
->
fc
.
ymode_counts
,
256
,
1
);
for
(
t
=
0
;
t
<
VP9_YMODES
-
1
;
++
t
)
{
int
prob
;
count
=
branch_ct
[
t
][
0
]
+
branch_ct
[
t
][
1
];
count
=
count
>
MODE_COUNT_SAT
?
MODE_COUNT_SAT
:
count
;
factor
=
(
MODE_MAX_UPDATE_FACTOR
*
count
/
MODE_COUNT_SAT
);
prob
=
((
int
)
cm
->
fc
.
pre_ymode_prob
[
t
]
*
(
256
-
factor
)
+
(
int
)
ymode_probs
[
t
]
*
factor
+
128
)
>>
8
;
cm
->
fc
.
ymode_prob
[
t
]
=
clip_prob
(
prob
);
}
update_mode_probs
(
VP9_YMODES
,
vp9_ymode_encodings
,
vp9_ymode_tree
,
cm
->
fc
.
ymode_counts
,
cm
->
fc
.
pre_ymode_prob
,
cm
->
fc
.
ymode_prob
);
#if CONFIG_SUPERBLOCKS
vp9_tree_probs_from_distribution
(
VP9_I32X32_MODES
,
vp9_sb_ymode_encodings
,
vp9_sb_ymode_tree
,
sb_ymode_probs
,
branch_ct
,
cm
->
fc
.
sb_ymode_counts
,
256
,
1
);
for
(
t
=
0
;
t
<
VP9_I32X32_MODES
-
1
;
++
t
)
{
int
prob
;
count
=
branch_ct
[
t
][
0
]
+
branch_ct
[
t
][
1
];
count
=
count
>
MODE_COUNT_SAT
?
MODE_COUNT_SAT
:
count
;
factor
=
(
MODE_MAX_UPDATE_FACTOR
*
count
/
MODE_COUNT_SAT
);
prob
=
((
int
)
cm
->
fc
.
pre_sb_ymode_prob
[
t
]
*
(
256
-
factor
)
+
(
int
)
sb_ymode_probs
[
t
]
*
factor
+
128
)
>>
8
;
cm
->
fc
.
sb_ymode_prob
[
t
]
=
clip_prob
(
prob
);
}
update_mode_probs
(
VP9_I32X32_MODES
,
vp9_sb_ymode_encodings
,
vp9_sb_ymode_tree
,
cm
->
fc
.
sb_ymode_counts
,
cm
->
fc
.
pre_sb_ymode_prob
,
cm
->
fc
.
sb_ymode_prob
);
#endif
for
(
i
=
0
;
i
<
VP9_YMODES
;
++
i
)
{
vp9_tree_probs_from_distribution
(
VP9_UV_MODES
,
vp9_uv_mode_encodings
,
vp9_uv_mode_tree
,
uvmode_probs
,
branch_ct
,
cm
->
fc
.
uv_mode_counts
[
i
],
256
,
1
);
for
(
t
=
0
;
t
<
VP9_UV_MODES
-
1
;
++
t
)
{
int
prob
;
count
=
branch_ct
[
t
][
0
]
+
branch_ct
[
t
][
1
];
count
=
count
>
MODE_COUNT_SAT
?
MODE_COUNT_SAT
:
count
;
factor
=
(
MODE_MAX_UPDATE_FACTOR
*
count
/
MODE_COUNT_SAT
);
prob
=
((
int
)
cm
->
fc
.
pre_uv_mode_prob
[
i
][
t
]
*
(
256
-
factor
)
+
(
int
)
uvmode_probs
[
t
]
*
factor
+
128
)
>>
8
;
cm
->
fc
.
uv_mode_prob
[
i
][
t
]
=
clip_prob
(
prob
);
}
}
vp9_tree_probs_from_distribution
(
VP9_NKF_BINTRAMODES
,
vp9_bmode_encodings
,
vp9_bmode_tree
,
bmode_probs
,
branch_ct
,
cm
->
fc
.
bmode_counts
,
256
,
1
);
for
(
t
=
0
;
t
<
VP9_NKF_BINTRAMODES
-
1
;
++
t
)
{
int
prob
;
count
=
branch_ct
[
t
][
0
]
+
branch_ct
[
t
][
1
];
count
=
count
>
MODE_COUNT_SAT
?
MODE_COUNT_SAT
:
count
;
factor
=
(
MODE_MAX_UPDATE_FACTOR
*
count
/
MODE_COUNT_SAT
);
prob
=
((
int
)
cm
->
fc
.
pre_bmode_prob
[
t
]
*
(
256
-
factor
)
+
(
int
)
bmode_probs
[
t
]
*
factor
+
128
)
>>
8
;
cm
->
fc
.
bmode_prob
[
t
]
=
clip_prob
(
prob
);
}
vp9_tree_probs_from_distribution
(
VP9_I8X8_MODES
,
vp9_i8x8_mode_encodings
,
vp9_i8x8_mode_tree
,
i8x8_mode_probs
,
branch_ct
,
cm
->
fc
.
i8x8_mode_counts
,
256
,
1
);
for
(
t
=
0
;
t
<
VP9_I8X8_MODES
-
1
;
++
t
)
{
int
prob
;
count
=
branch_ct
[
t
][
0
]
+
branch_ct
[
t
][
1
];
count
=
count
>
MODE_COUNT_SAT
?
MODE_COUNT_SAT
:
count
;
factor
=
(
MODE_MAX_UPDATE_FACTOR
*
count
/
MODE_COUNT_SAT
);
prob
=
((
int
)
cm
->
fc
.
pre_i8x8_mode_prob
[
t
]
*
(
256
-
factor
)
+
(
int
)
i8x8_mode_probs
[
t
]
*
factor
+
128
)
>>
8
;
cm
->
fc
.
i8x8_mode_prob
[
t
]
=
clip_prob
(
prob
);
update_mode_probs
(
VP9_UV_MODES
,
vp9_uv_mode_encodings
,
vp9_uv_mode_tree
,
cm
->
fc
.
uv_mode_counts
[
i
],
cm
->
fc
.
pre_uv_mode_prob
[
i
],
cm
->
fc
.
uv_mode_prob
[
i
]);
}
update_mode_probs
(
VP9_NKF_BINTRAMODES
,
vp9_bmode_encodings
,
vp9_bmode_tree
,
cm
->
fc
.
bmode_counts
,
cm
->
fc
.
pre_bmode_prob
,
cm
->
fc
.
bmode_prob
);
update_mode_probs
(
VP9_I8X8_MODES
,
vp9_i8x8_mode_encodings
,
vp9_i8x8_mode_tree
,
cm
->
fc
.
i8x8_mode_counts
,
cm
->
fc
.
pre_i8x8_mode_prob
,
cm
->
fc
.
i8x8_mode_prob
);
for
(
i
=
0
;
i
<
SUBMVREF_COUNT
;
++
i
)
{
vp9_tree_probs_from_distribution
(
VP9_SUBMVREFS
,
vp9_sub_mv_ref_encoding_array
,
vp9_sub_mv_ref_tree
,
sub_mv_ref_probs
,
branch_ct
,
cm
->
fc
.
sub_mv_ref_counts
[
i
],
256
,
1
);
for
(
t
=
0
;
t
<
VP9_SUBMVREFS
-
1
;
++
t
)
{
int
prob
;
count
=
branch_ct
[
t
][
0
]
+
branch_ct
[
t
][
1
];
count
=
count
>
MODE_COUNT_SAT
?
MODE_COUNT_SAT
:
count
;
factor
=
(
MODE_MAX_UPDATE_FACTOR
*
count
/
MODE_COUNT_SAT
);
prob
=
((
int
)
cm
->
fc
.
pre_sub_mv_ref_prob
[
i
][
t
]
*
(
256
-
factor
)
+
(
int
)
sub_mv_ref_probs
[
t
]
*
factor
+
128
)
>>
8
;
cm
->
fc
.
sub_mv_ref_prob
[
i
][
t
]
=
clip_prob
(
prob
);
}
}
vp9_tree_probs_from_distribution
(
VP9_NUMMBSPLITS
,
vp9_mbsplit_encodings
,
vp9_mbsplit_tree
,
mbsplit_probs
,
branch_ct
,
cm
->
fc
.
mbsplit_counts
,
256
,
1
);
for
(
t
=
0
;
t
<
VP9_NUMMBSPLITS
-
1
;
++
t
)
{
int
prob
;
count
=
branch_ct
[
t
][
0
]
+
branch_ct
[
t
][
1
];
count
=
count
>
MODE_COUNT_SAT
?
MODE_COUNT_SAT
:
count
;
factor
=
(
MODE_MAX_UPDATE_FACTOR
*
count
/
MODE_COUNT_SAT
);
prob
=
((
int
)
cm
->
fc
.
pre_mbsplit_prob
[
t
]
*
(
256
-
factor
)
+
(
int
)
mbsplit_probs
[
t
]
*
factor
+
128
)
>>
8
;
cm
->
fc
.
mbsplit_prob
[
t
]
=
clip_prob
(
prob
);
update_mode_probs
(
VP9_SUBMVREFS
,
vp9_sub_mv_ref_encoding_array
,
vp9_sub_mv_ref_tree
,
cm
->
fc
.
sub_mv_ref_counts
[
i
],
cm
->
fc
.
pre_sub_mv_ref_prob
[
i
],
cm
->
fc
.
sub_mv_ref_prob
[
i
]);
}
update_mode_probs
(
VP9_NUMMBSPLITS
,
vp9_mbsplit_encodings
,
vp9_mbsplit_tree
,
cm
->
fc
.
mbsplit_counts
,
cm
->
fc
.
pre_mbsplit_prob
,
cm
->
fc
.
mbsplit_prob
);
#if CONFIG_COMP_INTERINTRA_PRED
if
(
cm
->
use_interintra
)
{
int
prob
;
interintra_prob
=
vp9_bin_prob_from_distribution
(
cm
->
fc
.
interintra_counts
);
int
factor
,
interintra_prob
,
count
;
interintra_prob
=
get_binary_prob
(
cm
->
fc
.
interintra_counts
[
0
],
cm
->
fc
.
interintra_counts
[
1
]);
count
=
cm
->
fc
.
interintra_counts
[
0
]
+
cm
->
fc
.
interintra_counts
[
1
];
count
=
count
>
MODE_COUNT_SAT
?
MODE_COUNT_SAT
:
count
;
factor
=
(
MODE_MAX_UPDATE_FACTOR
*
count
/
MODE_COUNT_SAT
);
prob
=
((
int
)
cm
->
fc
.
pre_interintra_prob
*
(
256
-
factor
)
+
(
int
)
interintra_prob
*
factor
+
128
)
>>
8
;
if
(
prob
<=
0
)
cm
->
fc
.
interintra_prob
=
1
;
else
if
(
prob
>
255
)
cm
->
fc
.
interintra_prob
=
255
;
else
cm
->
fc
.
interintra_prob
=
prob
;
cm
->
fc
.
interintra_prob
=
weighted_prob
(
cm
->
fc
.
pre_interintra_prob
,
interintra_prob
,
factor
);
}
#endif
}
vp9/common/vp9_entropymv.c
View file @
39de1e14
...
...
@@ -213,16 +213,12 @@ void vp9_increment_nmv(const MV *mv, const MV *ref, nmv_context_counts *mvctx,
static
void
adapt_prob
(
vp9_prob
*
dest
,
vp9_prob
prep
,
vp9_prob
newp
,
unsigned
int
ct
[
2
])
{
int
factor
;
int
prob
;
int
count
=
ct
[
0
]
+
ct
[
1
];
if
(
count
)
{
count
=
count
>
MV_COUNT_SAT
?
MV_COUNT_SAT
:
count
;
factor
=
(
MV_MAX_UPDATE_FACTOR
*
count
/
MV_COUNT_SAT
);
prob
=
((
int
)
prep
*
(
256
-
factor
)
+
(
int
)(
newp
)
*
factor
+
128
)
>>
8
;
prob
+=
!
prob
;
prob
=
(
prob
>
255
?
255
:
prob
);
*
dest
=
prob
;
*
dest
=
weighted_prob
(
prep
,
newp
,
MV_MAX_UPDATE_FACTOR
*
count
/
MV_COUNT_SAT
);
}
}
...
...
@@ -251,11 +247,10 @@ void vp9_counts_to_nmv_context(
vp9_mv_joint_tree
,
prob
->
joints
,
branch_ct_joint
,
NMVcount
->
joints
,
256
,
1
);
NMVcount
->
joints
);
for
(
i
=
0
;
i
<
2
;
++
i
)
{
prob
->
comps
[
i
].
sign
=
vp9_bin_prob_from_distribution
(
NMVcount
->
comps
[
i
].
sign
);
prob
->
comps
[
i
].
sign
=
get_binary_prob
(
NMVcount
->
comps
[
i
].
sign
[
0
],
NMVcount
->
comps
[
i
].
sign
[
1
]
);
branch_ct_sign
[
i
][
0
]
=
NMVcount
->
comps
[
i
].
sign
[
0
];
branch_ct_sign
[
i
][
1
]
=
NMVcount
->
comps
[
i
].
sign
[
1
];
vp9_tree_probs_from_distribution
(
MV_CLASSES
,
...
...
@@ -263,18 +258,16 @@ void vp9_counts_to_nmv_context(
vp9_mv_class_tree
,
prob
->
comps
[
i
].
classes
,
branch_ct_classes
[
i
],
NMVcount
->
comps
[
i
].
classes
,
256
,
1
);
NMVcount
->
comps
[
i
].
classes
);
vp9_tree_probs_from_distribution
(
CLASS0_SIZE
,
vp9_mv_class0_encodings
,
vp9_mv_class0_tree
,
prob
->
comps
[
i
].
class0
,
branch_ct_class0
[
i
],
NMVcount
->
comps
[
i
].
class0
,
256
,
1
);
NMVcount
->
comps
[
i
].
class0
);
for
(
j
=
0
;
j
<
MV_OFFSET_BITS
;
++
j
)
{
prob
->
comps
[
i
].
bits
[
j
]
=
vp9
_bin_prob
_from_distribution
(
NMVcount
->
comps
[
i
].
bits
[
j
]);
prob
->
comps
[
i
].
bits
[
j
]
=
get
_bin
ary
_prob
(
NMVcount
->
comps
[
i
].
bits
[
j
][
0
],
NMVcount
->
comps
[
i
].
bits
[
j
]
[
1
]
);
branch_ct_bits
[
i
][
j
][
0
]
=
NMVcount
->
comps
[
i
].
bits
[
j
][
0
];
branch_ct_bits
[
i
][
j
][
1
]
=
NMVcount
->
comps
[
i
].
bits
[
j
][
1
];
}
...
...
@@ -286,26 +279,25 @@ void vp9_counts_to_nmv_context(
vp9_mv_fp_tree
,
prob
->
comps
[
i
].
class0_fp
[
k
],
branch_ct_class0_fp
[
i
][
k
],
NMVcount
->
comps
[
i
].
class0_fp
[
k
],
256
,
1
);
NMVcount
->
comps
[
i
].
class0_fp
[
k
]);
}
vp9_tree_probs_from_distribution
(
4
,
vp9_mv_fp_encodings
,
vp9_mv_fp_tree
,
prob
->
comps
[
i
].
fp
,
branch_ct_fp
[
i
],
NMVcount
->
comps
[
i
].
fp
,
256
,
1
);
NMVcount
->
comps
[
i
].
fp
);
}
if
(
usehp
)
{
for
(
i
=
0
;
i
<
2
;
++
i
)
{
prob
->
comps
[
i
].
class0_hp
=
vp9_bin_prob_from_distribution
(
NMVcount
->
comps
[
i
].
class0_hp
);
prob
->
comps
[
i
].
class0_hp
=
get_binary_prob
(
NMVcount
->
comps
[
i
].
class0_hp
[
0
],
NMVcount
->
comps
[
i
].
class0_hp
[
1
]);
branch_ct_class0_hp
[
i
][
0
]
=
NMVcount
->
comps
[
i
].
class0_hp
[
0
];
branch_ct_class0_hp
[
i
][
1
]
=
NMVcount
->
comps
[
i
].
class0_hp
[
1
];
prob
->
comps
[
i
].
hp
=
vp9_bin_prob_from_distribution
(
NMVcount
->
comps
[
i
].
hp
);
prob
->
comps
[
i
].
hp
=
get_binary_prob
(
NMVcount
->
comps
[
i
].
hp
[
0
],
NMVcount
->
comps
[
i
].
hp
[
1
]
);
branch_ct_hp
[
i
][
0
]
=
NMVcount
->
comps
[
i
].
hp
[
0
];
branch_ct_hp
[
i
][
1
]
=
NMVcount
->
comps
[
i
].
hp
[
1
];
}
...
...
vp9/common/vp9_filter.c
View file @
39de1e14
...
...
@@ -13,6 +13,7 @@
#include
"vp9/common/vp9_filter.h"
#include
"vpx_ports/mem.h"
#include
"vp9_rtcd.h"
#include
"vp9/common/vp9_common.h"
DECLARE_ALIGNED
(
16
,
const
short
,
vp9_bilinear_filters
[
SUBPEL_SHIFTS
][
2
])
=
{
{
128
,
0
},
...
...
@@ -148,11 +149,11 @@ static void filter_block2d_first_pass_6(unsigned char *src_ptr,
unsigned
int
output_width
,
const
short
*
vp9_filter
)
{
unsigned
int
i
,
j
;
int
T
emp
;
int
t
emp
;
for
(
i
=
0
;
i
<
output_height
;
i
++
)
{
for
(
j
=
0
;
j
<
output_width
;
j
++
)
{
T
emp
=
((
int
)
src_ptr
[
-
2
*
(
int
)
pixel_step
]
*
vp9_filter
[
0
])
+
t
emp
=
((
int
)
src_ptr
[
-
2
*
(
int
)
pixel_step
]
*
vp9_filter
[
0
])
+
((
int
)
src_ptr
[
-
1
*
(
int
)
pixel_step
]
*
vp9_filter
[
1
])
+
((
int
)
src_ptr
[
0
]
*
vp9_filter
[
2
])
+
((
int
)
src_ptr
[
pixel_step
]
*
vp9_filter
[
3
])
+
...
...
@@ -161,14 +162,7 @@ static void filter_block2d_first_pass_6(unsigned char *src_ptr,
(
VP9_FILTER_WEIGHT
>>
1
);
/* Rounding */
/* Normalize back to 0-255 */
Temp
=
Temp
>>
VP9_FILTER_SHIFT
;
if
(
Temp
<
0
)
Temp
=
0
;
else
if
(
Temp
>
255
)
Temp
=
255
;
output_ptr
[
j
]
=
Temp
;
output_ptr
[
j
]
=
clip_pixel
(
temp
>>
VP9_FILTER_SHIFT
);
src_ptr
++
;
}
...
...
@@ -187,12 +181,12 @@ static void filter_block2d_second_pass_6(int *src_ptr,
unsigned
int
output_width
,
const
short
*
vp9_filter
)
{
unsigned
int
i
,
j
;
int
T
emp
;
int
t
emp
;
for
(
i
=
0
;
i
<
output_height
;
i
++
)
{
for
(
j
=
0
;
j
<
output_width
;
j
++
)
{
/* Apply filter */
T
emp
=
((
int
)
src_ptr
[
-
2
*
(
int
)
pixel_step
]
*
vp9_filter
[
0
])
+
t
emp
=
((
int
)
src_ptr
[
-
2
*
(
int
)
pixel_step
]
*
vp9_filter
[
0
])
+
((
int
)
src_ptr
[
-
1
*
(
int
)
pixel_step
]
*
vp9_filter
[
1
])
+
((
int
)
src_ptr
[
0
]
*
vp9_filter
[
2
])
+
((
int
)
src_ptr
[
pixel_step
]
*
vp9_filter
[
3
])
+
...
...
@@ -201,14 +195,7 @@ static void filter_block2d_second_pass_6(int *src_ptr,
(
VP9_FILTER_WEIGHT
>>
1
);
/* Rounding */
/* Normalize back to 0-255 */
Temp
=
Temp
>>
VP9_FILTER_SHIFT
;
if
(
Temp
<
0
)
Temp
=
0
;
else
if
(
Temp
>
255
)
Temp
=
255
;
output_ptr
[
j
]
=
(
unsigned
char
)
Temp
;
output_ptr
[
j
]
=
clip_pixel
(
temp
>>
VP9_FILTER_SHIFT
);
src_ptr
++
;
}
...
...
@@ -235,12 +222,12 @@ static void filter_block2d_second_pass_avg_6(int *src_ptr,
unsigned
int
output_width
,
const
short
*
vp9_filter
)
{
unsigned
int
i
,
j
;
int
T
emp
;
int
t
emp
;
for
(
i
=
0
;
i
<
output_height
;
i
++
)
{
for
(
j
=
0
;
j
<
output_width
;
j
++
)
{
/* Apply filter */
T
emp
=
((
int
)
src_ptr
[
-
2
*
(
int
)
pixel_step
]
*
vp9_filter
[
0
])
+
t
emp
=
((
int
)
src_ptr
[
-
2
*
(
int
)
pixel_step
]
*
vp9_filter
[
0
])
+
((
int
)
src_ptr
[
-
1
*
(
int
)
pixel_step
]
*
vp9_filter
[
1
])
+
((
int
)
src_ptr
[
0
]
*
vp9_filter
[
2
])
+
((
int
)
src_ptr
[
pixel_step
]
*
vp9_filter
[
3
])
+
...
...
@@ -249,14 +236,8 @@ static void filter_block2d_second_pass_avg_6(int *src_ptr,
(
VP9_FILTER_WEIGHT
>>
1
);
/* Rounding */
/* Normalize back to 0-255 */
Temp
=
Temp
>>
VP9_FILTER_SHIFT
;
if
(
Temp
<
0
)
Temp
=
0
;
else
if
(
Temp
>
255
)
Temp
=
255
;
output_ptr
[
j
]
=
(
unsigned
char
)((
output_ptr
[
j
]
+
Temp
+
1
)
>>
1
);
output_ptr
[
j
]
=
(
clip_pixel
(
temp
>>
VP9_FILTER_SHIFT
)
+
output_ptr
[
j
]
+
1
)
>>
1
;
src_ptr
++
;
}
...
...
@@ -539,14 +520,8 @@ static void filter_block2d_8_c(const unsigned char *src_ptr,
(
VP9_FILTER_WEIGHT
>>
1
);
// Rounding
// Normalize back to 0-255...
temp
>>=
VP9_FILTER_SHIFT
;
if
(
temp
<
0
)
{
temp
=
0
;
}
else
if
(
temp
>
255
)
{
temp
=
255
;
}
*
output_ptr
=
clip_pixel
(
temp
>>
VP9_FILTER_SHIFT
);
src_ptr
++
;
*
output_ptr
=
temp
;
output_ptr
+=
intermediate_height
;
}
src_ptr
+=
src_next_row_stride
;
...
...
@@ -573,15 +548,8 @@ static void filter_block2d_8_c(const unsigned char *src_ptr,
(
VP9_FILTER_WEIGHT
>>
1
);
// Rounding
// Normalize back to 0-255...
temp
>>=
VP9_FILTER_SHIFT
;
if
(
temp
<
0
)
{
temp
=
0
;
}
else
if
(
temp
>
255
)
{
temp
=
255
;
}
*
dst_ptr
++
=
clip_pixel
(
temp
>>
VP9_FILTER_SHIFT
);
src_ptr
+=
intermediate_height
;
*
dst_ptr
++
=
(
unsigned
char
)
temp
;
}
src_ptr
+=
intermediate_next_stride
;
dst_ptr
+=
dst_next_row_stride
;
...
...
@@ -940,15 +908,15 @@ static void filter_block2d_bil_second_pass(unsigned short *src_ptr,
unsigned
int
width
,
const
short
*
vp9_filter
)
{
unsigned
int
i
,
j
;
int
T
emp
;
int
t
emp
;
for
(
i
=
0
;
i
<
height
;
i
++
)
{
for
(
j
=
0
;
j
<
width
;
j
++
)
{
/* Apply filter */
T
emp
=
((
int
)
src_ptr
[
0
]
*
vp9_filter
[
0
])
+
t
emp
=
((
int
)
src_ptr
[
0
]
*
vp9_filter
[
0
])
+
((
int
)
src_ptr
[
width
]
*
vp9_filter
[
1
])
+
(
VP9_FILTER_WEIGHT
/
2
);
dst_ptr
[
j
]
=
(
unsigned
int
)(
T
emp
>>
VP9_FILTER_SHIFT
);
dst_ptr
[
j
]
=
(
unsigned
int
)(
t
emp
>>
VP9_FILTER_SHIFT
);
src_ptr
++
;
}
...
...
@@ -973,15 +941,15 @@ static void filter_block2d_bil_second_pass_avg(unsigned short *src_ptr,
unsigned
int
width
,
const
short
*
vp9_filter
)
{
unsigned
int
i
,
j
;
int
T
emp
;
int
t
emp
;
for
(
i
=
0
;
i
<
height
;
i
++
)
{
for
(
j
=
0
;
j
<
width
;
j
++
)
{
/* Apply filter */
T
emp
=
((
int
)
src_ptr
[
0
]
*
vp9_filter
[
0
])
+
((
int
)
src_ptr
[
width
]
*
vp9_filter
[
1
])
+
(
VP9_FILTER_WEIGHT
/
2
);
dst_ptr
[
j
]
=
(
unsigned
int
)((
(
T
emp
>>
VP9_FILTER_SHIFT
)
+
dst_ptr
[
j
]
+
1
)
>>
1
);
t
emp
=
(
((
int
)
src_ptr
[
0
]
*
vp9_filter
[
0
])
+
((
int
)
src_ptr
[
width
]
*
vp9_filter
[
1
])
+
(
VP9_FILTER_WEIGHT
/
2
)
)
>>
VP9_FILTER_SHIFT
;
dst_ptr
[
j
]
=
(
unsigned
int
)((
t
emp
+
dst_ptr
[
j
]
+
1
)
>>
1
);
src_ptr
++
;
}
...
...
vp9/common/vp9_idctllm.c
View file @
39de1e14
...
...
@@ -26,8 +26,8 @@