xref: /aosp_15_r20/external/webp/src/utils/random_utils.c (revision b2055c353e87c8814eb2b6b1b11112a1562253bd)
1*b2055c35SXin Li // Copyright 2013 Google Inc. All Rights Reserved.
2*b2055c35SXin Li //
3*b2055c35SXin Li // Use of this source code is governed by a BSD-style license
4*b2055c35SXin Li // that can be found in the COPYING file in the root of the source
5*b2055c35SXin Li // tree. An additional intellectual property rights grant can be found
6*b2055c35SXin Li // in the file PATENTS. All contributing project authors may
7*b2055c35SXin Li // be found in the AUTHORS file in the root of the source tree.
8*b2055c35SXin Li // -----------------------------------------------------------------------------
9*b2055c35SXin Li //
10*b2055c35SXin Li // Pseudo-random utilities
11*b2055c35SXin Li //
12*b2055c35SXin Li // Author: Skal ([email protected])
13*b2055c35SXin Li 
14*b2055c35SXin Li #include <string.h>
15*b2055c35SXin Li #include "src/utils/random_utils.h"
16*b2055c35SXin Li 
17*b2055c35SXin Li //------------------------------------------------------------------------------
18*b2055c35SXin Li 
19*b2055c35SXin Li // 31b-range values
20*b2055c35SXin Li static const uint32_t kRandomTable[VP8_RANDOM_TABLE_SIZE] = {
21*b2055c35SXin Li   0x0de15230, 0x03b31886, 0x775faccb, 0x1c88626a, 0x68385c55, 0x14b3b828,
22*b2055c35SXin Li   0x4a85fef8, 0x49ddb84b, 0x64fcf397, 0x5c550289, 0x4a290000, 0x0d7ec1da,
23*b2055c35SXin Li   0x5940b7ab, 0x5492577d, 0x4e19ca72, 0x38d38c69, 0x0c01ee65, 0x32a1755f,
24*b2055c35SXin Li   0x5437f652, 0x5abb2c32, 0x0faa57b1, 0x73f533e7, 0x685feeda, 0x7563cce2,
25*b2055c35SXin Li   0x6e990e83, 0x4730a7ed, 0x4fc0d9c6, 0x496b153c, 0x4f1403fa, 0x541afb0c,
26*b2055c35SXin Li   0x73990b32, 0x26d7cb1c, 0x6fcc3706, 0x2cbb77d8, 0x75762f2a, 0x6425ccdd,
27*b2055c35SXin Li   0x24b35461, 0x0a7d8715, 0x220414a8, 0x141ebf67, 0x56b41583, 0x73e502e3,
28*b2055c35SXin Li   0x44cab16f, 0x28264d42, 0x73baaefb, 0x0a50ebed, 0x1d6ab6fb, 0x0d3ad40b,
29*b2055c35SXin Li   0x35db3b68, 0x2b081e83, 0x77ce6b95, 0x5181e5f0, 0x78853bbc, 0x009f9494,
30*b2055c35SXin Li   0x27e5ed3c
31*b2055c35SXin Li };
32*b2055c35SXin Li 
VP8InitRandom(VP8Random * const rg,float dithering)33*b2055c35SXin Li void VP8InitRandom(VP8Random* const rg, float dithering) {
34*b2055c35SXin Li   memcpy(rg->tab_, kRandomTable, sizeof(rg->tab_));
35*b2055c35SXin Li   rg->index1_ = 0;
36*b2055c35SXin Li   rg->index2_ = 31;
37*b2055c35SXin Li   rg->amp_ = (dithering < 0.0) ? 0
38*b2055c35SXin Li            : (dithering > 1.0) ? (1 << VP8_RANDOM_DITHER_FIX)
39*b2055c35SXin Li            : (uint32_t)((1 << VP8_RANDOM_DITHER_FIX) * dithering);
40*b2055c35SXin Li }
41*b2055c35SXin Li 
42*b2055c35SXin Li //------------------------------------------------------------------------------
43*b2055c35SXin Li 
44