Correctly initialize "ones" value in neon quantize

By using 0xff for a short it was not setting the high bits. When
comparing the output with vtst to find non-zero elements it was skipping
vaules which had no low bits set such as -512 / 0xFE00.

Using -8191 as the first element of coeff will generate this condition.

BUG=883

Change-Id: Ia1e10fb809d1e7866f28c56769fe703e6231a657
This commit is contained in:
Johann 2014-11-20 13:24:55 -08:00
Родитель 72522dbc86
Коммит 08ad7e4db5
2 изменённых файлов: 9 добавлений и 1 удалений

Просмотреть файл

@ -147,6 +147,14 @@ TEST_P(QuantizeTest, TestZeroInput) {
RunComparison();
}
TEST_P(QuantizeTest, TestLargeNegativeInput) {
FillCoeffConstant(0);
// Generate a qcoeff which contains 512/-512 (0x0100/0xFE00) to catch issues
// like BUG=883 where the constant being compared was incorrectly initialized.
vp8_comp_->mb.coeff[0] = -8191;
RunComparison();
}
TEST_P(QuantizeTest, TestRandomInput) {
FillCoeffRandom();
RunComparison();

Просмотреть файл

@ -19,7 +19,7 @@ static const uint16_t inv_zig_zag[16] = {
};
void vp8_fast_quantize_b_neon(BLOCK *b, BLOCKD *d) {
const int16x8_t one_q = vdupq_n_s16(0xff),
const int16x8_t one_q = vdupq_n_s16(-1),
z0 = vld1q_s16(b->coeff),
z1 = vld1q_s16(b->coeff + 8),
round0 = vld1q_s16(b->round),