/* * Copyright 2019 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_POST_FILTER_H_ #define LIBGAV1_SRC_POST_FILTER_H_ #include <algorithm> #include <array> #include <atomic> #include <cstddef> #include <cstdint> #include <cstring> #include <type_traits> #include "src/dsp/common.h" #include "src/dsp/dsp.h" #include "src/frame_scratch_buffer.h" #include "src/loop_restoration_info.h" #include "src/obu_parser.h" #include "src/utils/array_2d.h" #include "src/utils/block_parameters_holder.h" #include "src/utils/common.h" #include "src/utils/constants.h" #include "src/utils/memory.h" #include "src/utils/threadpool.h" #include "src/yuv_buffer.h" namespace libgav1 { // This class applies in-loop filtering for each frame after it is // reconstructed. The in-loop filtering contains all post processing filtering // for the reconstructed frame, including deblock filter, CDEF, superres, // and loop restoration. // Historically, for example in libaom, loop filter refers to deblock filter. // To avoid name conflicts, we call this class PostFilter (post processing). // In-loop post filtering order is: // deblock --> CDEF --> super resolution--> loop restoration. // When CDEF and super resolution is not used, we can combine deblock // and restoration together to only filter frame buffer once. class PostFilter { … }; extern template void PostFilter::ExtendFrame<uint8_t>(uint8_t* frame_start, int width, int height, ptrdiff_t stride, int left, int right, int top, int bottom); #if LIBGAV1_MAX_BITDEPTH >= 10 extern template void PostFilter::ExtendFrame<uint16_t>(uint16_t* frame_start, int width, int height, ptrdiff_t stride, int left, int right, int top, int bottom); #endif } // namespace libgav1 #endif // LIBGAV1_SRC_POST_FILTER_H_