Re-distribute hierarchical vector match pattern
This commit modifies the hierarchical vector match patter. It avoids repeated SAD computation at same points. The function vp9_vector_sad_sse2 is called 12 times per 64x64 block, instead of 15 times as before. The effective coverage remains the same. Change-Id: I91ad9d27d40db8963c907d02af84e10702136994
This commit is contained in:
@@ -528,10 +528,10 @@ static int vector_match(int16_t *ref, int16_t *src) {
|
||||
}
|
||||
center = offset;
|
||||
|
||||
for (d = -8; d <= 8; d += 4) {
|
||||
for (d = -8; d <= 8; d += 16) {
|
||||
int this_pos = offset + d;
|
||||
// check limit
|
||||
if (this_pos < 0 || this_pos > 64 || this_pos == 32)
|
||||
if (this_pos < 0 || this_pos > 64)
|
||||
continue;
|
||||
this_sad = vp9_vector_sad(&ref[this_pos], src, 64);
|
||||
if (this_sad < best_sad) {
|
||||
@@ -541,10 +541,10 @@ static int vector_match(int16_t *ref, int16_t *src) {
|
||||
}
|
||||
offset = center;
|
||||
|
||||
for (d = -4; d <= 4; d += 2) {
|
||||
for (d = -4; d <= 4; d += 8) {
|
||||
int this_pos = offset + d;
|
||||
// check limit
|
||||
if (this_pos < 0 || this_pos > 64 || this_pos == 32)
|
||||
if (this_pos < 0 || this_pos > 64)
|
||||
continue;
|
||||
this_sad = vp9_vector_sad(&ref[this_pos], src, 64);
|
||||
if (this_sad < best_sad) {
|
||||
@@ -554,10 +554,23 @@ static int vector_match(int16_t *ref, int16_t *src) {
|
||||
}
|
||||
offset = center;
|
||||
|
||||
for (d = -2; d <= 2; d += 1) {
|
||||
for (d = -2; d <= 2; d += 4) {
|
||||
int this_pos = offset + d;
|
||||
// check limit
|
||||
if (this_pos < 0 || this_pos > 64 || this_pos == 32)
|
||||
if (this_pos < 0 || this_pos > 64)
|
||||
continue;
|
||||
this_sad = vp9_vector_sad(&ref[this_pos], src, 64);
|
||||
if (this_sad < best_sad) {
|
||||
best_sad = this_sad;
|
||||
center = this_pos;
|
||||
}
|
||||
}
|
||||
offset = center;
|
||||
|
||||
for (d = -1; d <= 1; d += 2) {
|
||||
int this_pos = offset + d;
|
||||
// check limit
|
||||
if (this_pos < 0 || this_pos > 64)
|
||||
continue;
|
||||
this_sad = vp9_vector_sad(&ref[this_pos], src, 64);
|
||||
if (this_sad < best_sad) {
|
||||
|
||||
Reference in New Issue
Block a user