change to use correct type
This commit changes to use uint32_t for cost (always non-negative), and promote to int64_t before calculation of the savings. This fixes an integer overflow. cherry-picked #a3028ddf from aom/master Change-Id: I71c2580d188cc79d2d8069241d0353cf331b5c83
This commit is contained in:
Родитель
19a06bccdf
Коммит
57d92577d4
|
@ -117,15 +117,16 @@ void av1_write_prob_diff_update(aom_writer *w, aom_prob newp, aom_prob oldp) {
|
||||||
|
|
||||||
int av1_prob_diff_update_savings_search(const unsigned int *ct, aom_prob oldp,
|
int av1_prob_diff_update_savings_search(const unsigned int *ct, aom_prob oldp,
|
||||||
aom_prob *bestp, aom_prob upd) {
|
aom_prob *bestp, aom_prob upd) {
|
||||||
const int old_b = cost_branch256(ct, oldp);
|
const uint32_t old_b = cost_branch256(ct, oldp);
|
||||||
int bestsavings = 0;
|
int bestsavings = 0;
|
||||||
aom_prob newp, bestnewp = oldp;
|
aom_prob newp, bestnewp = oldp;
|
||||||
const int step = *bestp > oldp ? -1 : 1;
|
const int step = *bestp > oldp ? -1 : 1;
|
||||||
|
|
||||||
for (newp = *bestp; newp != oldp; newp += step) {
|
for (newp = *bestp; newp != oldp; newp += step) {
|
||||||
const int new_b = cost_branch256(ct, newp);
|
const uint32_t new_b = cost_branch256(ct, newp);
|
||||||
const int update_b = prob_diff_update_cost(newp, oldp) + av1_cost_upd256;
|
const uint32_t update_b =
|
||||||
const int savings = old_b - new_b - update_b;
|
prob_diff_update_cost(newp, oldp) + av1_cost_upd256;
|
||||||
|
const int savings = (int)((int64_t)old_b - new_b - update_b);
|
||||||
if (savings > bestsavings) {
|
if (savings > bestsavings) {
|
||||||
bestsavings = savings;
|
bestsavings = savings;
|
||||||
bestnewp = newp;
|
bestnewp = newp;
|
||||||
|
|
Загрузка…
Ссылка в новой задаче