| 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 |