Commit 989193c7 authored by Alex Converse's avatar Alex Converse
Browse files

Make the zero handling in extend_to_full_distribution more explicit.

The old workaround "p = 0 ? 0 : p -1" is misleading.

?: happens before =
assigning back to p truncates to one byte.

Therefore it is equivalent to (p - 1) & 0xFF, but the check just exists
to work around a first pass bug, so let's make the work around more
clear.

https://bugs.chromium.org/p/webm/issues/detail?id=1089

Change-Id: I587c44dd61c1f3767543c0126376f881889935af
parent 6f229b3e
...@@ -403,7 +403,6 @@ const vpx_prob vp10_pareto8_full[COEFF_PROB_MODELS][MODEL_NODES] = { ...@@ -403,7 +403,6 @@ const vpx_prob vp10_pareto8_full[COEFF_PROB_MODELS][MODEL_NODES] = {
{255, 241, 243, 255, 236, 255, 252, 254}, {255, 241, 243, 255, 236, 255, 252, 254},
{255, 243, 245, 255, 237, 255, 252, 254}, {255, 243, 245, 255, 237, 255, 252, 254},
{255, 246, 247, 255, 239, 255, 253, 255}, {255, 246, 247, 255, 239, 255, 253, 255},
{255, 246, 247, 255, 239, 255, 253, 255},
}; };
static const vp10_coeff_probs_model default_coef_probs_4x4[PLANE_TYPES] = { static const vp10_coeff_probs_model default_coef_probs_4x4[PLANE_TYPES] = {
...@@ -743,7 +742,9 @@ static const vp10_coeff_probs_model default_coef_probs_32x32[PLANE_TYPES] = { ...@@ -743,7 +742,9 @@ static const vp10_coeff_probs_model default_coef_probs_32x32[PLANE_TYPES] = {
}; };
static void extend_to_full_distribution(vpx_prob *probs, vpx_prob p) { static void extend_to_full_distribution(vpx_prob *probs, vpx_prob p) {
memcpy(probs, vp10_pareto8_full[p = 0 ? 0 : p - 1], // TODO(aconverse): model[PIVOT_NODE] should never be zero.
// https://code.google.com/p/webm/issues/detail?id=1089
memcpy(probs, vp10_pareto8_full[p == 0 ? 254 : p - 1],
MODEL_NODES * sizeof(vpx_prob)); MODEL_NODES * sizeof(vpx_prob));
} }
......
...@@ -153,7 +153,7 @@ static INLINE const uint8_t *get_band_translate(TX_SIZE tx_size) { ...@@ -153,7 +153,7 @@ static INLINE const uint8_t *get_band_translate(TX_SIZE tx_size) {
// 1, 3, 5, 7, ..., 253, 255 // 1, 3, 5, 7, ..., 253, 255
// In between probabilities are interpolated linearly // In between probabilities are interpolated linearly
#define COEFF_PROB_MODELS 256 #define COEFF_PROB_MODELS 255
#define UNCONSTRAINED_NODES 3 #define UNCONSTRAINED_NODES 3
......
...@@ -403,7 +403,6 @@ const vpx_prob vp9_pareto8_full[COEFF_PROB_MODELS][MODEL_NODES] = { ...@@ -403,7 +403,6 @@ const vpx_prob vp9_pareto8_full[COEFF_PROB_MODELS][MODEL_NODES] = {
{255, 241, 243, 255, 236, 255, 252, 254}, {255, 241, 243, 255, 236, 255, 252, 254},
{255, 243, 245, 255, 237, 255, 252, 254}, {255, 243, 245, 255, 237, 255, 252, 254},
{255, 246, 247, 255, 239, 255, 253, 255}, {255, 246, 247, 255, 239, 255, 253, 255},
{255, 246, 247, 255, 239, 255, 253, 255},
}; };
static const vp9_coeff_probs_model default_coef_probs_4x4[PLANE_TYPES] = { static const vp9_coeff_probs_model default_coef_probs_4x4[PLANE_TYPES] = {
...@@ -743,7 +742,9 @@ static const vp9_coeff_probs_model default_coef_probs_32x32[PLANE_TYPES] = { ...@@ -743,7 +742,9 @@ static const vp9_coeff_probs_model default_coef_probs_32x32[PLANE_TYPES] = {
}; };
static void extend_to_full_distribution(vpx_prob *probs, vpx_prob p) { static void extend_to_full_distribution(vpx_prob *probs, vpx_prob p) {
memcpy(probs, vp9_pareto8_full[p = 0 ? 0 : p - 1], // TODO(aconverse): model[PIVOT_NODE] should never be zero.
// https://code.google.com/p/webm/issues/detail?id=1089
memcpy(probs, vp9_pareto8_full[p == 0 ? 254 : p - 1],
MODEL_NODES * sizeof(vpx_prob)); MODEL_NODES * sizeof(vpx_prob));
} }
......
...@@ -138,7 +138,7 @@ static INLINE const uint8_t *get_band_translate(TX_SIZE tx_size) { ...@@ -138,7 +138,7 @@ static INLINE const uint8_t *get_band_translate(TX_SIZE tx_size) {
// 1, 3, 5, 7, ..., 253, 255 // 1, 3, 5, 7, ..., 253, 255
// In between probabilities are interpolated linearly // In between probabilities are interpolated linearly
#define COEFF_PROB_MODELS 256 #define COEFF_PROB_MODELS 255
#define UNCONSTRAINED_NODES 3 #define UNCONSTRAINED_NODES 3
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment