diff options
Diffstat (limited to 'src/dsp/convolve.inc')
-rw-r--r-- | src/dsp/convolve.inc | 50 |
1 files changed, 50 insertions, 0 deletions
diff --git a/src/dsp/convolve.inc b/src/dsp/convolve.inc new file mode 100644 index 0000000..140648b --- /dev/null +++ b/src/dsp/convolve.inc @@ -0,0 +1,50 @@ +// 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. + +// Constants and utility functions used for convolve implementations. +// This will be included inside an anonymous namespace on files where these are +// necessary. + +int GetNumTapsInFilter(const int filter_index) { + if (filter_index < 2) { + // Despite the names these only use 6 taps. + // kInterpolationFilterEightTap + // kInterpolationFilterEightTapSmooth + return 6; + } + + if (filter_index == 2) { + // kInterpolationFilterEightTapSharp + return 8; + } + + if (filter_index == 3) { + // kInterpolationFilterBilinear + return 2; + } + + assert(filter_index > 3); + // For small sizes (width/height <= 4) the large filters are replaced with 4 + // tap options. + // If the original filters were |kInterpolationFilterEightTap| or + // |kInterpolationFilterEightTapSharp| then it becomes + // |kInterpolationFilterSwitchable|. + // If it was |kInterpolationFilterEightTapSmooth| then it becomes an unnamed 4 + // tap filter. + return 4; +} + +constexpr int kIntermediateStride = kMaxSuperBlockSizeInPixels; +constexpr int kHorizontalOffset = 3; +constexpr int kFilterIndexShift = 6; |