Run TraceBackwards for higher qualities.

Also reduce the iteration count in function VP8LHashChain_FindCopy.

Change-Id: I73e3811e142e81314515587fd655ab3bfa74d099
This commit is contained in:
Vikas Arora
2012-04-24 09:55:19 +00:00
committed by James Zern
parent 412222c88c
commit c6ac4dfbb4
2 changed files with 33 additions and 29 deletions

View File

@ -217,35 +217,40 @@ static int GetBackwardReferences(int width, int height,
VP8LHistogramEstimateBits(histo_lz77));
// Choose appropriate backward reference.
if (quality >= 50 && lz77_is_useful) {
const int recursion_level = (num_pix < 320 * 200) ? 1 : 0;
int backward_refs_trace_size;
PixOrCopy* backward_refs_trace;
if (lz77_is_useful) {
// TraceBackwards is costly. Run it for higher qualities.
const int try_lz77_trace_backwards = (quality >= 75);
free(backward_refs_rle);
free(backward_refs_lz77);
backward_refs_trace =
(PixOrCopy*)malloc(num_pix * sizeof(*backward_refs_trace));
if (backward_refs_trace == NULL ||
!VP8LBackwardReferencesTraceBackwards(width, height,
recursion_level, use_color_cache,
argb, cache_bits,
backward_refs_trace,
&backward_refs_trace_size)) {
free(backward_refs_trace);
goto End;
}
*backward_refs = backward_refs_trace;
*backward_refs_size = backward_refs_trace_size;
} else {
if (lz77_is_useful) {
if (try_lz77_trace_backwards) {
const int recursion_level = (num_pix < 320 * 200) ? 1 : 0;
int backward_refs_trace_size;
PixOrCopy* backward_refs_trace;
backward_refs_trace =
(PixOrCopy*)malloc(num_pix * sizeof(*backward_refs_trace));
if (backward_refs_trace == NULL) {
free(backward_refs_lz77);
goto End;
}
if (VP8LBackwardReferencesTraceBackwards(width, height, recursion_level,
use_color_cache, argb,
cache_bits, backward_refs_trace,
&backward_refs_trace_size)) {
free(backward_refs_lz77);
*backward_refs = backward_refs_trace;
*backward_refs_size = backward_refs_trace_size;
} else {
free(backward_refs_trace);
*backward_refs = backward_refs_lz77;
*backward_refs_size = backward_refs_lz77_size;
}
} else {
*backward_refs = backward_refs_lz77;
*backward_refs_size = backward_refs_lz77_size;
free(backward_refs_rle);
} else {
*backward_refs = backward_refs_rle;
*backward_refs_size = backward_refs_rle_size;
free(backward_refs_lz77);
}
} else {
free(backward_refs_lz77);
*backward_refs = backward_refs_rle;
*backward_refs_size = backward_refs_rle_size;
}
if (use_2d_locality) {