1*09537850SAkhilesh Sanikop /* 2*09537850SAkhilesh Sanikop * Copyright 2019 The libgav1 Authors 3*09537850SAkhilesh Sanikop * 4*09537850SAkhilesh Sanikop * Licensed under the Apache License, Version 2.0 (the "License"); 5*09537850SAkhilesh Sanikop * you may not use this file except in compliance with the License. 6*09537850SAkhilesh Sanikop * You may obtain a copy of the License at 7*09537850SAkhilesh Sanikop * 8*09537850SAkhilesh Sanikop * http://www.apache.org/licenses/LICENSE-2.0 9*09537850SAkhilesh Sanikop * 10*09537850SAkhilesh Sanikop * Unless required by applicable law or agreed to in writing, software 11*09537850SAkhilesh Sanikop * distributed under the License is distributed on an "AS IS" BASIS, 12*09537850SAkhilesh Sanikop * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13*09537850SAkhilesh Sanikop * See the License for the specific language governing permissions and 14*09537850SAkhilesh Sanikop * limitations under the License. 15*09537850SAkhilesh Sanikop */ 16*09537850SAkhilesh Sanikop 17*09537850SAkhilesh Sanikop #ifndef LIBGAV1_SRC_DSP_LOOP_RESTORATION_H_ 18*09537850SAkhilesh Sanikop #define LIBGAV1_SRC_DSP_LOOP_RESTORATION_H_ 19*09537850SAkhilesh Sanikop 20*09537850SAkhilesh Sanikop // Pull in LIBGAV1_DspXXX defines representing the implementation status 21*09537850SAkhilesh Sanikop // of each function. The resulting value of each can be used by each module to 22*09537850SAkhilesh Sanikop // determine whether an implementation is needed at compile time. 23*09537850SAkhilesh Sanikop // IWYU pragma: begin_exports 24*09537850SAkhilesh Sanikop 25*09537850SAkhilesh Sanikop // ARM: 26*09537850SAkhilesh Sanikop #include "src/dsp/arm/loop_restoration_neon.h" 27*09537850SAkhilesh Sanikop 28*09537850SAkhilesh Sanikop // x86: 29*09537850SAkhilesh Sanikop // Note includes should be sorted in logical order avx2/avx/sse4, etc. 30*09537850SAkhilesh Sanikop // The order of includes is important as each tests for a superior version 31*09537850SAkhilesh Sanikop // before setting the base. 32*09537850SAkhilesh Sanikop // clang-format off 33*09537850SAkhilesh Sanikop #include "src/dsp/x86/loop_restoration_avx2.h" 34*09537850SAkhilesh Sanikop #include "src/dsp/x86/loop_restoration_sse4.h" 35*09537850SAkhilesh Sanikop // clang-format on 36*09537850SAkhilesh Sanikop 37*09537850SAkhilesh Sanikop // IWYU pragma: end_exports 38*09537850SAkhilesh Sanikop 39*09537850SAkhilesh Sanikop namespace libgav1 { 40*09537850SAkhilesh Sanikop namespace dsp { 41*09537850SAkhilesh Sanikop 42*09537850SAkhilesh Sanikop extern const uint8_t kSgrMaLookup[256]; 43*09537850SAkhilesh Sanikop 44*09537850SAkhilesh Sanikop // Initializes Dsp::loop_restorations. This function is not thread-safe. 45*09537850SAkhilesh Sanikop void LoopRestorationInit_C(); 46*09537850SAkhilesh Sanikop 47*09537850SAkhilesh Sanikop template <typename T> Circulate3PointersBy1(T * p[3])48*09537850SAkhilesh Sanikopvoid Circulate3PointersBy1(T* p[3]) { 49*09537850SAkhilesh Sanikop T* const p0 = p[0]; 50*09537850SAkhilesh Sanikop p[0] = p[1]; 51*09537850SAkhilesh Sanikop p[1] = p[2]; 52*09537850SAkhilesh Sanikop p[2] = p0; 53*09537850SAkhilesh Sanikop } 54*09537850SAkhilesh Sanikop 55*09537850SAkhilesh Sanikop template <typename T> Circulate4PointersBy2(T * p[4])56*09537850SAkhilesh Sanikopvoid Circulate4PointersBy2(T* p[4]) { 57*09537850SAkhilesh Sanikop std::swap(p[0], p[2]); 58*09537850SAkhilesh Sanikop std::swap(p[1], p[3]); 59*09537850SAkhilesh Sanikop } 60*09537850SAkhilesh Sanikop 61*09537850SAkhilesh Sanikop template <typename T> Circulate5PointersBy2(T * p[5])62*09537850SAkhilesh Sanikopvoid Circulate5PointersBy2(T* p[5]) { 63*09537850SAkhilesh Sanikop T* const p0 = p[0]; 64*09537850SAkhilesh Sanikop T* const p1 = p[1]; 65*09537850SAkhilesh Sanikop p[0] = p[2]; 66*09537850SAkhilesh Sanikop p[1] = p[3]; 67*09537850SAkhilesh Sanikop p[2] = p[4]; 68*09537850SAkhilesh Sanikop p[3] = p0; 69*09537850SAkhilesh Sanikop p[4] = p1; 70*09537850SAkhilesh Sanikop } 71*09537850SAkhilesh Sanikop 72*09537850SAkhilesh Sanikop } // namespace dsp 73*09537850SAkhilesh Sanikop } // namespace libgav1 74*09537850SAkhilesh Sanikop 75*09537850SAkhilesh Sanikop #endif // LIBGAV1_SRC_DSP_LOOP_RESTORATION_H_ 76