| 1 | // Copyright 2012 Google Inc. All Rights Reserved. | 
|---|---|
| 2 | // | 
| 3 | // Use of this source code is governed by a BSD-style license | 
| 4 | // that can be found in the COPYING file in the root of the source | 
| 5 | // tree. An additional intellectual property rights grant can be found | 
| 6 | // in the file PATENTS. All contributing project authors may | 
| 7 | // be found in the AUTHORS file in the root of the source tree. | 
| 8 | // ----------------------------------------------------------------------------- | 
| 9 | // | 
| 10 | // Color Cache for WebP Lossless | 
| 11 | // | 
| 12 | // Author: Jyrki Alakuijala (jyrki@google.com) | 
| 13 | |
| 14 | #include <assert.h> | 
| 15 | #include <stdlib.h> | 
| 16 | #include <string.h> | 
| 17 | #include "src/utils/color_cache_utils.h" | 
| 18 | #include "src/utils/utils.h" | 
| 19 | |
| 20 | //------------------------------------------------------------------------------ | 
| 21 | // VP8LColorCache. | 
| 22 | |
| 23 | int VP8LColorCacheInit(VP8LColorCache* const color_cache, int hash_bits) { | 
| 24 | const int hash_size = 1 << hash_bits; | 
| 25 | assert(color_cache != NULL); | 
| 26 | assert(hash_bits > 0); | 
| 27 | color_cache->colors_ = (uint32_t*)WebPSafeCalloc( | 
| 28 | (uint64_t)hash_size, sizeof(*color_cache->colors_)); | 
| 29 | if (color_cache->colors_ == NULL) return 0; | 
| 30 | color_cache->hash_shift_ = 32 - hash_bits; | 
| 31 | color_cache->hash_bits_ = hash_bits; | 
| 32 | return 1; | 
| 33 | } | 
| 34 | |
| 35 | void VP8LColorCacheClear(VP8LColorCache* const color_cache) { | 
| 36 | if (color_cache != NULL) { | 
| 37 | WebPSafeFree(color_cache->colors_); | 
| 38 | color_cache->colors_ = NULL; | 
| 39 | } | 
| 40 | } | 
| 41 | |
| 42 | void VP8LColorCacheCopy(const VP8LColorCache* const src, | 
| 43 | VP8LColorCache* const dst) { | 
| 44 | assert(src != NULL); | 
| 45 | assert(dst != NULL); | 
| 46 | assert(src->hash_bits_ == dst->hash_bits_); | 
| 47 | memcpy(dst->colors_, src->colors_, | 
| 48 | ((size_t)1u << dst->hash_bits_) * sizeof(*dst->colors_)); | 
| 49 | } | 
| 50 | 
