Merge "Modify CostModel to allocate optimal memory."

This commit is contained in:
James Zern 2014-10-23 02:00:39 -07:00 committed by Gerrit Code Review
commit 72395ba977
2 changed files with 8 additions and 6 deletions

View File

@ -453,9 +453,9 @@ Error:
typedef struct { typedef struct {
double alpha_[VALUES_IN_BYTE]; double alpha_[VALUES_IN_BYTE];
double red_[VALUES_IN_BYTE]; double red_[VALUES_IN_BYTE];
double literal_[PIX_OR_COPY_CODES_MAX];
double blue_[VALUES_IN_BYTE]; double blue_[VALUES_IN_BYTE];
double distance_[NUM_DISTANCE_CODES]; double distance_[NUM_DISTANCE_CODES];
double* literal_;
} CostModel; } CostModel;
static int BackwardReferencesTraceBackwards( static int BackwardReferencesTraceBackwards(
@ -547,7 +547,12 @@ static int BackwardReferencesHashChainDistanceOnly(
const int use_color_cache = (cache_bits > 0); const int use_color_cache = (cache_bits > 0);
float* const cost = float* const cost =
(float*)WebPSafeMalloc(pix_count, sizeof(*cost)); (float*)WebPSafeMalloc(pix_count, sizeof(*cost));
CostModel* cost_model = (CostModel*)WebPSafeMalloc(1ULL, sizeof(*cost_model)); const size_t literal_array_size = sizeof(double) *
(NUM_LITERAL_CODES + NUM_LENGTH_CODES +
((cache_bits > 0) ? (1 << cache_bits) : 0));
const size_t cost_model_size = sizeof(CostModel) + literal_array_size;
CostModel* const cost_model =
(CostModel*)WebPSafeMalloc(1ULL, cost_model_size);
VP8LColorCache hashers; VP8LColorCache hashers;
const int min_distance_code = 2; // TODO(vikasa): tune as function of quality const int min_distance_code = 2; // TODO(vikasa): tune as function of quality
int window_size = WINDOW_SIZE; int window_size = WINDOW_SIZE;
@ -556,6 +561,7 @@ static int BackwardReferencesHashChainDistanceOnly(
if (cost == NULL || cost_model == NULL) goto Error; if (cost == NULL || cost_model == NULL) goto Error;
cost_model->literal_ = (double*)(cost_model + 1);
if (use_color_cache) { if (use_color_cache) {
cc_init = VP8LColorCacheInit(&hashers, cache_bits); cc_init = VP8LColorCacheInit(&hashers, cache_bits);
if (!cc_init) goto Error; if (!cc_init) goto Error;

View File

@ -26,10 +26,6 @@ extern "C" {
// Having 9 instead of 11 only removes about 0.25 % of compression density. // Having 9 instead of 11 only removes about 0.25 % of compression density.
#define MAX_COLOR_CACHE_BITS 9 #define MAX_COLOR_CACHE_BITS 9
// Max ever number of codes we'll use:
#define PIX_OR_COPY_CODES_MAX \
(NUM_LITERAL_CODES + NUM_LENGTH_CODES + (1 << MAX_COLOR_CACHE_BITS))
// ----------------------------------------------------------------------------- // -----------------------------------------------------------------------------
// PixOrCopy // PixOrCopy