/*
* Copyright (c) 2016, Alliance for Open Media. All rights reserved.
*
* This source code is subject to the terms of the BSD 2 Clause License and
* the Alliance for Open Media Patent License 1.0. If the BSD 2 Clause License
* was not distributed with this source code in the LICENSE file, you can
* obtain it at www.aomedia.org/license/software. If the Alliance for Open
* Media Patent License 1.0 was not distributed with this source code in the
* PATENTS file, you can obtain it at www.aomedia.org/license/patent.
*/
#include <stdlib.h>
#include "av1/common/av1_inv_txfm1d.h"
#include "av1/common/av1_txfm.h"
void av1_idct4(const int32_t *input, int32_t *output, int8_t cos_bit,
const int8_t *stage_range) {
assert(output != input);
const int32_t size = 4 ;
const int32_t *cospi = cospi_arr(cos_bit);
int32_t stage = 0 ;
int32_t *bf0, *bf1;
int32_t step[4 ];
// stage 0;
// stage 1;
stage++;
bf1 = output;
bf1[0 ] = input[0 ];
bf1[1 ] = input[2 ];
bf1[2 ] = input[1 ];
bf1[3 ] = input[3 ];
av1_range_check_buf(stage, input, bf1, size, stage_range[stage]);
// stage 2
stage++;
bf0 = output;
bf1 = step;
bf1[0 ] = half_btf(cospi[32 ], bf0[0 ], cospi[32 ], bf0[1 ], cos_bit);
bf1[1 ] = half_btf(cospi[32 ], bf0[0 ], -cospi[32 ], bf0[1 ], cos_bit);
bf1[2 ] = half_btf(cospi[48 ], bf0[2 ], -cospi[16 ], bf0[3 ], cos_bit);
bf1[3 ] = half_btf(cospi[16 ], bf0[2 ], cospi[48 ], bf0[3 ], cos_bit);
av1_range_check_buf(stage, input, bf1, size, stage_range[stage]);
// stage 3
stage++;
bf0 = step;
bf1 = output;
bf1[0 ] = clamp_value(bf0[0 ] + bf0[3 ], stage_range[stage]);
bf1[1 ] = clamp_value(bf0[1 ] + bf0[2 ], stage_range[stage]);
bf1[2 ] = clamp_value(bf0[1 ] - bf0[2 ], stage_range[stage]);
bf1[3 ] = clamp_value(bf0[0 ] - bf0[3 ], stage_range[stage]);
}
void av1_idct8(const int32_t *input, int32_t *output, int8_t cos_bit,
const int8_t *stage_range) {
assert(output != input);
const int32_t size = 8 ;
const int32_t *cospi = cospi_arr(cos_bit);
int32_t stage = 0 ;
int32_t *bf0, *bf1;
int32_t step[8 ];
// stage 0;
// stage 1;
stage++;
bf1 = output;
bf1[0 ] = input[0 ];
bf1[1 ] = input[4 ];
bf1[2 ] = input[2 ];
bf1[3 ] = input[6 ];
bf1[4 ] = input[1 ];
bf1[5 ] = input[5 ];
bf1[6 ] = input[3 ];
bf1[7 ] = input[7 ];
av1_range_check_buf(stage, input, bf1, size, stage_range[stage]);
// stage 2
stage++;
bf0 = output;
bf1 = step;
bf1[0 ] = bf0[0 ];
bf1[1 ] = bf0[1 ];
bf1[2 ] = bf0[2 ];
bf1[3 ] = bf0[3 ];
bf1[4 ] = half_btf(cospi[56 ], bf0[4 ], -cospi[8 ], bf0[7 ], cos_bit);
bf1[5 ] = half_btf(cospi[24 ], bf0[5 ], -cospi[40 ], bf0[6 ], cos_bit);
bf1[6 ] = half_btf(cospi[40 ], bf0[5 ], cospi[24 ], bf0[6 ], cos_bit);
bf1[7 ] = half_btf(cospi[8 ], bf0[4 ], cospi[56 ], bf0[7 ], cos_bit);
av1_range_check_buf(stage, input, bf1, size, stage_range[stage]);
// stage 3
stage++;
bf0 = step;
bf1 = output;
bf1[0 ] = half_btf(cospi[32 ], bf0[0 ], cospi[32 ], bf0[1 ], cos_bit);
bf1[1 ] = half_btf(cospi[32 ], bf0[0 ], -cospi[32 ], bf0[1 ], cos_bit);
bf1[2 ] = half_btf(cospi[48 ], bf0[2 ], -cospi[16 ], bf0[3 ], cos_bit);
bf1[3 ] = half_btf(cospi[16 ], bf0[2 ], cospi[48 ], bf0[3 ], cos_bit);
bf1[4 ] = clamp_value(bf0[4 ] + bf0[5 ], stage_range[stage]);
bf1[5 ] = clamp_value(bf0[4 ] - bf0[5 ], stage_range[stage]);
bf1[6 ] = clamp_value(-bf0[6 ] + bf0[7 ], stage_range[stage]);
bf1[7 ] = clamp_value(bf0[6 ] + bf0[7 ], stage_range[stage]);
av1_range_check_buf(stage, input, bf1, size, stage_range[stage]);
// stage 4
stage++;
bf0 = output;
bf1 = step;
bf1[0 ] = clamp_value(bf0[0 ] + bf0[3 ], stage_range[stage]);
bf1[1 ] = clamp_value(bf0[1 ] + bf0[2 ], stage_range[stage]);
bf1[2 ] = clamp_value(bf0[1 ] - bf0[2 ], stage_range[stage]);
bf1[3 ] = clamp_value(bf0[0 ] - bf0[3 ], stage_range[stage]);
bf1[4 ] = bf0[4 ];
bf1[5 ] = half_btf(-cospi[32 ], bf0[5 ], cospi[32 ], bf0[6 ], cos_bit);
bf1[6 ] = half_btf(cospi[32 ], bf0[5 ], cospi[32 ], bf0[6 ], cos_bit);
bf1[7 ] = bf0[7 ];
av1_range_check_buf(stage, input, bf1, size, stage_range[stage]);
// stage 5
stage++;
bf0 = step;
bf1 = output;
bf1[0 ] = clamp_value(bf0[0 ] + bf0[7 ], stage_range[stage]);
bf1[1 ] = clamp_value(bf0[1 ] + bf0[6 ], stage_range[stage]);
bf1[2 ] = clamp_value(bf0[2 ] + bf0[5 ], stage_range[stage]);
bf1[3 ] = clamp_value(bf0[3 ] + bf0[4 ], stage_range[stage]);
bf1[4 ] = clamp_value(bf0[3 ] - bf0[4 ], stage_range[stage]);
bf1[5 ] = clamp_value(bf0[2 ] - bf0[5 ], stage_range[stage]);
bf1[6 ] = clamp_value(bf0[1 ] - bf0[6 ], stage_range[stage]);
bf1[7 ] = clamp_value(bf0[0 ] - bf0[7 ], stage_range[stage]);
}
void av1_idct16(const int32_t *input, int32_t *output, int8_t cos_bit,
const int8_t *stage_range) {
assert(output != input);
const int32_t size = 16 ;
const int32_t *cospi = cospi_arr(cos_bit);
int32_t stage = 0 ;
int32_t *bf0, *bf1;
int32_t step[16 ];
// stage 0;
// stage 1;
stage++;
bf1 = output;
bf1[0 ] = input[0 ];
bf1[1 ] = input[8 ];
bf1[2 ] = input[4 ];
bf1[3 ] = input[12 ];
bf1[4 ] = input[2 ];
bf1[5 ] = input[10 ];
bf1[6 ] = input[6 ];
bf1[7 ] = input[14 ];
bf1[8 ] = input[1 ];
bf1[9 ] = input[9 ];
bf1[10 ] = input[5 ];
bf1[11 ] = input[13 ];
bf1[12 ] = input[3 ];
bf1[13 ] = input[11 ];
bf1[14 ] = input[7 ];
bf1[15 ] = input[15 ];
av1_range_check_buf(stage, input, bf1, size, stage_range[stage]);
// stage 2
stage++;
bf0 = output;
bf1 = step;
bf1[0 ] = bf0[0 ];
bf1[1 ] = bf0[1 ];
bf1[2 ] = bf0[2 ];
bf1[3 ] = bf0[3 ];
bf1[4 ] = bf0[4 ];
bf1[5 ] = bf0[5 ];
bf1[6 ] = bf0[6 ];
bf1[7 ] = bf0[7 ];
bf1[8 ] = half_btf(cospi[60 ], bf0[8 ], -cospi[4 ], bf0[15 ], cos_bit);
bf1[9 ] = half_btf(cospi[28 ], bf0[9 ], -cospi[36 ], bf0[14 ], cos_bit);
bf1[10 ] = half_btf(cospi[44 ], bf0[10 ], -cospi[20 ], bf0[13 ], cos_bit);
bf1[11 ] = half_btf(cospi[12 ], bf0[11 ], -cospi[52 ], bf0[12 ], cos_bit);
bf1[12 ] = half_btf(cospi[52 ], bf0[11 ], cospi[12 ], bf0[12 ], cos_bit);
bf1[13 ] = half_btf(cospi[20 ], bf0[10 ], cospi[44 ], bf0[13 ], cos_bit);
bf1[14 ] = half_btf(cospi[36 ], bf0[9 ], cospi[28 ], bf0[14 ], cos_bit);
bf1[15 ] = half_btf(cospi[4 ], bf0[8 ], cospi[60 ], bf0[15 ], cos_bit);
av1_range_check_buf(stage, input, bf1, size, stage_range[stage]);
// stage 3
stage++;
bf0 = step;
bf1 = output;
bf1[0 ] = bf0[0 ];
bf1[1 ] = bf0[1 ];
bf1[2 ] = bf0[2 ];
bf1[3 ] = bf0[3 ];
bf1[4 ] = half_btf(cospi[56 ], bf0[4 ], -cospi[8 ], bf0[7 ], cos_bit);
bf1[5 ] = half_btf(cospi[24 ], bf0[5 ], -cospi[40 ], bf0[6 ], cos_bit);
bf1[6 ] = half_btf(cospi[40 ], bf0[5 ], cospi[24 ], bf0[6 ], cos_bit);
bf1[7 ] = half_btf(cospi[8 ], bf0[4 ], cospi[56 ], bf0[7 ], cos_bit);
bf1[8 ] = clamp_value(bf0[8 ] + bf0[9 ], stage_range[stage]);
bf1[9 ] = clamp_value(bf0[8 ] - bf0[9 ], stage_range[stage]);
bf1[10 ] = clamp_value(-bf0[10 ] + bf0[11 ], stage_range[stage]);
bf1[11 ] = clamp_value(bf0[10 ] + bf0[11 ], stage_range[stage]);
bf1[12 ] = clamp_value(bf0[12 ] + bf0[13 ], stage_range[stage]);
bf1[13 ] = clamp_value(bf0[12 ] - bf0[13 ], stage_range[stage]);
bf1[14 ] = clamp_value(-bf0[14 ] + bf0[15 ], stage_range[stage]);
bf1[15 ] = clamp_value(bf0[14 ] + bf0[15 ], stage_range[stage]);
av1_range_check_buf(stage, input, bf1, size, stage_range[stage]);
// stage 4
stage++;
bf0 = output;
bf1 = step;
bf1[0 ] = half_btf(cospi[32 ], bf0[0 ], cospi[32 ], bf0[1 ], cos_bit);
bf1[1 ] = half_btf(cospi[32 ], bf0[0 ], -cospi[32 ], bf0[1 ], cos_bit);
bf1[2 ] = half_btf(cospi[48 ], bf0[2 ], -cospi[16 ], bf0[3 ], cos_bit);
bf1[3 ] = half_btf(cospi[16 ], bf0[2 ], cospi[48 ], bf0[3 ], cos_bit);
bf1[4 ] = clamp_value(bf0[4 ] + bf0[5 ], stage_range[stage]);
bf1[5 ] = clamp_value(bf0[4 ] - bf0[5 ], stage_range[stage]);
bf1[6 ] = clamp_value(-bf0[6 ] + bf0[7 ], stage_range[stage]);
bf1[7 ] = clamp_value(bf0[6 ] + bf0[7 ], stage_range[stage]);
bf1[8 ] = bf0[8 ];
bf1[9 ] = half_btf(-cospi[16 ], bf0[9 ], cospi[48 ], bf0[14 ], cos_bit);
bf1[10 ] = half_btf(-cospi[48 ], bf0[10 ], -cospi[16 ], bf0[13 ], cos_bit);
bf1[11 ] = bf0[11 ];
bf1[12 ] = bf0[12 ];
bf1[13 ] = half_btf(-cospi[16 ], bf0[10 ], cospi[48 ], bf0[13 ], cos_bit);
bf1[14 ] = half_btf(cospi[48 ], bf0[9 ], cospi[16 ], bf0[14 ], cos_bit);
bf1[15 ] = bf0[15 ];
av1_range_check_buf(stage, input, bf1, size, stage_range[stage]);
// stage 5
stage++;
bf0 = step;
bf1 = output;
bf1[0 ] = clamp_value(bf0[0 ] + bf0[3 ], stage_range[stage]);
bf1[1 ] = clamp_value(bf0[1 ] + bf0[2 ], stage_range[stage]);
bf1[2 ] = clamp_value(bf0[1 ] - bf0[2 ], stage_range[stage]);
bf1[3 ] = clamp_value(bf0[0 ] - bf0[3 ], stage_range[stage]);
bf1[4 ] = bf0[4 ];
bf1[5 ] = half_btf(-cospi[32 ], bf0[5 ], cospi[32 ], bf0[6 ], cos_bit);
bf1[6 ] = half_btf(cospi[32 ], bf0[5 ], cospi[32 ], bf0[6 ], cos_bit);
bf1[7 ] = bf0[7 ];
bf1[8 ] = clamp_value(bf0[8 ] + bf0[11 ], stage_range[stage]);
bf1[9 ] = clamp_value(bf0[9 ] + bf0[10 ], stage_range[stage]);
bf1[10 ] = clamp_value(bf0[9 ] - bf0[10 ], stage_range[stage]);
bf1[11 ] = clamp_value(bf0[8 ] - bf0[11 ], stage_range[stage]);
bf1[12 ] = clamp_value(-bf0[12 ] + bf0[15 ], stage_range[stage]);
bf1[13 ] = clamp_value(-bf0[13 ] + bf0[14 ], stage_range[stage]);
bf1[14 ] = clamp_value(bf0[13 ] + bf0[14 ], stage_range[stage]);
bf1[15 ] = clamp_value(bf0[12 ] + bf0[15 ], stage_range[stage]);
av1_range_check_buf(stage, input, bf1, size, stage_range[stage]);
// stage 6
stage++;
bf0 = output;
bf1 = step;
bf1[0 ] = clamp_value(bf0[0 ] + bf0[7 ], stage_range[stage]);
bf1[1 ] = clamp_value(bf0[1 ] + bf0[6 ], stage_range[stage]);
bf1[2 ] = clamp_value(bf0[2 ] + bf0[5 ], stage_range[stage]);
bf1[3 ] = clamp_value(bf0[3 ] + bf0[4 ], stage_range[stage]);
bf1[4 ] = clamp_value(bf0[3 ] - bf0[4 ], stage_range[stage]);
bf1[5 ] = clamp_value(bf0[2 ] - bf0[5 ], stage_range[stage]);
bf1[6 ] = clamp_value(bf0[1 ] - bf0[6 ], stage_range[stage]);
bf1[7 ] = clamp_value(bf0[0 ] - bf0[7 ], stage_range[stage]);
bf1[8 ] = bf0[8 ];
bf1[9 ] = bf0[9 ];
bf1[10 ] = half_btf(-cospi[32 ], bf0[10 ], cospi[32 ], bf0[13 ], cos_bit);
bf1[11 ] = half_btf(-cospi[32 ], bf0[11 ], cospi[32 ], bf0[12 ], cos_bit);
bf1[12 ] = half_btf(cospi[32 ], bf0[11 ], cospi[32 ], bf0[12 ], cos_bit);
bf1[13 ] = half_btf(cospi[32 ], bf0[10 ], cospi[32 ], bf0[13 ], cos_bit);
bf1[14 ] = bf0[14 ];
bf1[15 ] = bf0[15 ];
av1_range_check_buf(stage, input, bf1, size, stage_range[stage]);
// stage 7
stage++;
bf0 = step;
bf1 = output;
bf1[0 ] = clamp_value(bf0[0 ] + bf0[15 ], stage_range[stage]);
bf1[1 ] = clamp_value(bf0[1 ] + bf0[14 ], stage_range[stage]);
bf1[2 ] = clamp_value(bf0[2 ] + bf0[13 ], stage_range[stage]);
bf1[3 ] = clamp_value(bf0[3 ] + bf0[12 ], stage_range[stage]);
bf1[4 ] = clamp_value(bf0[4 ] + bf0[11 ], stage_range[stage]);
bf1[5 ] = clamp_value(bf0[5 ] + bf0[10 ], stage_range[stage]);
bf1[6 ] = clamp_value(bf0[6 ] + bf0[9 ], stage_range[stage]);
bf1[7 ] = clamp_value(bf0[7 ] + bf0[8 ], stage_range[stage]);
bf1[8 ] = clamp_value(bf0[7 ] - bf0[8 ], stage_range[stage]);
bf1[9 ] = clamp_value(bf0[6 ] - bf0[9 ], stage_range[stage]);
bf1[10 ] = clamp_value(bf0[5 ] - bf0[10 ], stage_range[stage]);
bf1[11 ] = clamp_value(bf0[4 ] - bf0[11 ], stage_range[stage]);
bf1[12 ] = clamp_value(bf0[3 ] - bf0[12 ], stage_range[stage]);
bf1[13 ] = clamp_value(bf0[2 ] - bf0[13 ], stage_range[stage]);
bf1[14 ] = clamp_value(bf0[1 ] - bf0[14 ], stage_range[stage]);
bf1[15 ] = clamp_value(bf0[0 ] - bf0[15 ], stage_range[stage]);
}
void av1_idct32(const int32_t *input, int32_t *output, int8_t cos_bit,
const int8_t *stage_range) {
assert(output != input);
const int32_t size = 32 ;
const int32_t *cospi = cospi_arr(cos_bit);
int32_t stage = 0 ;
int32_t *bf0, *bf1;
int32_t step[32 ];
// stage 0;
// stage 1;
stage++;
bf1 = output;
bf1[0 ] = input[0 ];
bf1[1 ] = input[16 ];
bf1[2 ] = input[8 ];
bf1[3 ] = input[24 ];
bf1[4 ] = input[4 ];
bf1[5 ] = input[20 ];
bf1[6 ] = input[12 ];
bf1[7 ] = input[28 ];
bf1[8 ] = input[2 ];
bf1[9 ] = input[18 ];
bf1[10 ] = input[10 ];
bf1[11 ] = input[26 ];
bf1[12 ] = input[6 ];
bf1[13 ] = input[22 ];
bf1[14 ] = input[14 ];
bf1[15 ] = input[30 ];
bf1[16 ] = input[1 ];
bf1[17 ] = input[17 ];
bf1[18 ] = input[9 ];
bf1[19 ] = input[25 ];
bf1[20 ] = input[5 ];
bf1[21 ] = input[21 ];
bf1[22 ] = input[13 ];
bf1[23 ] = input[29 ];
bf1[24 ] = input[3 ];
bf1[25 ] = input[19 ];
bf1[26 ] = input[11 ];
bf1[27 ] = input[27 ];
bf1[28 ] = input[7 ];
bf1[29 ] = input[23 ];
bf1[30 ] = input[15 ];
bf1[31 ] = input[31 ];
av1_range_check_buf(stage, input, bf1, size, stage_range[stage]);
// stage 2
stage++;
bf0 = output;
bf1 = step;
bf1[0 ] = bf0[0 ];
bf1[1 ] = bf0[1 ];
bf1[2 ] = bf0[2 ];
bf1[3 ] = bf0[3 ];
bf1[4 ] = bf0[4 ];
bf1[5 ] = bf0[5 ];
bf1[6 ] = bf0[6 ];
bf1[7 ] = bf0[7 ];
bf1[8 ] = bf0[8 ];
bf1[9 ] = bf0[9 ];
bf1[10 ] = bf0[10 ];
bf1[11 ] = bf0[11 ];
bf1[12 ] = bf0[12 ];
bf1[13 ] = bf0[13 ];
bf1[14 ] = bf0[14 ];
bf1[15 ] = bf0[15 ];
bf1[16 ] = half_btf(cospi[62 ], bf0[16 ], -cospi[2 ], bf0[31 ], cos_bit);
bf1[17 ] = half_btf(cospi[30 ], bf0[17 ], -cospi[34 ], bf0[30 ], cos_bit);
bf1[18 ] = half_btf(cospi[46 ], bf0[18 ], -cospi[18 ], bf0[29 ], cos_bit);
bf1[19 ] = half_btf(cospi[14 ], bf0[19 ], -cospi[50 ], bf0[28 ], cos_bit);
bf1[20 ] = half_btf(cospi[54 ], bf0[20 ], -cospi[10 ], bf0[27 ], cos_bit);
bf1[21 ] = half_btf(cospi[22 ], bf0[21 ], -cospi[42 ], bf0[26 ], cos_bit);
bf1[22 ] = half_btf(cospi[38 ], bf0[22 ], -cospi[26 ], bf0[25 ], cos_bit);
bf1[23 ] = half_btf(cospi[6 ], bf0[23 ], -cospi[58 ], bf0[24 ], cos_bit);
bf1[24 ] = half_btf(cospi[58 ], bf0[23 ], cospi[6 ], bf0[24 ], cos_bit);
bf1[25 ] = half_btf(cospi[26 ], bf0[22 ], cospi[38 ], bf0[25 ], cos_bit);
bf1[26 ] = half_btf(cospi[42 ], bf0[21 ], cospi[22 ], bf0[26 ], cos_bit);
bf1[27 ] = half_btf(cospi[10 ], bf0[20 ], cospi[54 ], bf0[27 ], cos_bit);
bf1[28 ] = half_btf(cospi[50 ], bf0[19 ], cospi[14 ], bf0[28 ], cos_bit);
bf1[29 ] = half_btf(cospi[18 ], bf0[18 ], cospi[46 ], bf0[29 ], cos_bit);
bf1[30 ] = half_btf(cospi[34 ], bf0[17 ], cospi[30 ], bf0[30 ], cos_bit);
bf1[31 ] = half_btf(cospi[2 ], bf0[16 ], cospi[62 ], bf0[31 ], cos_bit);
av1_range_check_buf(stage, input, bf1, size, stage_range[stage]);
// stage 3
stage++;
bf0 = step;
bf1 = output;
bf1[0 ] = bf0[0 ];
bf1[1 ] = bf0[1 ];
bf1[2 ] = bf0[2 ];
bf1[3 ] = bf0[3 ];
bf1[4 ] = bf0[4 ];
bf1[5 ] = bf0[5 ];
bf1[6 ] = bf0[6 ];
bf1[7 ] = bf0[7 ];
bf1[8 ] = half_btf(cospi[60 ], bf0[8 ], -cospi[4 ], bf0[15 ], cos_bit);
bf1[9 ] = half_btf(cospi[28 ], bf0[9 ], -cospi[36 ], bf0[14 ], cos_bit);
bf1[10 ] = half_btf(cospi[44 ], bf0[10 ], -cospi[20 ], bf0[13 ], cos_bit);
bf1[11 ] = half_btf(cospi[12 ], bf0[11 ], -cospi[52 ], bf0[12 ], cos_bit);
bf1[12 ] = half_btf(cospi[52 ], bf0[11 ], cospi[12 ], bf0[12 ], cos_bit);
bf1[13 ] = half_btf(cospi[20 ], bf0[10 ], cospi[44 ], bf0[13 ], cos_bit);
bf1[14 ] = half_btf(cospi[36 ], bf0[9 ], cospi[28 ], bf0[14 ], cos_bit);
bf1[15 ] = half_btf(cospi[4 ], bf0[8 ], cospi[60 ], bf0[15 ], cos_bit);
bf1[16 ] = clamp_value(bf0[16 ] + bf0[17 ], stage_range[stage]);
bf1[17 ] = clamp_value(bf0[16 ] - bf0[17 ], stage_range[stage]);
bf1[18 ] = clamp_value(-bf0[18 ] + bf0[19 ], stage_range[stage]);
bf1[19 ] = clamp_value(bf0[18 ] + bf0[19 ], stage_range[stage]);
bf1[20 ] = clamp_value(bf0[20 ] + bf0[21 ], stage_range[stage]);
bf1[21 ] = clamp_value(bf0[20 ] - bf0[21 ], stage_range[stage]);
bf1[22 ] = clamp_value(-bf0[22 ] + bf0[23 ], stage_range[stage]);
bf1[23 ] = clamp_value(bf0[22 ] + bf0[23 ], stage_range[stage]);
bf1[24 ] = clamp_value(bf0[24 ] + bf0[25 ], stage_range[stage]);
bf1[25 ] = clamp_value(bf0[24 ] - bf0[25 ], stage_range[stage]);
bf1[26 ] = clamp_value(-bf0[26 ] + bf0[27 ], stage_range[stage]);
bf1[27 ] = clamp_value(bf0[26 ] + bf0[27 ], stage_range[stage]);
bf1[28 ] = clamp_value(bf0[28 ] + bf0[29 ], stage_range[stage]);
bf1[29 ] = clamp_value(bf0[28 ] - bf0[29 ], stage_range[stage]);
bf1[30 ] = clamp_value(-bf0[30 ] + bf0[31 ], stage_range[stage]);
bf1[31 ] = clamp_value(bf0[30 ] + bf0[31 ], stage_range[stage]);
av1_range_check_buf(stage, input, bf1, size, stage_range[stage]);
// stage 4
stage++;
bf0 = output;
bf1 = step;
bf1[0 ] = bf0[0 ];
bf1[1 ] = bf0[1 ];
bf1[2 ] = bf0[2 ];
bf1[3 ] = bf0[3 ];
bf1[4 ] = half_btf(cospi[56 ], bf0[4 ], -cospi[8 ], bf0[7 ], cos_bit);
bf1[5 ] = half_btf(cospi[24 ], bf0[5 ], -cospi[40 ], bf0[6 ], cos_bit);
bf1[6 ] = half_btf(cospi[40 ], bf0[5 ], cospi[24 ], bf0[6 ], cos_bit);
bf1[7 ] = half_btf(cospi[8 ], bf0[4 ], cospi[56 ], bf0[7 ], cos_bit);
bf1[8 ] = clamp_value(bf0[8 ] + bf0[9 ], stage_range[stage]);
bf1[9 ] = clamp_value(bf0[8 ] - bf0[9 ], stage_range[stage]);
bf1[10 ] = clamp_value(-bf0[10 ] + bf0[11 ], stage_range[stage]);
bf1[11 ] = clamp_value(bf0[10 ] + bf0[11 ], stage_range[stage]);
bf1[12 ] = clamp_value(bf0[12 ] + bf0[13 ], stage_range[stage]);
bf1[13 ] = clamp_value(bf0[12 ] - bf0[13 ], stage_range[stage]);
bf1[14 ] = clamp_value(-bf0[14 ] + bf0[15 ], stage_range[stage]);
bf1[15 ] = clamp_value(bf0[14 ] + bf0[15 ], stage_range[stage]);
bf1[16 ] = bf0[16 ];
bf1[17 ] = half_btf(-cospi[8 ], bf0[17 ], cospi[56 ], bf0[30 ], cos_bit);
bf1[18 ] = half_btf(-cospi[56 ], bf0[18 ], -cospi[8 ], bf0[29 ], cos_bit);
bf1[19 ] = bf0[19 ];
bf1[20 ] = bf0[20 ];
bf1[21 ] = half_btf(-cospi[40 ], bf0[21 ], cospi[24 ], bf0[26 ], cos_bit);
bf1[22 ] = half_btf(-cospi[24 ], bf0[22 ], -cospi[40 ], bf0[25 ], cos_bit);
bf1[23 ] = bf0[23 ];
bf1[24 ] = bf0[24 ];
bf1[25 ] = half_btf(-cospi[40 ], bf0[22 ], cospi[24 ], bf0[25 ], cos_bit);
bf1[26 ] = half_btf(cospi[24 ], bf0[21 ], cospi[40 ], bf0[26 ], cos_bit);
bf1[27 ] = bf0[27 ];
bf1[28 ] = bf0[28 ];
bf1[29 ] = half_btf(-cospi[8 ], bf0[18 ], cospi[56 ], bf0[29 ], cos_bit);
bf1[30 ] = half_btf(cospi[56 ], bf0[17 ], cospi[8 ], bf0[30 ], cos_bit);
bf1[31 ] = bf0[31 ];
av1_range_check_buf(stage, input, bf1, size, stage_range[stage]);
// stage 5
stage++;
bf0 = step;
bf1 = output;
bf1[0 ] = half_btf(cospi[32 ], bf0[0 ], cospi[32 ], bf0[1 ], cos_bit);
bf1[1 ] = half_btf(cospi[32 ], bf0[0 ], -cospi[32 ], bf0[1 ], cos_bit);
bf1[2 ] = half_btf(cospi[48 ], bf0[2 ], -cospi[16 ], bf0[3 ], cos_bit);
bf1[3 ] = half_btf(cospi[16 ], bf0[2 ], cospi[48 ], bf0[3 ], cos_bit);
bf1[4 ] = clamp_value(bf0[4 ] + bf0[5 ], stage_range[stage]);
bf1[5 ] = clamp_value(bf0[4 ] - bf0[5 ], stage_range[stage]);
bf1[6 ] = clamp_value(-bf0[6 ] + bf0[7 ], stage_range[stage]);
bf1[7 ] = clamp_value(bf0[6 ] + bf0[7 ], stage_range[stage]);
bf1[8 ] = bf0[8 ];
bf1[9 ] = half_btf(-cospi[16 ], bf0[9 ], cospi[48 ], bf0[14 ], cos_bit);
bf1[10 ] = half_btf(-cospi[48 ], bf0[10 ], -cospi[16 ], bf0[13 ], cos_bit);
bf1[11 ] = bf0[11 ];
bf1[12 ] = bf0[12 ];
bf1[13 ] = half_btf(-cospi[16 ], bf0[10 ], cospi[48 ], bf0[13 ], cos_bit);
bf1[14 ] = half_btf(cospi[48 ], bf0[9 ], cospi[16 ], bf0[14 ], cos_bit);
bf1[15 ] = bf0[15 ];
bf1[16 ] = clamp_value(bf0[16 ] + bf0[19 ], stage_range[stage]);
bf1[17 ] = clamp_value(bf0[17 ] + bf0[18 ], stage_range[stage]);
bf1[18 ] = clamp_value(bf0[17 ] - bf0[18 ], stage_range[stage]);
bf1[19 ] = clamp_value(bf0[16 ] - bf0[19 ], stage_range[stage]);
bf1[20 ] = clamp_value(-bf0[20 ] + bf0[23 ], stage_range[stage]);
bf1[21 ] = clamp_value(-bf0[21 ] + bf0[22 ], stage_range[stage]);
bf1[22 ] = clamp_value(bf0[21 ] + bf0[22 ], stage_range[stage]);
bf1[23 ] = clamp_value(bf0[20 ] + bf0[23 ], stage_range[stage]);
bf1[24 ] = clamp_value(bf0[24 ] + bf0[27 ], stage_range[stage]);
bf1[25 ] = clamp_value(bf0[25 ] + bf0[26 ], stage_range[stage]);
bf1[26 ] = clamp_value(bf0[25 ] - bf0[26 ], stage_range[stage]);
bf1[27 ] = clamp_value(bf0[24 ] - bf0[27 ], stage_range[stage]);
bf1[28 ] = clamp_value(-bf0[28 ] + bf0[31 ], stage_range[stage]);
bf1[29 ] = clamp_value(-bf0[29 ] + bf0[30 ], stage_range[stage]);
bf1[30 ] = clamp_value(bf0[29 ] + bf0[30 ], stage_range[stage]);
bf1[31 ] = clamp_value(bf0[28 ] + bf0[31 ], stage_range[stage]);
av1_range_check_buf(stage, input, bf1, size, stage_range[stage]);
// stage 6
stage++;
bf0 = output;
bf1 = step;
bf1[0 ] = clamp_value(bf0[0 ] + bf0[3 ], stage_range[stage]);
bf1[1 ] = clamp_value(bf0[1 ] + bf0[2 ], stage_range[stage]);
bf1[2 ] = clamp_value(bf0[1 ] - bf0[2 ], stage_range[stage]);
bf1[3 ] = clamp_value(bf0[0 ] - bf0[3 ], stage_range[stage]);
bf1[4 ] = bf0[4 ];
bf1[5 ] = half_btf(-cospi[32 ], bf0[5 ], cospi[32 ], bf0[6 ], cos_bit);
bf1[6 ] = half_btf(cospi[32 ], bf0[5 ], cospi[32 ], bf0[6 ], cos_bit);
bf1[7 ] = bf0[7 ];
bf1[8 ] = clamp_value(bf0[8 ] + bf0[11 ], stage_range[stage]);
bf1[9 ] = clamp_value(bf0[9 ] + bf0[10 ], stage_range[stage]);
bf1[10 ] = clamp_value(bf0[9 ] - bf0[10 ], stage_range[stage]);
bf1[11 ] = clamp_value(bf0[8 ] - bf0[11 ], stage_range[stage]);
bf1[12 ] = clamp_value(-bf0[12 ] + bf0[15 ], stage_range[stage]);
bf1[13 ] = clamp_value(-bf0[13 ] + bf0[14 ], stage_range[stage]);
bf1[14 ] = clamp_value(bf0[13 ] + bf0[14 ], stage_range[stage]);
bf1[15 ] = clamp_value(bf0[12 ] + bf0[15 ], stage_range[stage]);
bf1[16 ] = bf0[16 ];
bf1[17 ] = bf0[17 ];
bf1[18 ] = half_btf(-cospi[16 ], bf0[18 ], cospi[48 ], bf0[29 ], cos_bit);
bf1[19 ] = half_btf(-cospi[16 ], bf0[19 ], cospi[48 ], bf0[28 ], cos_bit);
bf1[20 ] = half_btf(-cospi[48 ], bf0[20 ], -cospi[16 ], bf0[27 ], cos_bit);
bf1[21 ] = half_btf(-cospi[48 ], bf0[21 ], -cospi[16 ], bf0[26 ], cos_bit);
bf1[22 ] = bf0[22 ];
bf1[23 ] = bf0[23 ];
bf1[24 ] = bf0[24 ];
bf1[25 ] = bf0[25 ];
bf1[26 ] = half_btf(-cospi[16 ], bf0[21 ], cospi[48 ], bf0[26 ], cos_bit);
bf1[27 ] = half_btf(-cospi[16 ], bf0[20 ], cospi[48 ], bf0[27 ], cos_bit);
bf1[28 ] = half_btf(cospi[48 ], bf0[19 ], cospi[16 ], bf0[28 ], cos_bit);
bf1[29 ] = half_btf(cospi[48 ], bf0[18 ], cospi[16 ], bf0[29 ], cos_bit);
bf1[30 ] = bf0[30 ];
bf1[31 ] = bf0[31 ];
av1_range_check_buf(stage, input, bf1, size, stage_range[stage]);
// stage 7
stage++;
bf0 = step;
bf1 = output;
bf1[0 ] = clamp_value(bf0[0 ] + bf0[7 ], stage_range[stage]);
bf1[1 ] = clamp_value(bf0[1 ] + bf0[6 ], stage_range[stage]);
bf1[2 ] = clamp_value(bf0[2 ] + bf0[5 ], stage_range[stage]);
bf1[3 ] = clamp_value(bf0[3 ] + bf0[4 ], stage_range[stage]);
bf1[4 ] = clamp_value(bf0[3 ] - bf0[4 ], stage_range[stage]);
bf1[5 ] = clamp_value(bf0[2 ] - bf0[5 ], stage_range[stage]);
bf1[6 ] = clamp_value(bf0[1 ] - bf0[6 ], stage_range[stage]);
bf1[7 ] = clamp_value(bf0[0 ] - bf0[7 ], stage_range[stage]);
bf1[8 ] = bf0[8 ];
bf1[9 ] = bf0[9 ];
bf1[10 ] = half_btf(-cospi[32 ], bf0[10 ], cospi[32 ], bf0[13 ], cos_bit);
bf1[11 ] = half_btf(-cospi[32 ], bf0[11 ], cospi[32 ], bf0[12 ], cos_bit);
bf1[12 ] = half_btf(cospi[32 ], bf0[11 ], cospi[32 ], bf0[12 ], cos_bit);
bf1[13 ] = half_btf(cospi[32 ], bf0[10 ], cospi[32 ], bf0[13 ], cos_bit);
bf1[14 ] = bf0[14 ];
bf1[15 ] = bf0[15 ];
bf1[16 ] = clamp_value(bf0[16 ] + bf0[23 ], stage_range[stage]);
bf1[17 ] = clamp_value(bf0[17 ] + bf0[22 ], stage_range[stage]);
bf1[18 ] = clamp_value(bf0[18 ] + bf0[21 ], stage_range[stage]);
bf1[19 ] = clamp_value(bf0[19 ] + bf0[20 ], stage_range[stage]);
bf1[20 ] = clamp_value(bf0[19 ] - bf0[20 ], stage_range[stage]);
bf1[21 ] = clamp_value(bf0[18 ] - bf0[21 ], stage_range[stage]);
bf1[22 ] = clamp_value(bf0[17 ] - bf0[22 ], stage_range[stage]);
bf1[23 ] = clamp_value(bf0[16 ] - bf0[23 ], stage_range[stage]);
bf1[24 ] = clamp_value(-bf0[24 ] + bf0[31 ], stage_range[stage]);
bf1[25 ] = clamp_value(-bf0[25 ] + bf0[30 ], stage_range[stage]);
bf1[26 ] = clamp_value(-bf0[26 ] + bf0[29 ], stage_range[stage]);
bf1[27 ] = clamp_value(-bf0[27 ] + bf0[28 ], stage_range[stage]);
bf1[28 ] = clamp_value(bf0[27 ] + bf0[28 ], stage_range[stage]);
bf1[29 ] = clamp_value(bf0[26 ] + bf0[29 ], stage_range[stage]);
bf1[30 ] = clamp_value(bf0[25 ] + bf0[30 ], stage_range[stage]);
bf1[31 ] = clamp_value(bf0[24 ] + bf0[31 ], stage_range[stage]);
av1_range_check_buf(stage, input, bf1, size, stage_range[stage]);
// stage 8
stage++;
bf0 = output;
bf1 = step;
bf1[0 ] = clamp_value(bf0[0 ] + bf0[15 ], stage_range[stage]);
bf1[1 ] = clamp_value(bf0[1 ] + bf0[14 ], stage_range[stage]);
bf1[2 ] = clamp_value(bf0[2 ] + bf0[13 ], stage_range[stage]);
bf1[3 ] = clamp_value(bf0[3 ] + bf0[12 ], stage_range[stage]);
bf1[4 ] = clamp_value(bf0[4 ] + bf0[11 ], stage_range[stage]);
bf1[5 ] = clamp_value(bf0[5 ] + bf0[10 ], stage_range[stage]);
bf1[6 ] = clamp_value(bf0[6 ] + bf0[9 ], stage_range[stage]);
bf1[7 ] = clamp_value(bf0[7 ] + bf0[8 ], stage_range[stage]);
bf1[8 ] = clamp_value(bf0[7 ] - bf0[8 ], stage_range[stage]);
bf1[9 ] = clamp_value(bf0[6 ] - bf0[9 ], stage_range[stage]);
bf1[10 ] = clamp_value(bf0[5 ] - bf0[10 ], stage_range[stage]);
bf1[11 ] = clamp_value(bf0[4 ] - bf0[11 ], stage_range[stage]);
bf1[12 ] = clamp_value(bf0[3 ] - bf0[12 ], stage_range[stage]);
bf1[13 ] = clamp_value(bf0[2 ] - bf0[13 ], stage_range[stage]);
bf1[14 ] = clamp_value(bf0[1 ] - bf0[14 ], stage_range[stage]);
bf1[15 ] = clamp_value(bf0[0 ] - bf0[15 ], stage_range[stage]);
bf1[16 ] = bf0[16 ];
bf1[17 ] = bf0[17 ];
bf1[18 ] = bf0[18 ];
bf1[19 ] = bf0[19 ];
bf1[20 ] = half_btf(-cospi[32 ], bf0[20 ], cospi[32 ], bf0[27 ], cos_bit);
bf1[21 ] = half_btf(-cospi[32 ], bf0[21 ], cospi[32 ], bf0[26 ], cos_bit);
bf1[22 ] = half_btf(-cospi[32 ], bf0[22 ], cospi[32 ], bf0[25 ], cos_bit);
bf1[23 ] = half_btf(-cospi[32 ], bf0[23 ], cospi[32 ], bf0[24 ], cos_bit);
bf1[24 ] = half_btf(cospi[32 ], bf0[23 ], cospi[32 ], bf0[24 ], cos_bit);
bf1[25 ] = half_btf(cospi[32 ], bf0[22 ], cospi[32 ], bf0[25 ], cos_bit);
bf1[26 ] = half_btf(cospi[32 ], bf0[21 ], cospi[32 ], bf0[26 ], cos_bit);
bf1[27 ] = half_btf(cospi[32 ], bf0[20 ], cospi[32 ], bf0[27 ], cos_bit);
bf1[28 ] = bf0[28 ];
bf1[29 ] = bf0[29 ];
bf1[30 ] = bf0[30 ];
bf1[31 ] = bf0[31 ];
av1_range_check_buf(stage, input, bf1, size, stage_range[stage]);
// stage 9
stage++;
bf0 = step;
bf1 = output;
bf1[0 ] = clamp_value(bf0[0 ] + bf0[31 ], stage_range[stage]);
bf1[1 ] = clamp_value(bf0[1 ] + bf0[30 ], stage_range[stage]);
bf1[2 ] = clamp_value(bf0[2 ] + bf0[29 ], stage_range[stage]);
bf1[3 ] = clamp_value(bf0[3 ] + bf0[28 ], stage_range[stage]);
bf1[4 ] = clamp_value(bf0[4 ] + bf0[27 ], stage_range[stage]);
bf1[5 ] = clamp_value(bf0[5 ] + bf0[26 ], stage_range[stage]);
bf1[6 ] = clamp_value(bf0[6 ] + bf0[25 ], stage_range[stage]);
bf1[7 ] = clamp_value(bf0[7 ] + bf0[24 ], stage_range[stage]);
bf1[8 ] = clamp_value(bf0[8 ] + bf0[23 ], stage_range[stage]);
bf1[9 ] = clamp_value(bf0[9 ] + bf0[22 ], stage_range[stage]);
bf1[10 ] = clamp_value(bf0[10 ] + bf0[21 ], stage_range[stage]);
bf1[11 ] = clamp_value(bf0[11 ] + bf0[20 ], stage_range[stage]);
bf1[12 ] = clamp_value(bf0[12 ] + bf0[19 ], stage_range[stage]);
bf1[13 ] = clamp_value(bf0[13 ] + bf0[18 ], stage_range[stage]);
bf1[14 ] = clamp_value(bf0[14 ] + bf0[17 ], stage_range[stage]);
bf1[15 ] = clamp_value(bf0[15 ] + bf0[16 ], stage_range[stage]);
bf1[16 ] = clamp_value(bf0[15 ] - bf0[16 ], stage_range[stage]);
bf1[17 ] = clamp_value(bf0[14 ] - bf0[17 ], stage_range[stage]);
bf1[18 ] = clamp_value(bf0[13 ] - bf0[18 ], stage_range[stage]);
bf1[19 ] = clamp_value(bf0[12 ] - bf0[19 ], stage_range[stage]);
bf1[20 ] = clamp_value(bf0[11 ] - bf0[20 ], stage_range[stage]);
bf1[21 ] = clamp_value(bf0[10 ] - bf0[21 ], stage_range[stage]);
bf1[22 ] = clamp_value(bf0[9 ] - bf0[22 ], stage_range[stage]);
bf1[23 ] = clamp_value(bf0[8 ] - bf0[23 ], stage_range[stage]);
bf1[24 ] = clamp_value(bf0[7 ] - bf0[24 ], stage_range[stage]);
bf1[25 ] = clamp_value(bf0[6 ] - bf0[25 ], stage_range[stage]);
bf1[26 ] = clamp_value(bf0[5 ] - bf0[26 ], stage_range[stage]);
bf1[27 ] = clamp_value(bf0[4 ] - bf0[27 ], stage_range[stage]);
bf1[28 ] = clamp_value(bf0[3 ] - bf0[28 ], stage_range[stage]);
bf1[29 ] = clamp_value(bf0[2 ] - bf0[29 ], stage_range[stage]);
bf1[30 ] = clamp_value(bf0[1 ] - bf0[30 ], stage_range[stage]);
bf1[31 ] = clamp_value(bf0[0 ] - bf0[31 ], stage_range[stage]);
}
void av1_iadst4(const int32_t *input, int32_t *output, int8_t cos_bit,
const int8_t *stage_range) {
int bit = cos_bit;
const int32_t *sinpi = sinpi_arr(bit);
int32_t s0, s1, s2, s3, s4, s5, s6, s7;
int32_t x0 = input[0 ];
int32_t x1 = input[1 ];
int32_t x2 = input[2 ];
int32_t x3 = input[3 ];
if (!(x0 | x1 | x2 | x3)) {
output[0 ] = output[1 ] = output[2 ] = output[3 ] = 0 ;
return ;
}
assert(sinpi[1 ] + sinpi[2 ] == sinpi[4 ]);
// stage 1
s0 = range_check_value(sinpi[1 ] * x0, stage_range[1 ] + bit);
s1 = range_check_value(sinpi[2 ] * x0, stage_range[1 ] + bit);
s2 = range_check_value(sinpi[3 ] * x1, stage_range[1 ] + bit);
s3 = range_check_value(sinpi[4 ] * x2, stage_range[1 ] + bit);
s4 = range_check_value(sinpi[1 ] * x2, stage_range[1 ] + bit);
s5 = range_check_value(sinpi[2 ] * x3, stage_range[1 ] + bit);
s6 = range_check_value(sinpi[4 ] * x3, stage_range[1 ] + bit);
// stage 2
// NOTICE: (x0 - x2) here may use one extra bit compared to the
// opt_range_row/col specified in av1_gen_inv_stage_range()
s7 = range_check_value((x0 - x2) + x3, stage_range[2 ]);
// stage 3
s0 = range_check_value(s0 + s3, stage_range[3 ] + bit);
s1 = range_check_value(s1 - s4, stage_range[3 ] + bit);
s3 = range_check_value(s2, stage_range[3 ] + bit);
s2 = range_check_value(sinpi[3 ] * s7, stage_range[3 ] + bit);
// stage 4
s0 = range_check_value(s0 + s5, stage_range[4 ] + bit);
s1 = range_check_value(s1 - s6, stage_range[4 ] + bit);
// stage 5
x0 = range_check_value(s0 + s3, stage_range[5 ] + bit);
x1 = range_check_value(s1 + s3, stage_range[5 ] + bit);
x2 = range_check_value(s2, stage_range[5 ] + bit);
x3 = range_check_value(s0 + s1, stage_range[5 ] + bit);
// stage 6
x3 = range_check_value(x3 - s3, stage_range[6 ] + bit);
output[0 ] = round_shift(x0, bit);
output[1 ] = round_shift(x1, bit);
output[2 ] = round_shift(x2, bit);
output[3 ] = round_shift(x3, bit);
}
void av1_iadst8(const int32_t *input, int32_t *output, int8_t cos_bit,
const int8_t *stage_range) {
assert(output != input);
const int32_t size = 8 ;
const int32_t *cospi = cospi_arr(cos_bit);
int32_t stage = 0 ;
int32_t *bf0, *bf1;
int32_t step[8 ];
// stage 0;
// stage 1;
stage++;
bf1 = output;
bf1[0 ] = input[7 ];
bf1[1 ] = input[0 ];
bf1[2 ] = input[5 ];
bf1[3 ] = input[2 ];
bf1[4 ] = input[3 ];
bf1[5 ] = input[4 ];
bf1[6 ] = input[1 ];
bf1[7 ] = input[6 ];
av1_range_check_buf(stage, input, bf1, size, stage_range[stage]);
// stage 2
stage++;
bf0 = output;
bf1 = step;
bf1[0 ] = half_btf(cospi[4 ], bf0[0 ], cospi[60 ], bf0[1 ], cos_bit);
bf1[1 ] = half_btf(cospi[60 ], bf0[0 ], -cospi[4 ], bf0[1 ], cos_bit);
bf1[2 ] = half_btf(cospi[20 ], bf0[2 ], cospi[44 ], bf0[3 ], cos_bit);
bf1[3 ] = half_btf(cospi[44 ], bf0[2 ], -cospi[20 ], bf0[3 ], cos_bit);
bf1[4 ] = half_btf(cospi[36 ], bf0[4 ], cospi[28 ], bf0[5 ], cos_bit);
bf1[5 ] = half_btf(cospi[28 ], bf0[4 ], -cospi[36 ], bf0[5 ], cos_bit);
bf1[6 ] = half_btf(cospi[52 ], bf0[6 ], cospi[12 ], bf0[7 ], cos_bit);
bf1[7 ] = half_btf(cospi[12 ], bf0[6 ], -cospi[52 ], bf0[7 ], cos_bit);
av1_range_check_buf(stage, input, bf1, size, stage_range[stage]);
// stage 3
stage++;
bf0 = step;
bf1 = output;
bf1[0 ] = clamp_value(bf0[0 ] + bf0[4 ], stage_range[stage]);
bf1[1 ] = clamp_value(bf0[1 ] + bf0[5 ], stage_range[stage]);
bf1[2 ] = clamp_value(bf0[2 ] + bf0[6 ], stage_range[stage]);
bf1[3 ] = clamp_value(bf0[3 ] + bf0[7 ], stage_range[stage]);
bf1[4 ] = clamp_value(bf0[0 ] - bf0[4 ], stage_range[stage]);
bf1[5 ] = clamp_value(bf0[1 ] - bf0[5 ], stage_range[stage]);
bf1[6 ] = clamp_value(bf0[2 ] - bf0[6 ], stage_range[stage]);
bf1[7 ] = clamp_value(bf0[3 ] - bf0[7 ], stage_range[stage]);
av1_range_check_buf(stage, input, bf1, size, stage_range[stage]);
// stage 4
stage++;
bf0 = output;
bf1 = step;
bf1[0 ] = bf0[0 ];
bf1[1 ] = bf0[1 ];
bf1[2 ] = bf0[2 ];
bf1[3 ] = bf0[3 ];
bf1[4 ] = half_btf(cospi[16 ], bf0[4 ], cospi[48 ], bf0[5 ], cos_bit);
bf1[5 ] = half_btf(cospi[48 ], bf0[4 ], -cospi[16 ], bf0[5 ], cos_bit);
bf1[6 ] = half_btf(-cospi[48 ], bf0[6 ], cospi[16 ], bf0[7 ], cos_bit);
bf1[7 ] = half_btf(cospi[16 ], bf0[6 ], cospi[48 ], bf0[7 ], cos_bit);
av1_range_check_buf(stage, input, bf1, size, stage_range[stage]);
// stage 5
stage++;
bf0 = step;
bf1 = output;
bf1[0 ] = clamp_value(bf0[0 ] + bf0[2 ], stage_range[stage]);
bf1[1 ] = clamp_value(bf0[1 ] + bf0[3 ], stage_range[stage]);
bf1[2 ] = clamp_value(bf0[0 ] - bf0[2 ], stage_range[stage]);
bf1[3 ] = clamp_value(bf0[1 ] - bf0[3 ], stage_range[stage]);
bf1[4 ] = clamp_value(bf0[4 ] + bf0[6 ], stage_range[stage]);
bf1[5 ] = clamp_value(bf0[5 ] + bf0[7 ], stage_range[stage]);
bf1[6 ] = clamp_value(bf0[4 ] - bf0[6 ], stage_range[stage]);
bf1[7 ] = clamp_value(bf0[5 ] - bf0[7 ], stage_range[stage]);
av1_range_check_buf(stage, input, bf1, size, stage_range[stage]);
// stage 6
stage++;
bf0 = output;
bf1 = step;
bf1[0 ] = bf0[0 ];
bf1[1 ] = bf0[1 ];
bf1[2 ] = half_btf(cospi[32 ], bf0[2 ], cospi[32 ], bf0[3 ], cos_bit);
bf1[3 ] = half_btf(cospi[32 ], bf0[2 ], -cospi[32 ], bf0[3 ], cos_bit);
bf1[4 ] = bf0[4 ];
bf1[5 ] = bf0[5 ];
bf1[6 ] = half_btf(cospi[32 ], bf0[6 ], cospi[32 ], bf0[7 ], cos_bit);
bf1[7 ] = half_btf(cospi[32 ], bf0[6 ], -cospi[32 ], bf0[7 ], cos_bit);
av1_range_check_buf(stage, input, bf1, size, stage_range[stage]);
// stage 7
bf0 = step;
bf1 = output;
bf1[0 ] = bf0[0 ];
bf1[1 ] = -bf0[4 ];
bf1[2 ] = bf0[6 ];
bf1[3 ] = -bf0[2 ];
bf1[4 ] = bf0[3 ];
bf1[5 ] = -bf0[7 ];
bf1[6 ] = bf0[5 ];
bf1[7 ] = -bf0[1 ];
}
void av1_iadst16(const int32_t *input, int32_t *output, int8_t cos_bit,
const int8_t *stage_range) {
assert(output != input);
const int32_t size = 16 ;
const int32_t *cospi = cospi_arr(cos_bit);
int32_t stage = 0 ;
int32_t *bf0, *bf1;
int32_t step[16 ];
// stage 0;
// stage 1;
stage++;
bf1 = output;
bf1[0 ] = input[15 ];
bf1[1 ] = input[0 ];
bf1[2 ] = input[13 ];
bf1[3 ] = input[2 ];
bf1[4 ] = input[11 ];
bf1[5 ] = input[4 ];
bf1[6 ] = input[9 ];
bf1[7 ] = input[6 ];
bf1[8 ] = input[7 ];
bf1[9 ] = input[8 ];
bf1[10 ] = input[5 ];
bf1[11 ] = input[10 ];
bf1[12 ] = input[3 ];
bf1[13 ] = input[12 ];
bf1[14 ] = input[1 ];
bf1[15 ] = input[14 ];
av1_range_check_buf(stage, input, bf1, size, stage_range[stage]);
// stage 2
stage++;
bf0 = output;
bf1 = step;
bf1[0 ] = half_btf(cospi[2 ], bf0[0 ], cospi[62 ], bf0[1 ], cos_bit);
bf1[1 ] = half_btf(cospi[62 ], bf0[0 ], -cospi[2 ], bf0[1 ], cos_bit);
bf1[2 ] = half_btf(cospi[10 ], bf0[2 ], cospi[54 ], bf0[3 ], cos_bit);
bf1[3 ] = half_btf(cospi[54 ], bf0[2 ], -cospi[10 ], bf0[3 ], cos_bit);
bf1[4 ] = half_btf(cospi[18 ], bf0[4 ], cospi[46 ], bf0[5 ], cos_bit);
bf1[5 ] = half_btf(cospi[46 ], bf0[4 ], -cospi[18 ], bf0[5 ], cos_bit);
bf1[6 ] = half_btf(cospi[26 ], bf0[6 ], cospi[38 ], bf0[7 ], cos_bit);
bf1[7 ] = half_btf(cospi[38 ], bf0[6 ], -cospi[26 ], bf0[7 ], cos_bit);
bf1[8 ] = half_btf(cospi[34 ], bf0[8 ], cospi[30 ], bf0[9 ], cos_bit);
bf1[9 ] = half_btf(cospi[30 ], bf0[8 ], -cospi[34 ], bf0[9 ], cos_bit);
bf1[10 ] = half_btf(cospi[42 ], bf0[10 ], cospi[22 ], bf0[11 ], cos_bit);
bf1[11 ] = half_btf(cospi[22 ], bf0[10 ], -cospi[42 ], bf0[11 ], cos_bit);
bf1[12 ] = half_btf(cospi[50 ], bf0[12 ], cospi[14 ], bf0[13 ], cos_bit);
bf1[13 ] = half_btf(cospi[14 ], bf0[12 ], -cospi[50 ], bf0[13 ], cos_bit);
bf1[14 ] = half_btf(cospi[58 ], bf0[14 ], cospi[6 ], bf0[15 ], cos_bit);
bf1[15 ] = half_btf(cospi[6 ], bf0[14 ], -cospi[58 ], bf0[15 ], cos_bit);
av1_range_check_buf(stage, input, bf1, size, stage_range[stage]);
// stage 3
stage++;
bf0 = step;
bf1 = output;
bf1[0 ] = clamp_value(bf0[0 ] + bf0[8 ], stage_range[stage]);
bf1[1 ] = clamp_value(bf0[1 ] + bf0[9 ], stage_range[stage]);
bf1[2 ] = clamp_value(bf0[2 ] + bf0[10 ], stage_range[stage]);
bf1[3 ] = clamp_value(bf0[3 ] + bf0[11 ], stage_range[stage]);
bf1[4 ] = clamp_value(bf0[4 ] + bf0[12 ], stage_range[stage]);
bf1[5 ] = clamp_value(bf0[5 ] + bf0[13 ], stage_range[stage]);
bf1[6 ] = clamp_value(bf0[6 ] + bf0[14 ], stage_range[stage]);
bf1[7 ] = clamp_value(bf0[7 ] + bf0[15 ], stage_range[stage]);
bf1[8 ] = clamp_value(bf0[0 ] - bf0[8 ], stage_range[stage]);
bf1[9 ] = clamp_value(bf0[1 ] - bf0[9 ], stage_range[stage]);
bf1[10 ] = clamp_value(bf0[2 ] - bf0[10 ], stage_range[stage]);
bf1[11 ] = clamp_value(bf0[3 ] - bf0[11 ], stage_range[stage]);
bf1[12 ] = clamp_value(bf0[4 ] - bf0[12 ], stage_range[stage]);
bf1[13 ] = clamp_value(bf0[5 ] - bf0[13 ], stage_range[stage]);
bf1[14 ] = clamp_value(bf0[6 ] - bf0[14 ], stage_range[stage]);
bf1[15 ] = clamp_value(bf0[7 ] - bf0[15 ], stage_range[stage]);
av1_range_check_buf(stage, input, bf1, size, stage_range[stage]);
// stage 4
stage++;
bf0 = output;
bf1 = step;
bf1[0 ] = bf0[0 ];
bf1[1 ] = bf0[1 ];
bf1[2 ] = bf0[2 ];
bf1[3 ] = bf0[3 ];
bf1[4 ] = bf0[4 ];
bf1[5 ] = bf0[5 ];
bf1[6 ] = bf0[6 ];
bf1[7 ] = bf0[7 ];
bf1[8 ] = half_btf(cospi[8 ], bf0[8 ], cospi[56 ], bf0[9 ], cos_bit);
bf1[9 ] = half_btf(cospi[56 ], bf0[8 ], -cospi[8 ], bf0[9 ], cos_bit);
bf1[10 ] = half_btf(cospi[40 ], bf0[10 ], cospi[24 ], bf0[11 ], cos_bit);
bf1[11 ] = half_btf(cospi[24 ], bf0[10 ], -cospi[40 ], bf0[11 ], cos_bit);
bf1[12 ] = half_btf(-cospi[56 ], bf0[12 ], cospi[8 ], bf0[13 ], cos_bit);
bf1[13 ] = half_btf(cospi[8 ], bf0[12 ], cospi[56 ], bf0[13 ], cos_bit);
bf1[14 ] = half_btf(-cospi[24 ], bf0[14 ], cospi[40 ], bf0[15 ], cos_bit);
bf1[15 ] = half_btf(cospi[40 ], bf0[14 ], cospi[24 ], bf0[15 ], cos_bit);
av1_range_check_buf(stage, input, bf1, size, stage_range[stage]);
// stage 5
stage++;
bf0 = step;
bf1 = output;
bf1[0 ] = clamp_value(bf0[0 ] + bf0[4 ], stage_range[stage]);
bf1[1 ] = clamp_value(bf0[1 ] + bf0[5 ], stage_range[stage]);
bf1[2 ] = clamp_value(bf0[2 ] + bf0[6 ], stage_range[stage]);
bf1[3 ] = clamp_value(bf0[3 ] + bf0[7 ], stage_range[stage]);
bf1[4 ] = clamp_value(bf0[0 ] - bf0[4 ], stage_range[stage]);
bf1[5 ] = clamp_value(bf0[1 ] - bf0[5 ], stage_range[stage]);
bf1[6 ] = clamp_value(bf0[2 ] - bf0[6 ], stage_range[stage]);
bf1[7 ] = clamp_value(bf0[3 ] - bf0[7 ], stage_range[stage]);
bf1[8 ] = clamp_value(bf0[8 ] + bf0[12 ], stage_range[stage]);
bf1[9 ] = clamp_value(bf0[9 ] + bf0[13 ], stage_range[stage]);
bf1[10 ] = clamp_value(bf0[10 ] + bf0[14 ], stage_range[stage]);
bf1[11 ] = clamp_value(bf0[11 ] + bf0[15 ], stage_range[stage]);
bf1[12 ] = clamp_value(bf0[8 ] - bf0[12 ], stage_range[stage]);
bf1[13 ] = clamp_value(bf0[9 ] - bf0[13 ], stage_range[stage]);
bf1[14 ] = clamp_value(bf0[10 ] - bf0[14 ], stage_range[stage]);
bf1[15 ] = clamp_value(bf0[11 ] - bf0[15 ], stage_range[stage]);
av1_range_check_buf(stage, input, bf1, size, stage_range[stage]);
// stage 6
stage++;
bf0 = output;
bf1 = step;
bf1[0 ] = bf0[0 ];
bf1[1 ] = bf0[1 ];
bf1[2 ] = bf0[2 ];
bf1[3 ] = bf0[3 ];
bf1[4 ] = half_btf(cospi[16 ], bf0[4 ], cospi[48 ], bf0[5 ], cos_bit);
bf1[5 ] = half_btf(cospi[48 ], bf0[4 ], -cospi[16 ], bf0[5 ], cos_bit);
bf1[6 ] = half_btf(-cospi[48 ], bf0[6 ], cospi[16 ], bf0[7 ], cos_bit);
bf1[7 ] = half_btf(cospi[16 ], bf0[6 ], cospi[48 ], bf0[7 ], cos_bit);
bf1[8 ] = bf0[8 ];
bf1[9 ] = bf0[9 ];
bf1[10 ] = bf0[10 ];
bf1[11 ] = bf0[11 ];
bf1[12 ] = half_btf(cospi[16 ], bf0[12 ], cospi[48 ], bf0[13 ], cos_bit);
bf1[13 ] = half_btf(cospi[48 ], bf0[12 ], -cospi[16 ], bf0[13 ], cos_bit);
bf1[14 ] = half_btf(-cospi[48 ], bf0[14 ], cospi[16 ], bf0[15 ], cos_bit);
bf1[15 ] = half_btf(cospi[16 ], bf0[14 ], cospi[48 ], bf0[15 ], cos_bit);
av1_range_check_buf(stage, input, bf1, size, stage_range[stage]);
// stage 7
stage++;
bf0 = step;
bf1 = output;
bf1[0 ] = clamp_value(bf0[0 ] + bf0[2 ], stage_range[stage]);
bf1[1 ] = clamp_value(bf0[1 ] + bf0[3 ], stage_range[stage]);
bf1[2 ] = clamp_value(bf0[0 ] - bf0[2 ], stage_range[stage]);
bf1[3 ] = clamp_value(bf0[1 ] - bf0[3 ], stage_range[stage]);
bf1[4 ] = clamp_value(bf0[4 ] + bf0[6 ], stage_range[stage]);
bf1[5 ] = clamp_value(bf0[5 ] + bf0[7 ], stage_range[stage]);
bf1[6 ] = clamp_value(bf0[4 ] - bf0[6 ], stage_range[stage]);
bf1[7 ] = clamp_value(bf0[5 ] - bf0[7 ], stage_range[stage]);
bf1[8 ] = clamp_value(bf0[8 ] + bf0[10 ], stage_range[stage]);
bf1[9 ] = clamp_value(bf0[9 ] + bf0[11 ], stage_range[stage]);
bf1[10 ] = clamp_value(bf0[8 ] - bf0[10 ], stage_range[stage]);
bf1[11 ] = clamp_value(bf0[9 ] - bf0[11 ], stage_range[stage]);
bf1[12 ] = clamp_value(bf0[12 ] + bf0[14 ], stage_range[stage]);
bf1[13 ] = clamp_value(bf0[13 ] + bf0[15 ], stage_range[stage]);
bf1[14 ] = clamp_value(bf0[12 ] - bf0[14 ], stage_range[stage]);
bf1[15 ] = clamp_value(bf0[13 ] - bf0[15 ], stage_range[stage]);
av1_range_check_buf(stage, input, bf1, size, stage_range[stage]);
// stage 8
stage++;
bf0 = output;
bf1 = step;
bf1[0 ] = bf0[0 ];
bf1[1 ] = bf0[1 ];
bf1[2 ] = half_btf(cospi[32 ], bf0[2 ], cospi[32 ], bf0[3 ], cos_bit);
bf1[3 ] = half_btf(cospi[32 ], bf0[2 ], -cospi[32 ], bf0[3 ], cos_bit);
bf1[4 ] = bf0[4 ];
bf1[5 ] = bf0[5 ];
bf1[6 ] = half_btf(cospi[32 ], bf0[6 ], cospi[32 ], bf0[7 ], cos_bit);
bf1[7 ] = half_btf(cospi[32 ], bf0[6 ], -cospi[32 ], bf0[7 ], cos_bit);
bf1[8 ] = bf0[8 ];
bf1[9 ] = bf0[9 ];
bf1[10 ] = half_btf(cospi[32 ], bf0[10 ], cospi[32 ], bf0[11 ], cos_bit);
bf1[11 ] = half_btf(cospi[32 ], bf0[10 ], -cospi[32 ], bf0[11 ], cos_bit);
bf1[12 ] = bf0[12 ];
bf1[13 ] = bf0[13 ];
bf1[14 ] = half_btf(cospi[32 ], bf0[14 ], cospi[32 ], bf0[15 ], cos_bit);
bf1[15 ] = half_btf(cospi[32 ], bf0[14 ], -cospi[32 ], bf0[15 ], cos_bit);
av1_range_check_buf(stage, input, bf1, size, stage_range[stage]);
// stage 9
bf0 = step;
bf1 = output;
bf1[0 ] = bf0[0 ];
bf1[1 ] = -bf0[8 ];
bf1[2 ] = bf0[12 ];
bf1[3 ] = -bf0[4 ];
bf1[4 ] = bf0[6 ];
bf1[5 ] = -bf0[14 ];
bf1[6 ] = bf0[10 ];
bf1[7 ] = -bf0[2 ];
bf1[8 ] = bf0[3 ];
bf1[9 ] = -bf0[11 ];
bf1[10 ] = bf0[15 ];
bf1[11 ] = -bf0[7 ];
bf1[12 ] = bf0[5 ];
bf1[13 ] = -bf0[13 ];
bf1[14 ] = bf0[9 ];
bf1[15 ] = -bf0[1 ];
}
void av1_iidentity4_c(const int32_t *input, int32_t *output, int8_t cos_bit,
const int8_t *stage_range) {
(void )cos_bit;
(void )stage_range;
for (int i = 0 ; i < 4 ; ++i) {
output[i] = round_shift((int64_t)NewSqrt2 * input[i], NewSqrt2Bits);
}
assert(stage_range[0 ] + NewSqrt2Bits <= 32 );
}
void av1_iidentity8_c(const int32_t *input, int32_t *output, int8_t cos_bit,
const int8_t *stage_range) {
(void )cos_bit;
(void )stage_range;
for (int i = 0 ; i < 8 ; ++i) output[i] = (int32_t)((int64_t)input[i] * 2 );
}
void av1_iidentity16_c(const int32_t *input, int32_t *output, int8_t cos_bit,
const int8_t *stage_range) {
(void )cos_bit;
(void )stage_range;
for (int i = 0 ; i < 16 ; ++i)
output[i] = round_shift((int64_t)NewSqrt2 * 2 * input[i], NewSqrt2Bits);
assert(stage_range[0 ] + NewSqrt2Bits <= 32 );
}
void av1_iidentity32_c(const int32_t *input, int32_t *output, int8_t cos_bit,
const int8_t *stage_range) {
(void )cos_bit;
(void )stage_range;
for (int i = 0 ; i < 32 ; ++i) output[i] = (int32_t)((int64_t)input[i] * 4 );
}
void av1_idct64(const int32_t *input, int32_t *output, int8_t cos_bit,
const int8_t *stage_range) {
assert(output != input);
const int32_t size = 64 ;
const int32_t *cospi = cospi_arr(cos_bit);
int32_t stage = 0 ;
int32_t *bf0, *bf1;
int32_t step[64 ];
// stage 0;
// stage 1;
stage++;
bf1 = output;
bf1[0 ] = input[0 ];
bf1[1 ] = input[32 ];
bf1[2 ] = input[16 ];
bf1[3 ] = input[48 ];
bf1[4 ] = input[8 ];
bf1[5 ] = input[40 ];
bf1[6 ] = input[24 ];
bf1[7 ] = input[56 ];
bf1[8 ] = input[4 ];
bf1[9 ] = input[36 ];
bf1[10 ] = input[20 ];
bf1[11 ] = input[52 ];
bf1[12 ] = input[12 ];
bf1[13 ] = input[44 ];
bf1[14 ] = input[28 ];
bf1[15 ] = input[60 ];
bf1[16 ] = input[2 ];
bf1[17 ] = input[34 ];
bf1[18 ] = input[18 ];
bf1[19 ] = input[50 ];
bf1[20 ] = input[10 ];
bf1[21 ] = input[42 ];
bf1[22 ] = input[26 ];
bf1[23 ] = input[58 ];
bf1[24 ] = input[6 ];
bf1[25 ] = input[38 ];
bf1[26 ] = input[22 ];
bf1[27 ] = input[54 ];
bf1[28 ] = input[14 ];
bf1[29 ] = input[46 ];
bf1[30 ] = input[30 ];
bf1[31 ] = input[62 ];
bf1[32 ] = input[1 ];
bf1[33 ] = input[33 ];
bf1[34 ] = input[17 ];
bf1[35 ] = input[49 ];
bf1[36 ] = input[9 ];
bf1[37 ] = input[41 ];
bf1[38 ] = input[25 ];
bf1[39 ] = input[57 ];
bf1[40 ] = input[5 ];
bf1[41 ] = input[37 ];
bf1[42 ] = input[21 ];
bf1[43 ] = input[53 ];
bf1[44 ] = input[13 ];
bf1[45 ] = input[45 ];
bf1[46 ] = input[29 ];
bf1[47 ] = input[61 ];
bf1[48 ] = input[3 ];
bf1[49 ] = input[35 ];
bf1[50 ] = input[19 ];
bf1[51 ] = input[51 ];
bf1[52 ] = input[11 ];
bf1[53 ] = input[43 ];
bf1[54 ] = input[27 ];
bf1[55 ] = input[59 ];
bf1[56 ] = input[7 ];
bf1[57 ] = input[39 ];
bf1[58 ] = input[23 ];
bf1[59 ] = input[55 ];
bf1[60 ] = input[15 ];
bf1[61 ] = input[47 ];
bf1[62 ] = input[31 ];
bf1[63 ] = input[63 ];
av1_range_check_buf(stage, input, bf1, size, stage_range[stage]);
// stage 2
stage++;
bf0 = output;
bf1 = step;
bf1[0 ] = bf0[0 ];
bf1[1 ] = bf0[1 ];
bf1[2 ] = bf0[2 ];
bf1[3 ] = bf0[3 ];
bf1[4 ] = bf0[4 ];
bf1[5 ] = bf0[5 ];
bf1[6 ] = bf0[6 ];
bf1[7 ] = bf0[7 ];
bf1[8 ] = bf0[8 ];
bf1[9 ] = bf0[9 ];
bf1[10 ] = bf0[10 ];
bf1[11 ] = bf0[11 ];
bf1[12 ] = bf0[12 ];
bf1[13 ] = bf0[13 ];
bf1[14 ] = bf0[14 ];
bf1[15 ] = bf0[15 ];
bf1[16 ] = bf0[16 ];
bf1[17 ] = bf0[17 ];
bf1[18 ] = bf0[18 ];
bf1[19 ] = bf0[19 ];
bf1[20 ] = bf0[20 ];
bf1[21 ] = bf0[21 ];
bf1[22 ] = bf0[22 ];
bf1[23 ] = bf0[23 ];
bf1[24 ] = bf0[24 ];
bf1[25 ] = bf0[25 ];
bf1[26 ] = bf0[26 ];
bf1[27 ] = bf0[27 ];
bf1[28 ] = bf0[28 ];
bf1[29 ] = bf0[29 ];
bf1[30 ] = bf0[30 ];
bf1[31 ] = bf0[31 ];
bf1[32 ] = half_btf(cospi[63 ], bf0[32 ], -cospi[1 ], bf0[63 ], cos_bit);
bf1[33 ] = half_btf(cospi[31 ], bf0[33 ], -cospi[33 ], bf0[62 ], cos_bit);
bf1[34 ] = half_btf(cospi[47 ], bf0[34 ], -cospi[17 ], bf0[61 ], cos_bit);
bf1[35 ] = half_btf(cospi[15 ], bf0[35 ], -cospi[49 ], bf0[60 ], cos_bit);
bf1[36 ] = half_btf(cospi[55 ], bf0[36 ], -cospi[9 ], bf0[59 ], cos_bit);
bf1[37 ] = half_btf(cospi[23 ], bf0[37 ], -cospi[41 ], bf0[58 ], cos_bit);
bf1[38 ] = half_btf(cospi[39 ], bf0[38 ], -cospi[25 ], bf0[57 ], cos_bit);
bf1[39 ] = half_btf(cospi[7 ], bf0[39 ], -cospi[57 ], bf0[56 ], cos_bit);
bf1[40 ] = half_btf(cospi[59 ], bf0[40 ], -cospi[5 ], bf0[55 ], cos_bit);
bf1[41 ] = half_btf(cospi[27 ], bf0[41 ], -cospi[37 ], bf0[54 ], cos_bit);
bf1[42 ] = half_btf(cospi[43 ], bf0[42 ], -cospi[21 ], bf0[53 ], cos_bit);
bf1[43 ] = half_btf(cospi[11 ], bf0[43 ], -cospi[53 ], bf0[52 ], cos_bit);
bf1[44 ] = half_btf(cospi[51 ], bf0[44 ], -cospi[13 ], bf0[51 ], cos_bit);
bf1[45 ] = half_btf(cospi[19 ], bf0[45 ], -cospi[45 ], bf0[50 ], cos_bit);
bf1[46 ] = half_btf(cospi[35 ], bf0[46 ], -cospi[29 ], bf0[49 ], cos_bit);
bf1[47 ] = half_btf(cospi[3 ], bf0[47 ], -cospi[61 ], bf0[48 ], cos_bit);
bf1[48 ] = half_btf(cospi[61 ], bf0[47 ], cospi[3 ], bf0[48 ], cos_bit);
bf1[49 ] = half_btf(cospi[29 ], bf0[46 ], cospi[35 ], bf0[49 ], cos_bit);
bf1[50 ] = half_btf(cospi[45 ], bf0[45 ], cospi[19 ], bf0[50 ], cos_bit);
bf1[51 ] = half_btf(cospi[13 ], bf0[44 ], cospi[51 ], bf0[51 ], cos_bit);
bf1[52 ] = half_btf(cospi[53 ], bf0[43 ], cospi[11 ], bf0[52 ], cos_bit);
bf1[53 ] = half_btf(cospi[21 ], bf0[42 ], cospi[43 ], bf0[53 ], cos_bit);
bf1[54 ] = half_btf(cospi[37 ], bf0[41 ], cospi[27 ], bf0[54 ], cos_bit);
bf1[55 ] = half_btf(cospi[5 ], bf0[40 ], cospi[59 ], bf0[55 ], cos_bit);
bf1[56 ] = half_btf(cospi[57 ], bf0[39 ], cospi[7 ], bf0[56 ], cos_bit);
bf1[57 ] = half_btf(cospi[25 ], bf0[38 ], cospi[39 ], bf0[57 ], cos_bit);
bf1[58 ] = half_btf(cospi[41 ], bf0[37 ], cospi[23 ], bf0[58 ], cos_bit);
bf1[59 ] = half_btf(cospi[9 ], bf0[36 ], cospi[55 ], bf0[59 ], cos_bit);
bf1[60 ] = half_btf(cospi[49 ], bf0[35 ], cospi[15 ], bf0[60 ], cos_bit);
bf1[61 ] = half_btf(cospi[17 ], bf0[34 ], cospi[47 ], bf0[61 ], cos_bit);
bf1[62 ] = half_btf(cospi[33 ], bf0[33 ], cospi[31 ], bf0[62 ], cos_bit);
bf1[63 ] = half_btf(cospi[1 ], bf0[32 ], cospi[63 ], bf0[63 ], cos_bit);
av1_range_check_buf(stage, input, bf1, size, stage_range[stage]);
// stage 3
stage++;
bf0 = step;
bf1 = output;
bf1[0 ] = bf0[0 ];
bf1[1 ] = bf0[1 ];
bf1[2 ] = bf0[2 ];
bf1[3 ] = bf0[3 ];
bf1[4 ] = bf0[4 ];
bf1[5 ] = bf0[5 ];
bf1[6 ] = bf0[6 ];
bf1[7 ] = bf0[7 ];
bf1[8 ] = bf0[8 ];
bf1[9 ] = bf0[9 ];
bf1[10 ] = bf0[10 ];
bf1[11 ] = bf0[11 ];
bf1[12 ] = bf0[12 ];
bf1[13 ] = bf0[13 ];
bf1[14 ] = bf0[14 ];
bf1[15 ] = bf0[15 ];
bf1[16 ] = half_btf(cospi[62 ], bf0[16 ], -cospi[2 ], bf0[31 ], cos_bit);
bf1[17 ] = half_btf(cospi[30 ], bf0[17 ], -cospi[34 ], bf0[30 ], cos_bit);
bf1[18 ] = half_btf(cospi[46 ], bf0[18 ], -cospi[18 ], bf0[29 ], cos_bit);
bf1[19 ] = half_btf(cospi[14 ], bf0[19 ], -cospi[50 ], bf0[28 ], cos_bit);
bf1[20 ] = half_btf(cospi[54 ], bf0[20 ], -cospi[10 ], bf0[27 ], cos_bit);
bf1[21 ] = half_btf(cospi[22 ], bf0[21 ], -cospi[42 ], bf0[26 ], cos_bit);
bf1[22 ] = half_btf(cospi[38 ], bf0[22 ], -cospi[26 ], bf0[25 ], cos_bit);
bf1[23 ] = half_btf(cospi[6 ], bf0[23 ], -cospi[58 ], bf0[24 ], cos_bit);
bf1[24 ] = half_btf(cospi[58 ], bf0[23 ], cospi[6 ], bf0[24 ], cos_bit);
bf1[25 ] = half_btf(cospi[26 ], bf0[22 ], cospi[38 ], bf0[25 ], cos_bit);
bf1[26 ] = half_btf(cospi[42 ], bf0[21 ], cospi[22 ], bf0[26 ], cos_bit);
bf1[27 ] = half_btf(cospi[10 ], bf0[20 ], cospi[54 ], bf0[27 ], cos_bit);
bf1[28 ] = half_btf(cospi[50 ], bf0[19 ], cospi[14 ], bf0[28 ], cos_bit);
bf1[29 ] = half_btf(cospi[18 ], bf0[18 ], cospi[46 ], bf0[29 ], cos_bit);
bf1[30 ] = half_btf(cospi[34 ], bf0[17 ], cospi[30 ], bf0[30 ], cos_bit);
bf1[31 ] = half_btf(cospi[2 ], bf0[16 ], cospi[62 ], bf0[31 ], cos_bit);
bf1[32 ] = clamp_value(bf0[32 ] + bf0[33 ], stage_range[stage]);
bf1[33 ] = clamp_value(bf0[32 ] - bf0[33 ], stage_range[stage]);
bf1[34 ] = clamp_value(-bf0[34 ] + bf0[35 ], stage_range[stage]);
bf1[35 ] = clamp_value(bf0[34 ] + bf0[35 ], stage_range[stage]);
bf1[36 ] = clamp_value(bf0[36 ] + bf0[37 ], stage_range[stage]);
bf1[37 ] = clamp_value(bf0[36 ] - bf0[37 ], stage_range[stage]);
bf1[38 ] = clamp_value(-bf0[38 ] + bf0[39 ], stage_range[stage]);
bf1[39 ] = clamp_value(bf0[38 ] + bf0[39 ], stage_range[stage]);
bf1[40 ] = clamp_value(bf0[40 ] + bf0[41 ], stage_range[stage]);
bf1[41 ] = clamp_value(bf0[40 ] - bf0[41 ], stage_range[stage]);
bf1[42 ] = clamp_value(-bf0[42 ] + bf0[43 ], stage_range[stage]);
bf1[43 ] = clamp_value(bf0[42 ] + bf0[43 ], stage_range[stage]);
bf1[44 ] = clamp_value(bf0[44 ] + bf0[45 ], stage_range[stage]);
bf1[45 ] = clamp_value(bf0[44 ] - bf0[45 ], stage_range[stage]);
bf1[46 ] = clamp_value(-bf0[46 ] + bf0[47 ], stage_range[stage]);
bf1[47 ] = clamp_value(bf0[46 ] + bf0[47 ], stage_range[stage]);
bf1[48 ] = clamp_value(bf0[48 ] + bf0[49 ], stage_range[stage]);
bf1[49 ] = clamp_value(bf0[48 ] - bf0[49 ], stage_range[stage]);
bf1[50 ] = clamp_value(-bf0[50 ] + bf0[51 ], stage_range[stage]);
bf1[51 ] = clamp_value(bf0[50 ] + bf0[51 ], stage_range[stage]);
bf1[52 ] = clamp_value(bf0[52 ] + bf0[53 ], stage_range[stage]);
bf1[53 ] = clamp_value(bf0[52 ] - bf0[53 ], stage_range[stage]);
bf1[54 ] = clamp_value(-bf0[54 ] + bf0[55 ], stage_range[stage]);
bf1[55 ] = clamp_value(bf0[54 ] + bf0[55 ], stage_range[stage]);
bf1[56 ] = clamp_value(bf0[56 ] + bf0[57 ], stage_range[stage]);
bf1[57 ] = clamp_value(bf0[56 ] - bf0[57 ], stage_range[stage]);
bf1[58 ] = clamp_value(-bf0[58 ] + bf0[59 ], stage_range[stage]);
bf1[59 ] = clamp_value(bf0[58 ] + bf0[59 ], stage_range[stage]);
bf1[60 ] = clamp_value(bf0[60 ] + bf0[61 ], stage_range[stage]);
bf1[61 ] = clamp_value(bf0[60 ] - bf0[61 ], stage_range[stage]);
bf1[62 ] = clamp_value(-bf0[62 ] + bf0[63 ], stage_range[stage]);
bf1[63 ] = clamp_value(bf0[62 ] + bf0[63 ], stage_range[stage]);
av1_range_check_buf(stage, input, bf1, size, stage_range[stage]);
// stage 4
stage++;
bf0 = output;
bf1 = step;
bf1[0 ] = bf0[0 ];
bf1[1 ] = bf0[1 ];
bf1[2 ] = bf0[2 ];
bf1[3 ] = bf0[3 ];
bf1[4 ] = bf0[4 ];
bf1[5 ] = bf0[5 ];
bf1[6 ] = bf0[6 ];
bf1[7 ] = bf0[7 ];
bf1[8 ] = half_btf(cospi[60 ], bf0[8 ], -cospi[4 ], bf0[15 ], cos_bit);
bf1[9 ] = half_btf(cospi[28 ], bf0[9 ], -cospi[36 ], bf0[14 ], cos_bit);
bf1[10 ] = half_btf(cospi[44 ], bf0[10 ], -cospi[20 ], bf0[13 ], cos_bit);
bf1[11 ] = half_btf(cospi[12 ], bf0[11 ], -cospi[52 ], bf0[12 ], cos_bit);
bf1[12 ] = half_btf(cospi[52 ], bf0[11 ], cospi[12 ], bf0[12 ], cos_bit);
bf1[13 ] = half_btf(cospi[20 ], bf0[10 ], cospi[44 ], bf0[13 ], cos_bit);
bf1[14 ] = half_btf(cospi[36 ], bf0[9 ], cospi[28 ], bf0[14 ], cos_bit);
bf1[15 ] = half_btf(cospi[4 ], bf0[8 ], cospi[60 ], bf0[15 ], cos_bit);
bf1[16 ] = clamp_value(bf0[16 ] + bf0[17 ], stage_range[stage]);
bf1[17 ] = clamp_value(bf0[16 ] - bf0[17 ], stage_range[stage]);
bf1[18 ] = clamp_value(-bf0[18 ] + bf0[19 ], stage_range[stage]);
bf1[19 ] = clamp_value(bf0[18 ] + bf0[19 ], stage_range[stage]);
bf1[20 ] = clamp_value(bf0[20 ] + bf0[21 ], stage_range[stage]);
bf1[21 ] = clamp_value(bf0[20 ] - bf0[21 ], stage_range[stage]);
bf1[22 ] = clamp_value(-bf0[22 ] + bf0[23 ], stage_range[stage]);
bf1[23 ] = clamp_value(bf0[22 ] + bf0[23 ], stage_range[stage]);
bf1[24 ] = clamp_value(bf0[24 ] + bf0[25 ], stage_range[stage]);
bf1[25 ] = clamp_value(bf0[24 ] - bf0[25 ], stage_range[stage]);
bf1[26 ] = clamp_value(-bf0[26 ] + bf0[27 ], stage_range[stage]);
bf1[27 ] = clamp_value(bf0[26 ] + bf0[27 ], stage_range[stage]);
bf1[28 ] = clamp_value(bf0[28 ] + bf0[29 ], stage_range[stage]);
bf1[29 ] = clamp_value(bf0[28 ] - bf0[29 ], stage_range[stage]);
bf1[30 ] = clamp_value(-bf0[30 ] + bf0[31 ], stage_range[stage]);
bf1[31 ] = clamp_value(bf0[30 ] + bf0[31 ], stage_range[stage]);
bf1[32 ] = bf0[32 ];
bf1[33 ] = half_btf(-cospi[4 ], bf0[33 ], cospi[60 ], bf0[62 ], cos_bit);
bf1[34 ] = half_btf(-cospi[60 ], bf0[34 ], -cospi[4 ], bf0[61 ], cos_bit);
bf1[35 ] = bf0[35 ];
bf1[36 ] = bf0[36 ];
bf1[37 ] = half_btf(-cospi[36 ], bf0[37 ], cospi[28 ], bf0[58 ], cos_bit);
bf1[38 ] = half_btf(-cospi[28 ], bf0[38 ], -cospi[36 ], bf0[57 ], cos_bit);
bf1[39 ] = bf0[39 ];
bf1[40 ] = bf0[40 ];
bf1[41 ] = half_btf(-cospi[20 ], bf0[41 ], cospi[44 ], bf0[54 ], cos_bit);
bf1[42 ] = half_btf(-cospi[44 ], bf0[42 ], -cospi[20 ], bf0[53 ], cos_bit);
bf1[43 ] = bf0[43 ];
bf1[44 ] = bf0[44 ];
bf1[45 ] = half_btf(-cospi[52 ], bf0[45 ], cospi[12 ], bf0[50 ], cos_bit);
bf1[46 ] = half_btf(-cospi[12 ], bf0[46 ], -cospi[52 ], bf0[49 ], cos_bit);
bf1[47 ] = bf0[47 ];
bf1[48 ] = bf0[48 ];
bf1[49 ] = half_btf(-cospi[52 ], bf0[46 ], cospi[12 ], bf0[49 ], cos_bit);
bf1[50 ] = half_btf(cospi[12 ], bf0[45 ], cospi[52 ], bf0[50 ], cos_bit);
bf1[51 ] = bf0[51 ];
bf1[52 ] = bf0[52 ];
bf1[53 ] = half_btf(-cospi[20 ], bf0[42 ], cospi[44 ], bf0[53 ], cos_bit);
bf1[54 ] = half_btf(cospi[44 ], bf0[41 ], cospi[20 ], bf0[54 ], cos_bit);
bf1[55 ] = bf0[55 ];
bf1[56 ] = bf0[56 ];
bf1[57 ] = half_btf(-cospi[36 ], bf0[38 ], cospi[28 ], bf0[57 ], cos_bit);
bf1[58 ] = half_btf(cospi[28 ], bf0[37 ], cospi[36 ], bf0[58 ], cos_bit);
bf1[59 ] = bf0[59 ];
bf1[60 ] = bf0[60 ];
bf1[61 ] = half_btf(-cospi[4 ], bf0[34 ], cospi[60 ], bf0[61 ], cos_bit);
bf1[62 ] = half_btf(cospi[60 ], bf0[33 ], cospi[4 ], bf0[62 ], cos_bit);
bf1[63 ] = bf0[63 ];
av1_range_check_buf(stage, input, bf1, size, stage_range[stage]);
// stage 5
stage++;
bf0 = step;
bf1 = output;
bf1[0 ] = bf0[0 ];
bf1[1 ] = bf0[1 ];
bf1[2 ] = bf0[2 ];
bf1[3 ] = bf0[3 ];
bf1[4 ] = half_btf(cospi[56 ], bf0[4 ], -cospi[8 ], bf0[7 ], cos_bit);
bf1[5 ] = half_btf(cospi[24 ], bf0[5 ], -cospi[40 ], bf0[6 ], cos_bit);
bf1[6 ] = half_btf(cospi[40 ], bf0[5 ], cospi[24 ], bf0[6 ], cos_bit);
bf1[7 ] = half_btf(cospi[8 ], bf0[4 ], cospi[56 ], bf0[7 ], cos_bit);
bf1[8 ] = clamp_value(bf0[8 ] + bf0[9 ], stage_range[stage]);
bf1[9 ] = clamp_value(bf0[8 ] - bf0[9 ], stage_range[stage]);
bf1[10 ] = clamp_value(-bf0[10 ] + bf0[11 ], stage_range[stage]);
bf1[11 ] = clamp_value(bf0[10 ] + bf0[11 ], stage_range[stage]);
bf1[12 ] = clamp_value(bf0[12 ] + bf0[13 ], stage_range[stage]);
bf1[13 ] = clamp_value(bf0[12 ] - bf0[13 ], stage_range[stage]);
bf1[14 ] = clamp_value(-bf0[14 ] + bf0[15 ], stage_range[stage]);
bf1[15 ] = clamp_value(bf0[14 ] + bf0[15 ], stage_range[stage]);
bf1[16 ] = bf0[16 ];
bf1[17 ] = half_btf(-cospi[8 ], bf0[17 ], cospi[56 ], bf0[30 ], cos_bit);
bf1[18 ] = half_btf(-cospi[56 ], bf0[18 ], -cospi[8 ], bf0[29 ], cos_bit);
bf1[19 ] = bf0[19 ];
bf1[20 ] = bf0[20 ];
bf1[21 ] = half_btf(-cospi[40 ], bf0[21 ], cospi[24 ], bf0[26 ], cos_bit);
bf1[22 ] = half_btf(-cospi[24 ], bf0[22 ], -cospi[40 ], bf0[25 ], cos_bit);
bf1[23 ] = bf0[23 ];
bf1[24 ] = bf0[24 ];
bf1[25 ] = half_btf(-cospi[40 ], bf0[22 ], cospi[24 ], bf0[25 ], cos_bit);
bf1[26 ] = half_btf(cospi[24 ], bf0[21 ], cospi[40 ], bf0[26 ], cos_bit);
bf1[27 ] = bf0[27 ];
bf1[28 ] = bf0[28 ];
bf1[29 ] = half_btf(-cospi[8 ], bf0[18 ], cospi[56 ], bf0[29 ], cos_bit);
bf1[30 ] = half_btf(cospi[56 ], bf0[17 ], cospi[8 ], bf0[30 ], cos_bit);
bf1[31 ] = bf0[31 ];
bf1[32 ] = clamp_value(bf0[32 ] + bf0[35 ], stage_range[stage]);
bf1[33 ] = clamp_value(bf0[33 ] + bf0[34 ], stage_range[stage]);
bf1[34 ] = clamp_value(bf0[33 ] - bf0[34 ], stage_range[stage]);
bf1[35 ] = clamp_value(bf0[32 ] - bf0[35 ], stage_range[stage]);
bf1[36 ] = clamp_value(-bf0[36 ] + bf0[39 ], stage_range[stage]);
bf1[37 ] = clamp_value(-bf0[37 ] + bf0[38 ], stage_range[stage]);
bf1[38 ] = clamp_value(bf0[37 ] + bf0[38 ], stage_range[stage]);
bf1[39 ] = clamp_value(bf0[36 ] + bf0[39 ], stage_range[stage]);
bf1[40 ] = clamp_value(bf0[40 ] + bf0[43 ], stage_range[stage]);
bf1[41 ] = clamp_value(bf0[41 ] + bf0[42 ], stage_range[stage]);
bf1[42 ] = clamp_value(bf0[41 ] - bf0[42 ], stage_range[stage]);
bf1[43 ] = clamp_value(bf0[40 ] - bf0[43 ], stage_range[stage]);
bf1[44 ] = clamp_value(-bf0[44 ] + bf0[47 ], stage_range[stage]);
bf1[45 ] = clamp_value(-bf0[45 ] + bf0[46 ], stage_range[stage]);
bf1[46 ] = clamp_value(bf0[45 ] + bf0[46 ], stage_range[stage]);
bf1[47 ] = clamp_value(bf0[44 ] + bf0[47 ], stage_range[stage]);
bf1[48 ] = clamp_value(bf0[48 ] + bf0[51 ], stage_range[stage]);
bf1[49 ] = clamp_value(bf0[49 ] + bf0[50 ], stage_range[stage]);
bf1[50 ] = clamp_value(bf0[49 ] - bf0[50 ], stage_range[stage]);
bf1[51 ] = clamp_value(bf0[48 ] - bf0[51 ], stage_range[stage]);
bf1[52 ] = clamp_value(-bf0[52 ] + bf0[55 ], stage_range[stage]);
bf1[53 ] = clamp_value(-bf0[53 ] + bf0[54 ], stage_range[stage]);
bf1[54 ] = clamp_value(bf0[53 ] + bf0[54 ], stage_range[stage]);
bf1[55 ] = clamp_value(bf0[52 ] + bf0[55 ], stage_range[stage]);
bf1[56 ] = clamp_value(bf0[56 ] + bf0[59 ], stage_range[stage]);
bf1[57 ] = clamp_value(bf0[57 ] + bf0[58 ], stage_range[stage]);
bf1[58 ] = clamp_value(bf0[57 ] - bf0[58 ], stage_range[stage]);
bf1[59 ] = clamp_value(bf0[56 ] - bf0[59 ], stage_range[stage]);
bf1[60 ] = clamp_value(-bf0[60 ] + bf0[63 ], stage_range[stage]);
bf1[61 ] = clamp_value(-bf0[61 ] + bf0[62 ], stage_range[stage]);
bf1[62 ] = clamp_value(bf0[61 ] + bf0[62 ], stage_range[stage]);
bf1[63 ] = clamp_value(bf0[60 ] + bf0[63 ], stage_range[stage]);
av1_range_check_buf(stage, input, bf1, size, stage_range[stage]);
// stage 6
stage++;
bf0 = output;
bf1 = step;
bf1[0 ] = half_btf(cospi[32 ], bf0[0 ], cospi[32 ], bf0[1 ], cos_bit);
bf1[1 ] = half_btf(cospi[32 ], bf0[0 ], -cospi[32 ], bf0[1 ], cos_bit);
bf1[2 ] = half_btf(cospi[48 ], bf0[2 ], -cospi[16 ], bf0[3 ], cos_bit);
bf1[3 ] = half_btf(cospi[16 ], bf0[2 ], cospi[48 ], bf0[3 ], cos_bit);
bf1[4 ] = clamp_value(bf0[4 ] + bf0[5 ], stage_range[stage]);
bf1[5 ] = clamp_value(bf0[4 ] - bf0[5 ], stage_range[stage]);
bf1[6 ] = clamp_value(-bf0[6 ] + bf0[7 ], stage_range[stage]);
bf1[7 ] = clamp_value(bf0[6 ] + bf0[7 ], stage_range[stage]);
bf1[8 ] = bf0[8 ];
bf1[9 ] = half_btf(-cospi[16 ], bf0[9 ], cospi[48 ], bf0[14 ], cos_bit);
bf1[10 ] = half_btf(-cospi[48 ], bf0[10 ], -cospi[16 ], bf0[13 ], cos_bit);
bf1[11 ] = bf0[11 ];
bf1[12 ] = bf0[12 ];
bf1[13 ] = half_btf(-cospi[16 ], bf0[10 ], cospi[48 ], bf0[13 ], cos_bit);
bf1[14 ] = half_btf(cospi[48 ], bf0[9 ], cospi[16 ], bf0[14 ], cos_bit);
bf1[15 ] = bf0[15 ];
bf1[16 ] = clamp_value(bf0[16 ] + bf0[19 ], stage_range[stage]);
bf1[17 ] = clamp_value(bf0[17 ] + bf0[18 ], stage_range[stage]);
bf1[18 ] = clamp_value(bf0[17 ] - bf0[18 ], stage_range[stage]);
bf1[19 ] = clamp_value(bf0[16 ] - bf0[19 ], stage_range[stage]);
bf1[20 ] = clamp_value(-bf0[20 ] + bf0[23 ], stage_range[stage]);
bf1[21 ] = clamp_value(-bf0[21 ] + bf0[22 ], stage_range[stage]);
bf1[22 ] = clamp_value(bf0[21 ] + bf0[22 ], stage_range[stage]);
bf1[23 ] = clamp_value(bf0[20 ] + bf0[23 ], stage_range[stage]);
bf1[24 ] = clamp_value(bf0[24 ] + bf0[27 ], stage_range[stage]);
bf1[25 ] = clamp_value(bf0[25 ] + bf0[26 ], stage_range[stage]);
bf1[26 ] = clamp_value(bf0[25 ] - bf0[26 ], stage_range[stage]);
bf1[27 ] = clamp_value(bf0[24 ] - bf0[27 ], stage_range[stage]);
bf1[28 ] = clamp_value(-bf0[28 ] + bf0[31 ], stage_range[stage]);
bf1[29 ] = clamp_value(-bf0[29 ] + bf0[30 ], stage_range[stage]);
bf1[30 ] = clamp_value(bf0[29 ] + bf0[30 ], stage_range[stage]);
bf1[31 ] = clamp_value(bf0[28 ] + bf0[31 ], stage_range[stage]);
bf1[32 ] = bf0[32 ];
bf1[33 ] = bf0[33 ];
bf1[34 ] = half_btf(-cospi[8 ], bf0[34 ], cospi[56 ], bf0[61 ], cos_bit);
bf1[35 ] = half_btf(-cospi[8 ], bf0[35 ], cospi[56 ], bf0[60 ], cos_bit);
bf1[36 ] = half_btf(-cospi[56 ], bf0[36 ], -cospi[8 ], bf0[59 ], cos_bit);
bf1[37 ] = half_btf(-cospi[56 ], bf0[37 ], -cospi[8 ], bf0[58 ], cos_bit);
bf1[38 ] = bf0[38 ];
bf1[39 ] = bf0[39 ];
bf1[40 ] = bf0[40 ];
bf1[41 ] = bf0[41 ];
bf1[42 ] = half_btf(-cospi[40 ], bf0[42 ], cospi[24 ], bf0[53 ], cos_bit);
bf1[43 ] = half_btf(-cospi[40 ], bf0[43 ], cospi[24 ], bf0[52 ], cos_bit);
bf1[44 ] = half_btf(-cospi[24 ], bf0[44 ], -cospi[40 ], bf0[51 ], cos_bit);
bf1[45 ] = half_btf(-cospi[24 ], bf0[45 ], -cospi[40 ], bf0[50 ], cos_bit);
bf1[46 ] = bf0[46 ];
bf1[47 ] = bf0[47 ];
bf1[48 ] = bf0[48 ];
bf1[49 ] = bf0[49 ];
bf1[50 ] = half_btf(-cospi[40 ], bf0[45 ], cospi[24 ], bf0[50 ], cos_bit);
bf1[51 ] = half_btf(-cospi[40 ], bf0[44 ], cospi[24 ], bf0[51 ], cos_bit);
bf1[52 ] = half_btf(cospi[24 ], bf0[43 ], cospi[40 ], bf0[52 ], cos_bit);
bf1[53 ] = half_btf(cospi[24 ], bf0[42 ], cospi[40 ], bf0[53 ], cos_bit);
bf1[54 ] = bf0[54 ];
bf1[55 ] = bf0[55 ];
bf1[56 ] = bf0[56 ];
bf1[57 ] = bf0[57 ];
bf1[58 ] = half_btf(-cospi[8 ], bf0[37 ], cospi[56 ], bf0[58 ], cos_bit);
bf1[59 ] = half_btf(-cospi[8 ], bf0[36 ], cospi[56 ], bf0[59 ], cos_bit);
bf1[60 ] = half_btf(cospi[56 ], bf0[35 ], cospi[8 ], bf0[60 ], cos_bit);
bf1[61 ] = half_btf(cospi[56 ], bf0[34 ], cospi[8 ], bf0[61 ], cos_bit);
bf1[62 ] = bf0[62 ];
bf1[63 ] = bf0[63 ];
av1_range_check_buf(stage, input, bf1, size, stage_range[stage]);
// stage 7
stage++;
bf0 = step;
bf1 = output;
bf1[0 ] = clamp_value(bf0[0 ] + bf0[3 ], stage_range[stage]);
bf1[1 ] = clamp_value(bf0[1 ] + bf0[2 ], stage_range[stage]);
bf1[2 ] = clamp_value(bf0[1 ] - bf0[2 ], stage_range[stage]);
bf1[3 ] = clamp_value(bf0[0 ] - bf0[3 ], stage_range[stage]);
bf1[4 ] = bf0[4 ];
bf1[5 ] = half_btf(-cospi[32 ], bf0[5 ], cospi[32 ], bf0[6 ], cos_bit);
bf1[6 ] = half_btf(cospi[32 ], bf0[5 ], cospi[32 ], bf0[6 ], cos_bit);
bf1[7 ] = bf0[7 ];
bf1[8 ] = clamp_value(bf0[8 ] + bf0[11 ], stage_range[stage]);
bf1[9 ] = clamp_value(bf0[9 ] + bf0[10 ], stage_range[stage]);
bf1[10 ] = clamp_value(bf0[9 ] - bf0[10 ], stage_range[stage]);
bf1[11 ] = clamp_value(bf0[8 ] - bf0[11 ], stage_range[stage]);
bf1[12 ] = clamp_value(-bf0[12 ] + bf0[15 ], stage_range[stage]);
bf1[13 ] = clamp_value(-bf0[13 ] + bf0[14 ], stage_range[stage]);
bf1[14 ] = clamp_value(bf0[13 ] + bf0[14 ], stage_range[stage]);
bf1[15 ] = clamp_value(bf0[12 ] + bf0[15 ], stage_range[stage]);
bf1[16 ] = bf0[16 ];
bf1[17 ] = bf0[17 ];
bf1[18 ] = half_btf(-cospi[16 ], bf0[18 ], cospi[48 ], bf0[29 ], cos_bit);
bf1[19 ] = half_btf(-cospi[16 ], bf0[19 ], cospi[48 ], bf0[28 ], cos_bit);
bf1[20 ] = half_btf(-cospi[48 ], bf0[20 ], -cospi[16 ], bf0[27 ], cos_bit);
bf1[21 ] = half_btf(-cospi[48 ], bf0[21 ], -cospi[16 ], bf0[26 ], cos_bit);
bf1[22 ] = bf0[22 ];
bf1[23 ] = bf0[23 ];
bf1[24 ] = bf0[24 ];
bf1[25 ] = bf0[25 ];
bf1[26 ] = half_btf(-cospi[16 ], bf0[21 ], cospi[48 ], bf0[26 ], cos_bit);
bf1[27 ] = half_btf(-cospi[16 ], bf0[20 ], cospi[48 ], bf0[27 ], cos_bit);
bf1[28 ] = half_btf(cospi[48 ], bf0[19 ], cospi[16 ], bf0[28 ], cos_bit);
bf1[29 ] = half_btf(cospi[48 ], bf0[18 ], cospi[16 ], bf0[29 ], cos_bit);
bf1[30 ] = bf0[30 ];
bf1[31 ] = bf0[31 ];
bf1[32 ] = clamp_value(bf0[32 ] + bf0[39 ], stage_range[stage]);
bf1[33 ] = clamp_value(bf0[33 ] + bf0[38 ], stage_range[stage]);
bf1[34 ] = clamp_value(bf0[34 ] + bf0[37 ], stage_range[stage]);
bf1[35 ] = clamp_value(bf0[35 ] + bf0[36 ], stage_range[stage]);
bf1[36 ] = clamp_value(bf0[35 ] - bf0[36 ], stage_range[stage]);
bf1[37 ] = clamp_value(bf0[34 ] - bf0[37 ], stage_range[stage]);
bf1[38 ] = clamp_value(bf0[33 ] - bf0[38 ], stage_range[stage]);
bf1[39 ] = clamp_value(bf0[32 ] - bf0[39 ], stage_range[stage]);
bf1[40 ] = clamp_value(-bf0[40 ] + bf0[47 ], stage_range[stage]);
bf1[41 ] = clamp_value(-bf0[41 ] + bf0[46 ], stage_range[stage]);
bf1[42 ] = clamp_value(-bf0[42 ] + bf0[45 ], stage_range[stage]);
bf1[43 ] = clamp_value(-bf0[43 ] + bf0[44 ], stage_range[stage]);
bf1[44 ] = clamp_value(bf0[43 ] + bf0[44 ], stage_range[stage]);
bf1[45 ] = clamp_value(bf0[42 ] + bf0[45 ], stage_range[stage]);
bf1[46 ] = clamp_value(bf0[41 ] + bf0[46 ], stage_range[stage]);
bf1[47 ] = clamp_value(bf0[40 ] + bf0[47 ], stage_range[stage]);
bf1[48 ] = clamp_value(bf0[48 ] + bf0[55 ], stage_range[stage]);
bf1[49 ] = clamp_value(bf0[49 ] + bf0[54 ], stage_range[stage]);
bf1[50 ] = clamp_value(bf0[50 ] + bf0[53 ], stage_range[stage]);
bf1[51 ] = clamp_value(bf0[51 ] + bf0[52 ], stage_range[stage]);
bf1[52 ] = clamp_value(bf0[51 ] - bf0[52 ], stage_range[stage]);
bf1[53 ] = clamp_value(bf0[50 ] - bf0[53 ], stage_range[stage]);
bf1[54 ] = clamp_value(bf0[49 ] - bf0[54 ], stage_range[stage]);
bf1[55 ] = clamp_value(bf0[48 ] - bf0[55 ], stage_range[stage]);
bf1[56 ] = clamp_value(-bf0[56 ] + bf0[63 ], stage_range[stage]);
bf1[57 ] = clamp_value(-bf0[57 ] + bf0[62 ], stage_range[stage]);
bf1[58 ] = clamp_value(-bf0[58 ] + bf0[61 ], stage_range[stage]);
bf1[59 ] = clamp_value(-bf0[59 ] + bf0[60 ], stage_range[stage]);
bf1[60 ] = clamp_value(bf0[59 ] + bf0[60 ], stage_range[stage]);
bf1[61 ] = clamp_value(bf0[58 ] + bf0[61 ], stage_range[stage]);
bf1[62 ] = clamp_value(bf0[57 ] + bf0[62 ], stage_range[stage]);
bf1[63 ] = clamp_value(bf0[56 ] + bf0[63 ], stage_range[stage]);
av1_range_check_buf(stage, input, bf1, size, stage_range[stage]);
// stage 8
stage++;
bf0 = output;
bf1 = step;
bf1[0 ] = clamp_value(bf0[0 ] + bf0[7 ], stage_range[stage]);
bf1[1 ] = clamp_value(bf0[1 ] + bf0[6 ], stage_range[stage]);
bf1[2 ] = clamp_value(bf0[2 ] + bf0[5 ], stage_range[stage]);
bf1[3 ] = clamp_value(bf0[3 ] + bf0[4 ], stage_range[stage]);
bf1[4 ] = clamp_value(bf0[3 ] - bf0[4 ], stage_range[stage]);
bf1[5 ] = clamp_value(bf0[2 ] - bf0[5 ], stage_range[stage]);
bf1[6 ] = clamp_value(bf0[1 ] - bf0[6 ], stage_range[stage]);
bf1[7 ] = clamp_value(bf0[0 ] - bf0[7 ], stage_range[stage]);
bf1[8 ] = bf0[8 ];
bf1[9 ] = bf0[9 ];
bf1[10 ] = half_btf(-cospi[32 ], bf0[10 ], cospi[32 ], bf0[13 ], cos_bit);
bf1[11 ] = half_btf(-cospi[32 ], bf0[11 ], cospi[32 ], bf0[12 ], cos_bit);
bf1[12 ] = half_btf(cospi[32 ], bf0[11 ], cospi[32 ], bf0[12 ], cos_bit);
bf1[13 ] = half_btf(cospi[32 ], bf0[10 ], cospi[32 ], bf0[13 ], cos_bit);
bf1[14 ] = bf0[14 ];
bf1[15 ] = bf0[15 ];
bf1[16 ] = clamp_value(bf0[16 ] + bf0[23 ], stage_range[stage]);
bf1[17 ] = clamp_value(bf0[17 ] + bf0[22 ], stage_range[stage]);
bf1[18 ] = clamp_value(bf0[18 ] + bf0[21 ], stage_range[stage]);
bf1[19 ] = clamp_value(bf0[19 ] + bf0[20 ], stage_range[stage]);
bf1[20 ] = clamp_value(bf0[19 ] - bf0[20 ], stage_range[stage]);
bf1[21 ] = clamp_value(bf0[18 ] - bf0[21 ], stage_range[stage]);
bf1[22 ] = clamp_value(bf0[17 ] - bf0[22 ], stage_range[stage]);
bf1[23 ] = clamp_value(bf0[16 ] - bf0[23 ], stage_range[stage]);
bf1[24 ] = clamp_value(-bf0[24 ] + bf0[31 ], stage_range[stage]);
bf1[25 ] = clamp_value(-bf0[25 ] + bf0[30 ], stage_range[stage]);
bf1[26 ] = clamp_value(-bf0[26 ] + bf0[29 ], stage_range[stage]);
bf1[27 ] = clamp_value(-bf0[27 ] + bf0[28 ], stage_range[stage]);
bf1[28 ] = clamp_value(bf0[27 ] + bf0[28 ], stage_range[stage]);
bf1[29 ] = clamp_value(bf0[26 ] + bf0[29 ], stage_range[stage]);
bf1[30 ] = clamp_value(bf0[25 ] + bf0[30 ], stage_range[stage]);
bf1[31 ] = clamp_value(bf0[24 ] + bf0[31 ], stage_range[stage]);
bf1[32 ] = bf0[32 ];
bf1[33 ] = bf0[33 ];
bf1[34 ] = bf0[34 ];
bf1[35 ] = bf0[35 ];
bf1[36 ] = half_btf(-cospi[16 ], bf0[36 ], cospi[48 ], bf0[59 ], cos_bit);
bf1[37 ] = half_btf(-cospi[16 ], bf0[37 ], cospi[48 ], bf0[58 ], cos_bit);
bf1[38 ] = half_btf(-cospi[16 ], bf0[38 ], cospi[48 ], bf0[57 ], cos_bit);
bf1[39 ] = half_btf(-cospi[16 ], bf0[39 ], cospi[48 ], bf0[56 ], cos_bit);
bf1[40 ] = half_btf(-cospi[48 ], bf0[40 ], -cospi[16 ], bf0[55 ], cos_bit);
bf1[41 ] = half_btf(-cospi[48 ], bf0[41 ], -cospi[16 ], bf0[54 ], cos_bit);
bf1[42 ] = half_btf(-cospi[48 ], bf0[42 ], -cospi[16 ], bf0[53 ], cos_bit);
bf1[43 ] = half_btf(-cospi[48 ], bf0[43 ], -cospi[16 ], bf0[52 ], cos_bit);
bf1[44 ] = bf0[44 ];
bf1[45 ] = bf0[45 ];
bf1[46 ] = bf0[46 ];
bf1[47 ] = bf0[47 ];
bf1[48 ] = bf0[48 ];
bf1[49 ] = bf0[49 ];
bf1[50 ] = bf0[50 ];
bf1[51 ] = bf0[51 ];
bf1[52 ] = half_btf(-cospi[16 ], bf0[43 ], cospi[48 ], bf0[52 ], cos_bit);
bf1[53 ] = half_btf(-cospi[16 ], bf0[42 ], cospi[48 ], bf0[53 ], cos_bit);
bf1[54 ] = half_btf(-cospi[16 ], bf0[41 ], cospi[48 ], bf0[54 ], cos_bit);
bf1[55 ] = half_btf(-cospi[16 ], bf0[40 ], cospi[48 ], bf0[55 ], cos_bit);
bf1[56 ] = half_btf(cospi[48 ], bf0[39 ], cospi[16 ], bf0[56 ], cos_bit);
bf1[57 ] = half_btf(cospi[48 ], bf0[38 ], cospi[16 ], bf0[57 ], cos_bit);
bf1[58 ] = half_btf(cospi[48 ], bf0[37 ], cospi[16 ], bf0[58 ], cos_bit);
bf1[59 ] = half_btf(cospi[48 ], bf0[36 ], cospi[16 ], bf0[59 ], cos_bit);
bf1[60 ] = bf0[60 ];
bf1[61 ] = bf0[61 ];
bf1[62 ] = bf0[62 ];
bf1[63 ] = bf0[63 ];
av1_range_check_buf(stage, input, bf1, size, stage_range[stage]);
// stage 9
stage++;
bf0 = step;
bf1 = output;
bf1[0 ] = clamp_value(bf0[0 ] + bf0[15 ], stage_range[stage]);
bf1[1 ] = clamp_value(bf0[1 ] + bf0[14 ], stage_range[stage]);
bf1[2 ] = clamp_value(bf0[2 ] + bf0[13 ], stage_range[stage]);
bf1[3 ] = clamp_value(bf0[3 ] + bf0[12 ], stage_range[stage]);
bf1[4 ] = clamp_value(bf0[4 ] + bf0[11 ], stage_range[stage]);
bf1[5 ] = clamp_value(bf0[5 ] + bf0[10 ], stage_range[stage]);
bf1[6 ] = clamp_value(bf0[6 ] + bf0[9 ], stage_range[stage]);
bf1[7 ] = clamp_value(bf0[7 ] + bf0[8 ], stage_range[stage]);
bf1[8 ] = clamp_value(bf0[7 ] - bf0[8 ], stage_range[stage]);
bf1[9 ] = clamp_value(bf0[6 ] - bf0[9 ], stage_range[stage]);
bf1[10 ] = clamp_value(bf0[5 ] - bf0[10 ], stage_range[stage]);
bf1[11 ] = clamp_value(bf0[4 ] - bf0[11 ], stage_range[stage]);
bf1[12 ] = clamp_value(bf0[3 ] - bf0[12 ], stage_range[stage]);
bf1[13 ] = clamp_value(bf0[2 ] - bf0[13 ], stage_range[stage]);
bf1[14 ] = clamp_value(bf0[1 ] - bf0[14 ], stage_range[stage]);
bf1[15 ] = clamp_value(bf0[0 ] - bf0[15 ], stage_range[stage]);
bf1[16 ] = bf0[16 ];
bf1[17 ] = bf0[17 ];
bf1[18 ] = bf0[18 ];
bf1[19 ] = bf0[19 ];
bf1[20 ] = half_btf(-cospi[32 ], bf0[20 ], cospi[32 ], bf0[27 ], cos_bit);
bf1[21 ] = half_btf(-cospi[32 ], bf0[21 ], cospi[32 ], bf0[26 ], cos_bit);
bf1[22 ] = half_btf(-cospi[32 ], bf0[22 ], cospi[32 ], bf0[25 ], cos_bit);
bf1[23 ] = half_btf(-cospi[32 ], bf0[23 ], cospi[32 ], bf0[24 ], cos_bit);
bf1[24 ] = half_btf(cospi[32 ], bf0[23 ], cospi[32 ], bf0[24 ], cos_bit);
bf1[25 ] = half_btf(cospi[32 ], bf0[22 ], cospi[32 ], bf0[25 ], cos_bit);
bf1[26 ] = half_btf(cospi[32 ], bf0[21 ], cospi[32 ], bf0[26 ], cos_bit);
bf1[27 ] = half_btf(cospi[32 ], bf0[20 ], cospi[32 ], bf0[27 ], cos_bit);
bf1[28 ] = bf0[28 ];
bf1[29 ] = bf0[29 ];
bf1[30 ] = bf0[30 ];
bf1[31 ] = bf0[31 ];
bf1[32 ] = clamp_value(bf0[32 ] + bf0[47 ], stage_range[stage]);
bf1[33 ] = clamp_value(bf0[33 ] + bf0[46 ], stage_range[stage]);
bf1[34 ] = clamp_value(bf0[34 ] + bf0[45 ], stage_range[stage]);
bf1[35 ] = clamp_value(bf0[35 ] + bf0[44 ], stage_range[stage]);
bf1[36 ] = clamp_value(bf0[36 ] + bf0[43 ], stage_range[stage]);
bf1[37 ] = clamp_value(bf0[37 ] + bf0[42 ], stage_range[stage]);
bf1[38 ] = clamp_value(bf0[38 ] + bf0[41 ], stage_range[stage]);
bf1[39 ] = clamp_value(bf0[39 ] + bf0[40 ], stage_range[stage]);
bf1[40 ] = clamp_value(bf0[39 ] - bf0[40 ], stage_range[stage]);
bf1[41 ] = clamp_value(bf0[38 ] - bf0[41 ], stage_range[stage]);
bf1[42 ] = clamp_value(bf0[37 ] - bf0[42 ], stage_range[stage]);
bf1[43 ] = clamp_value(bf0[36 ] - bf0[43 ], stage_range[stage]);
bf1[44 ] = clamp_value(bf0[35 ] - bf0[44 ], stage_range[stage]);
bf1[45 ] = clamp_value(bf0[34 ] - bf0[45 ], stage_range[stage]);
bf1[46 ] = clamp_value(bf0[33 ] - bf0[46 ], stage_range[stage]);
bf1[47 ] = clamp_value(bf0[32 ] - bf0[47 ], stage_range[stage]);
bf1[48 ] = clamp_value(-bf0[48 ] + bf0[63 ], stage_range[stage]);
bf1[49 ] = clamp_value(-bf0[49 ] + bf0[62 ], stage_range[stage]);
bf1[50 ] = clamp_value(-bf0[50 ] + bf0[61 ], stage_range[stage]);
bf1[51 ] = clamp_value(-bf0[51 ] + bf0[60 ], stage_range[stage]);
bf1[52 ] = clamp_value(-bf0[52 ] + bf0[59 ], stage_range[stage]);
bf1[53 ] = clamp_value(-bf0[53 ] + bf0[58 ], stage_range[stage]);
bf1[54 ] = clamp_value(-bf0[54 ] + bf0[57 ], stage_range[stage]);
bf1[55 ] = clamp_value(-bf0[55 ] + bf0[56 ], stage_range[stage]);
bf1[56 ] = clamp_value(bf0[55 ] + bf0[56 ], stage_range[stage]);
bf1[57 ] = clamp_value(bf0[54 ] + bf0[57 ], stage_range[stage]);
bf1[58 ] = clamp_value(bf0[53 ] + bf0[58 ], stage_range[stage]);
bf1[59 ] = clamp_value(bf0[52 ] + bf0[59 ], stage_range[stage]);
bf1[60 ] = clamp_value(bf0[51 ] + bf0[60 ], stage_range[stage]);
bf1[61 ] = clamp_value(bf0[50 ] + bf0[61 ], stage_range[stage]);
bf1[62 ] = clamp_value(bf0[49 ] + bf0[62 ], stage_range[stage]);
bf1[63 ] = clamp_value(bf0[48 ] + bf0[63 ], stage_range[stage]);
av1_range_check_buf(stage, input, bf1, size, stage_range[stage]);
// stage 10
stage++;
bf0 = output;
bf1 = step;
bf1[0 ] = clamp_value(bf0[0 ] + bf0[31 ], stage_range[stage]);
bf1[1 ] = clamp_value(bf0[1 ] + bf0[30 ], stage_range[stage]);
bf1[2 ] = clamp_value(bf0[2 ] + bf0[29 ], stage_range[stage]);
bf1[3 ] = clamp_value(bf0[3 ] + bf0[28 ], stage_range[stage]);
bf1[4 ] = clamp_value(bf0[4 ] + bf0[27 ], stage_range[stage]);
bf1[5 ] = clamp_value(bf0[5 ] + bf0[26 ], stage_range[stage]);
bf1[6 ] = clamp_value(bf0[6 ] + bf0[25 ], stage_range[stage]);
bf1[7 ] = clamp_value(bf0[7 ] + bf0[24 ], stage_range[stage]);
bf1[8 ] = clamp_value(bf0[8 ] + bf0[23 ], stage_range[stage]);
bf1[9 ] = clamp_value(bf0[9 ] + bf0[22 ], stage_range[stage]);
bf1[10 ] = clamp_value(bf0[10 ] + bf0[21 ], stage_range[stage]);
bf1[11 ] = clamp_value(bf0[11 ] + bf0[20 ], stage_range[stage]);
bf1[12 ] = clamp_value(bf0[12 ] + bf0[19 ], stage_range[stage]);
bf1[13 ] = clamp_value(bf0[13 ] + bf0[18 ], stage_range[stage]);
bf1[14 ] = clamp_value(bf0[14 ] + bf0[17 ], stage_range[stage]);
bf1[15 ] = clamp_value(bf0[15 ] + bf0[16 ], stage_range[stage]);
bf1[16 ] = clamp_value(bf0[15 ] - bf0[16 ], stage_range[stage]);
bf1[17 ] = clamp_value(bf0[14 ] - bf0[17 ], stage_range[stage]);
bf1[18 ] = clamp_value(bf0[13 ] - bf0[18 ], stage_range[stage]);
bf1[19 ] = clamp_value(bf0[12 ] - bf0[19 ], stage_range[stage]);
bf1[20 ] = clamp_value(bf0[11 ] - bf0[20 ], stage_range[stage]);
bf1[21 ] = clamp_value(bf0[10 ] - bf0[21 ], stage_range[stage]);
bf1[22 ] = clamp_value(bf0[9 ] - bf0[22 ], stage_range[stage]);
bf1[23 ] = clamp_value(bf0[8 ] - bf0[23 ], stage_range[stage]);
bf1[24 ] = clamp_value(bf0[7 ] - bf0[24 ], stage_range[stage]);
bf1[25 ] = clamp_value(bf0[6 ] - bf0[25 ], stage_range[stage]);
bf1[26 ] = clamp_value(bf0[5 ] - bf0[26 ], stage_range[stage]);
bf1[27 ] = clamp_value(bf0[4 ] - bf0[27 ], stage_range[stage]);
bf1[28 ] = clamp_value(bf0[3 ] - bf0[28 ], stage_range[stage]);
bf1[29 ] = clamp_value(bf0[2 ] - bf0[29 ], stage_range[stage]);
bf1[30 ] = clamp_value(bf0[1 ] - bf0[30 ], stage_range[stage]);
bf1[31 ] = clamp_value(bf0[0 ] - bf0[31 ], stage_range[stage]);
bf1[32 ] = bf0[32 ];
bf1[33 ] = bf0[33 ];
bf1[34 ] = bf0[34 ];
bf1[35 ] = bf0[35 ];
bf1[36 ] = bf0[36 ];
bf1[37 ] = bf0[37 ];
bf1[38 ] = bf0[38 ];
bf1[39 ] = bf0[39 ];
bf1[40 ] = half_btf(-cospi[32 ], bf0[40 ], cospi[32 ], bf0[55 ], cos_bit);
bf1[41 ] = half_btf(-cospi[32 ], bf0[41 ], cospi[32 ], bf0[54 ], cos_bit);
bf1[42 ] = half_btf(-cospi[32 ], bf0[42 ], cospi[32 ], bf0[53 ], cos_bit);
bf1[43 ] = half_btf(-cospi[32 ], bf0[43 ], cospi[32 ], bf0[52 ], cos_bit);
bf1[44 ] = half_btf(-cospi[32 ], bf0[44 ], cospi[32 ], bf0[51 ], cos_bit);
bf1[45 ] = half_btf(-cospi[32 ], bf0[45 ], cospi[32 ], bf0[50 ], cos_bit);
bf1[46 ] = half_btf(-cospi[32 ], bf0[46 ], cospi[32 ], bf0[49 ], cos_bit);
bf1[47 ] = half_btf(-cospi[32 ], bf0[47 ], cospi[32 ], bf0[48 ], cos_bit);
bf1[48 ] = half_btf(cospi[32 ], bf0[47 ], cospi[32 ], bf0[48 ], cos_bit);
bf1[49 ] = half_btf(cospi[32 ], bf0[46 ], cospi[32 ], bf0[49 ], cos_bit);
bf1[50 ] = half_btf(cospi[32 ], bf0[45 ], cospi[32 ], bf0[50 ], cos_bit);
bf1[51 ] = half_btf(cospi[32 ], bf0[44 ], cospi[32 ], bf0[51 ], cos_bit);
bf1[52 ] = half_btf(cospi[32 ], bf0[43 ], cospi[32 ], bf0[52 ], cos_bit);
bf1[53 ] = half_btf(cospi[32 ], bf0[42 ], cospi[32 ], bf0[53 ], cos_bit);
bf1[54 ] = half_btf(cospi[32 ], bf0[41 ], cospi[32 ], bf0[54 ], cos_bit);
bf1[55 ] = half_btf(cospi[32 ], bf0[40 ], cospi[32 ], bf0[55 ], cos_bit);
bf1[56 ] = bf0[56 ];
bf1[57 ] = bf0[57 ];
bf1[58 ] = bf0[58 ];
bf1[59 ] = bf0[59 ];
bf1[60 ] = bf0[60 ];
bf1[61 ] = bf0[61 ];
bf1[62 ] = bf0[62 ];
bf1[63 ] = bf0[63 ];
av1_range_check_buf(stage, input, bf1, size, stage_range[stage]);
// stage 11
stage++;
bf0 = step;
bf1 = output;
bf1[0 ] = clamp_value(bf0[0 ] + bf0[63 ], stage_range[stage]);
bf1[1 ] = clamp_value(bf0[1 ] + bf0[62 ], stage_range[stage]);
bf1[2 ] = clamp_value(bf0[2 ] + bf0[61 ], stage_range[stage]);
bf1[3 ] = clamp_value(bf0[3 ] + bf0[60 ], stage_range[stage]);
bf1[4 ] = clamp_value(bf0[4 ] + bf0[59 ], stage_range[stage]);
bf1[5 ] = clamp_value(bf0[5 ] + bf0[58 ], stage_range[stage]);
bf1[6 ] = clamp_value(bf0[6 ] + bf0[57 ], stage_range[stage]);
bf1[7 ] = clamp_value(bf0[7 ] + bf0[56 ], stage_range[stage]);
bf1[8 ] = clamp_value(bf0[8 ] + bf0[55 ], stage_range[stage]);
bf1[9 ] = clamp_value(bf0[9 ] + bf0[54 ], stage_range[stage]);
bf1[10 ] = clamp_value(bf0[10 ] + bf0[53 ], stage_range[stage]);
bf1[11 ] = clamp_value(bf0[11 ] + bf0[52 ], stage_range[stage]);
bf1[12 ] = clamp_value(bf0[12 ] + bf0[51 ], stage_range[stage]);
bf1[13 ] = clamp_value(bf0[13 ] + bf0[50 ], stage_range[stage]);
bf1[14 ] = clamp_value(bf0[14 ] + bf0[49 ], stage_range[stage]);
bf1[15 ] = clamp_value(bf0[15 ] + bf0[48 ], stage_range[stage]);
bf1[16 ] = clamp_value(bf0[16 ] + bf0[47 ], stage_range[stage]);
bf1[17 ] = clamp_value(bf0[17 ] + bf0[46 ], stage_range[stage]);
bf1[18 ] = clamp_value(bf0[18 ] + bf0[45 ], stage_range[stage]);
bf1[19 ] = clamp_value(bf0[19 ] + bf0[44 ], stage_range[stage]);
bf1[20 ] = clamp_value(bf0[20 ] + bf0[43 ], stage_range[stage]);
bf1[21 ] = clamp_value(bf0[21 ] + bf0[42 ], stage_range[stage]);
bf1[22 ] = clamp_value(bf0[22 ] + bf0[41 ], stage_range[stage]);
bf1[23 ] = clamp_value(bf0[23 ] + bf0[40 ], stage_range[stage]);
bf1[24 ] = clamp_value(bf0[24 ] + bf0[39 ], stage_range[stage]);
bf1[25 ] = clamp_value(bf0[25 ] + bf0[38 ], stage_range[stage]);
bf1[26 ] = clamp_value(bf0[26 ] + bf0[37 ], stage_range[stage]);
bf1[27 ] = clamp_value(bf0[27 ] + bf0[36 ], stage_range[stage]);
bf1[28 ] = clamp_value(bf0[28 ] + bf0[35 ], stage_range[stage]);
bf1[29 ] = clamp_value(bf0[29 ] + bf0[34 ], stage_range[stage]);
bf1[30 ] = clamp_value(bf0[30 ] + bf0[33 ], stage_range[stage]);
bf1[31 ] = clamp_value(bf0[31 ] + bf0[32 ], stage_range[stage]);
bf1[32 ] = clamp_value(bf0[31 ] - bf0[32 ], stage_range[stage]);
bf1[33 ] = clamp_value(bf0[30 ] - bf0[33 ], stage_range[stage]);
bf1[34 ] = clamp_value(bf0[29 ] - bf0[34 ], stage_range[stage]);
bf1[35 ] = clamp_value(bf0[28 ] - bf0[35 ], stage_range[stage]);
bf1[36 ] = clamp_value(bf0[27 ] - bf0[36 ], stage_range[stage]);
bf1[37 ] = clamp_value(bf0[26 ] - bf0[37 ], stage_range[stage]);
bf1[38 ] = clamp_value(bf0[25 ] - bf0[38 ], stage_range[stage]);
bf1[39 ] = clamp_value(bf0[24 ] - bf0[39 ], stage_range[stage]);
bf1[40 ] = clamp_value(bf0[23 ] - bf0[40 ], stage_range[stage]);
bf1[41 ] = clamp_value(bf0[22 ] - bf0[41 ], stage_range[stage]);
bf1[42 ] = clamp_value(bf0[21 ] - bf0[42 ], stage_range[stage]);
bf1[43 ] = clamp_value(bf0[20 ] - bf0[43 ], stage_range[stage]);
bf1[44 ] = clamp_value(bf0[19 ] - bf0[44 ], stage_range[stage]);
bf1[45 ] = clamp_value(bf0[18 ] - bf0[45 ], stage_range[stage]);
bf1[46 ] = clamp_value(bf0[17 ] - bf0[46 ], stage_range[stage]);
bf1[47 ] = clamp_value(bf0[16 ] - bf0[47 ], stage_range[stage]);
bf1[48 ] = clamp_value(bf0[15 ] - bf0[48 ], stage_range[stage]);
bf1[49 ] = clamp_value(bf0[14 ] - bf0[49 ], stage_range[stage]);
bf1[50 ] = clamp_value(bf0[13 ] - bf0[50 ], stage_range[stage]);
bf1[51 ] = clamp_value(bf0[12 ] - bf0[51 ], stage_range[stage]);
bf1[52 ] = clamp_value(bf0[11 ] - bf0[52 ], stage_range[stage]);
bf1[53 ] = clamp_value(bf0[10 ] - bf0[53 ], stage_range[stage]);
bf1[54 ] = clamp_value(bf0[9 ] - bf0[54 ], stage_range[stage]);
bf1[55 ] = clamp_value(bf0[8 ] - bf0[55 ], stage_range[stage]);
bf1[56 ] = clamp_value(bf0[7 ] - bf0[56 ], stage_range[stage]);
bf1[57 ] = clamp_value(bf0[6 ] - bf0[57 ], stage_range[stage]);
bf1[58 ] = clamp_value(bf0[5 ] - bf0[58 ], stage_range[stage]);
bf1[59 ] = clamp_value(bf0[4 ] - bf0[59 ], stage_range[stage]);
bf1[60 ] = clamp_value(bf0[3 ] - bf0[60 ], stage_range[stage]);
bf1[61 ] = clamp_value(bf0[2 ] - bf0[61 ], stage_range[stage]);
bf1[62 ] = clamp_value(bf0[1 ] - bf0[62 ], stage_range[stage]);
bf1[63 ] = clamp_value(bf0[0 ] - bf0[63 ], stage_range[stage]);
}
Messung V0.5 in Prozent C=83 H=93 G=87
¤ Dauer der Verarbeitung: 0.35 Sekunden
(vorverarbeitet am 2026-06-07)
¤
*© Formatika GbR, Deutschland