// Copyright 2014 Google Inc. All Rights Reserved. // // Use of this source code is governed by a BSD-style license // that can be found in the COPYING file in the root of the source // tree. An additional intellectual property rights grant can be found // in the file PATENTS. All contributing project authors may // be found in the AUTHORS file in the root of the source tree. // ----------------------------------------------------------------------------- // // Clipping tables for filtering // // Author: Skal ([email protected]) #include "src/dsp/dsp.h" // define to 0 to have run-time table initialization #if !defined(USE_STATIC_TABLES) #define USE_STATIC_TABLES … #endif #if (USE_STATIC_TABLES == 1) static const uint8_t abs0[255 + 255 + 1] = …; static const uint8_t sclip1[1020 + 1020 + 1] = …; static const uint8_t sclip2[112 + 112 + 1] = …; static const uint8_t clip1[255 + 511 + 1] = …; #else // uninitialized tables static uint8_t abs0[255 + 255 + 1]; static int8_t sclip1[1020 + 1020 + 1]; static int8_t sclip2[112 + 112 + 1]; static uint8_t clip1[255 + 511 + 1]; // We declare this variable 'volatile' to prevent instruction reordering // and make sure it's set to true _last_ (so as to be thread-safe) static volatile int tables_ok = 0; #endif // USE_STATIC_TABLES const int8_t* const VP8ksclip1 = …; const int8_t* const VP8ksclip2 = …; const uint8_t* const VP8kclip1 = …; const uint8_t* const VP8kabs0 = …; WEBP_TSAN_IGNORE_FUNCTION void VP8InitClipTables(void) { … }