/* * Copyright 2020 The libgav1 Authors * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #ifndef LIBGAV1_SRC_DSP_FILM_GRAIN_COMMON_H_ #define LIBGAV1_SRC_DSP_FILM_GRAIN_COMMON_H_ #include #include #include #include #include "src/dsp/common.h" #include "src/utils/array_2d.h" #include "src/utils/constants.h" #include "src/utils/cpu.h" namespace libgav1 { template int GetGrainMax() { return (1 << (bitdepth - 1)) - 1; } template int GetGrainMin() { return -(1 << (bitdepth - 1)); } inline int GetFilmGrainRandomNumber(int bits, uint16_t* seed) { uint16_t s = *seed; uint16_t bit = (s ^ (s >> 1) ^ (s >> 3) ^ (s >> 12)) & 1; s = (s >> 1) | (bit << 15); *seed = s; return s >> (16 - bits); } enum { kAutoRegressionBorder = 3, // The width of the luma noise array. kLumaWidth = 82, // The height of the luma noise array. kLumaHeight = 73, // The two possible widths of the chroma noise array. kMinChromaWidth = 44, kMaxChromaWidth = 82, // The two possible heights of the chroma noise array. kMinChromaHeight = 38, kMaxChromaHeight = 73, // The scaling lookup table maps bytes to bytes, so only uses 256 elements, // plus one for overflow in 10bit lookups. kScalingLookupTableSize = 257, // Padding is added to the scaling lookup table to permit overwrites by // InitializeScalingLookupTable_NEON. kScalingLookupTablePadding = 6, // Padding is added to each row of the noise image to permit overreads by // BlendNoiseWithImageLuma_NEON and overwrites by WriteOverlapLine8bpp_NEON. kNoiseImagePadding = 7, // Padding is added to the end of the |noise_stripes_| buffer to permit // overreads by WriteOverlapLine8bpp_NEON. kNoiseStripePadding = 7, }; // anonymous enum } // namespace libgav1 #endif // LIBGAV1_SRC_DSP_FILM_GRAIN_COMMON_H_