1e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard/* 2e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard ** Copyright 2003-2010, VisualOn, Inc. 3e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard ** 4e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard ** Licensed under the Apache License, Version 2.0 (the "License"); 5e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard ** you may not use this file except in compliance with the License. 6e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard ** You may obtain a copy of the License at 7e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard ** 8e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard ** http://www.apache.org/licenses/LICENSE-2.0 9e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard ** 10e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard ** Unless required by applicable law or agreed to in writing, software 11e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard ** distributed under the License is distributed on an "AS IS" BASIS, 12e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard ** See the License for the specific language governing permissions and 14e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard ** limitations under the License. 15e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard */ 16e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard 17e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard/*********************************************************************** 18e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard* File: q_pulse.c * 19e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard* * 20e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard* Description: Coding and decoding of algebraic codebook * 21e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard* * 22e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard************************************************************************/ 23e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard 24e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard#include <stdio.h> 25e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard#include "typedef.h" 26e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard#include "basic_op.h" 27e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard#include "q_pulse.h" 28e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard 29e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard#define NB_POS 16 /* pos in track, mask for sign bit */ 30e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard 31e2e838afcf03e603a41a0455846eaf9614537c16Mans RullgardWord32 quant_1p_N1( /* (o) return N+1 bits */ 325d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen Word16 pos, /* (i) position of the pulse */ 335d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen Word16 N) /* (i) number of bits for position */ 34e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard{ 355d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen Word16 mask; 365d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen Word32 index; 375d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen 385d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen mask = (1 << N) - 1; /* mask = ((1<<N)-1); */ 395d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen /*-------------------------------------------------------* 405d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen * Quantization of 1 pulse with N+1 bits: * 415d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen *-------------------------------------------------------*/ 425d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen index = L_deposit_l((Word16) (pos & mask)); 435d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen if ((pos & NB_POS) != 0) 445d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen { 455d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen index = vo_L_add(index, L_deposit_l(1 << N)); /* index += 1 << N; */ 465d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen } 475d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen return (index); 48e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard} 49e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard 50e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard 51e2e838afcf03e603a41a0455846eaf9614537c16Mans RullgardWord32 quant_2p_2N1( /* (o) return (2*N)+1 bits */ 525d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen Word16 pos1, /* (i) position of the pulse 1 */ 535d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen Word16 pos2, /* (i) position of the pulse 2 */ 545d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen Word16 N) /* (i) number of bits for position */ 55e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard{ 565d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen Word16 mask, tmp; 575d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen Word32 index; 585d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen mask = (1 << N) - 1; /* mask = ((1<<N)-1); */ 595d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen /*-------------------------------------------------------* 605d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen * Quantization of 2 pulses with 2*N+1 bits: * 615d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen *-------------------------------------------------------*/ 625d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen if (((pos2 ^ pos1) & NB_POS) == 0) 635d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen { 645d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen /* sign of 1st pulse == sign of 2th pulse */ 655d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen if(pos1 <= pos2) /* ((pos1 - pos2) <= 0) */ 665d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen { 675d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen /* index = ((pos1 & mask) << N) + (pos2 & mask); */ 685d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen index = L_deposit_l(add1((((Word16) (pos1 & mask)) << N), ((Word16) (pos2 & mask)))); 695d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen } else 705d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen { 715d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen /* ((pos2 & mask) << N) + (pos1 & mask); */ 725d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen index = L_deposit_l(add1((((Word16) (pos2 & mask)) << N), ((Word16) (pos1 & mask)))); 735d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen } 745d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen if ((pos1 & NB_POS) != 0) 755d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen { 765d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen tmp = (N << 1); 775d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen index = vo_L_add(index, (1L << tmp)); /* index += 1 << (2*N); */ 785d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen } 795d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen } else 805d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen { 815d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen /* sign of 1st pulse != sign of 2th pulse */ 825d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen if (vo_sub((Word16) (pos1 & mask), (Word16) (pos2 & mask)) <= 0) 835d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen { 845d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen /* index = ((pos2 & mask) << N) + (pos1 & mask); */ 855d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen index = L_deposit_l(add1((((Word16) (pos2 & mask)) << N), ((Word16) (pos1 & mask)))); 865d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen if ((pos2 & NB_POS) != 0) 875d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen { 885d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen tmp = (N << 1); /* index += 1 << (2*N); */ 895d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen index = vo_L_add(index, (1L << tmp)); 905d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen } 915d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen } else 925d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen { 935d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen /* index = ((pos1 & mask) << N) + (pos2 & mask); */ 945d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen index = L_deposit_l(add1((((Word16) (pos1 & mask)) << N), ((Word16) (pos2 & mask)))); 955d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen if ((pos1 & NB_POS) != 0) 965d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen { 975d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen tmp = (N << 1); 985d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen index = vo_L_add(index, (1 << tmp)); /* index += 1 << (2*N); */ 995d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen } 1005d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen } 1015d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen } 1025d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen return (index); 103e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard} 104e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard 105e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard 106e2e838afcf03e603a41a0455846eaf9614537c16Mans RullgardWord32 quant_3p_3N1( /* (o) return (3*N)+1 bits */ 1075d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen Word16 pos1, /* (i) position of the pulse 1 */ 1085d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen Word16 pos2, /* (i) position of the pulse 2 */ 1095d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen Word16 pos3, /* (i) position of the pulse 3 */ 1105d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen Word16 N) /* (i) number of bits for position */ 111e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard{ 1125d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen Word16 nb_pos; 1135d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen Word32 index; 1145d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen 1155d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen nb_pos =(1 <<(N - 1)); /* nb_pos = (1<<(N-1)); */ 1165d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen /*-------------------------------------------------------* 1175d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen * Quantization of 3 pulses with 3*N+1 bits: * 1185d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen *-------------------------------------------------------*/ 1195d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen if (((pos1 ^ pos2) & nb_pos) == 0) 1205d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen { 1215d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen index = quant_2p_2N1(pos1, pos2, sub(N, 1)); /* index = quant_2p_2N1(pos1, pos2, (N-1)); */ 1225d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen /* index += (pos1 & nb_pos) << N; */ 1235d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen index = vo_L_add(index, (L_deposit_l((Word16) (pos1 & nb_pos)) << N)); 1245d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen /* index += quant_1p_N1(pos3, N) << (2*N); */ 1255d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen index = vo_L_add(index, (quant_1p_N1(pos3, N)<<(N << 1))); 1265d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen 1275d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen } else if (((pos1 ^ pos3) & nb_pos) == 0) 1285d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen { 1295d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen index = quant_2p_2N1(pos1, pos3, sub(N, 1)); /* index = quant_2p_2N1(pos1, pos3, (N-1)); */ 1305d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen index = vo_L_add(index, (L_deposit_l((Word16) (pos1 & nb_pos)) << N)); 1315d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen /* index += (pos1 & nb_pos) << N; */ 1325d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen index = vo_L_add(index, (quant_1p_N1(pos2, N) << (N << 1))); 1335d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen /* index += quant_1p_N1(pos2, N) << 1345d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen * (2*N); */ 1355d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen } else 1365d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen { 1375d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen index = quant_2p_2N1(pos2, pos3, (N - 1)); /* index = quant_2p_2N1(pos2, pos3, (N-1)); */ 1385d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen /* index += (pos2 & nb_pos) << N; */ 1395d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen index = vo_L_add(index, (L_deposit_l((Word16) (pos2 & nb_pos)) << N)); 1405d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen /* index += quant_1p_N1(pos1, N) << (2*N); */ 1415d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen index = vo_L_add(index, (quant_1p_N1(pos1, N) << (N << 1))); 1425d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen } 1435d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen return (index); 144e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard} 145e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard 146e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard 147e2e838afcf03e603a41a0455846eaf9614537c16Mans RullgardWord32 quant_4p_4N1( /* (o) return (4*N)+1 bits */ 1485d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen Word16 pos1, /* (i) position of the pulse 1 */ 1495d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen Word16 pos2, /* (i) position of the pulse 2 */ 1505d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen Word16 pos3, /* (i) position of the pulse 3 */ 1515d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen Word16 pos4, /* (i) position of the pulse 4 */ 1525d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen Word16 N) /* (i) number of bits for position */ 153e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard{ 1545d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen Word16 nb_pos; 1555d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen Word32 index; 1565d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen 1575d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen nb_pos = 1 << (N - 1); /* nb_pos = (1<<(N-1)); */ 1585d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen /*-------------------------------------------------------* 1595d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen * Quantization of 4 pulses with 4*N+1 bits: * 1605d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen *-------------------------------------------------------*/ 1615d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen if (((pos1 ^ pos2) & nb_pos) == 0) 1625d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen { 1635d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen index = quant_2p_2N1(pos1, pos2, sub(N, 1)); /* index = quant_2p_2N1(pos1, pos2, (N-1)); */ 1645d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen /* index += (pos1 & nb_pos) << N; */ 1655d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen index = vo_L_add(index, (L_deposit_l((Word16) (pos1 & nb_pos)) << N)); 1665d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen /* index += quant_2p_2N1(pos3, pos4, N) << (2*N); */ 1675d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen index = vo_L_add(index, (quant_2p_2N1(pos3, pos4, N) << (N << 1))); 1685d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen } else if (((pos1 ^ pos3) & nb_pos) == 0) 1695d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen { 1705d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen index = quant_2p_2N1(pos1, pos3, (N - 1)); 1715d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen /* index += (pos1 & nb_pos) << N; */ 1725d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen index = vo_L_add(index, (L_deposit_l((Word16) (pos1 & nb_pos)) << N)); 1735d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen /* index += quant_2p_2N1(pos2, pos4, N) << (2*N); */ 1745d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen index = vo_L_add(index, (quant_2p_2N1(pos2, pos4, N) << (N << 1))); 1755d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen } else 1765d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen { 1775d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen index = quant_2p_2N1(pos2, pos3, (N - 1)); 1785d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen /* index += (pos2 & nb_pos) << N; */ 1795d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen index = vo_L_add(index, (L_deposit_l((Word16) (pos2 & nb_pos)) << N)); 1805d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen /* index += quant_2p_2N1(pos1, pos4, N) << (2*N); */ 1815d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen index = vo_L_add(index, (quant_2p_2N1(pos1, pos4, N) << (N << 1))); 1825d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen } 1835d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen return (index); 184e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard} 185e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard 186e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard 187e2e838afcf03e603a41a0455846eaf9614537c16Mans RullgardWord32 quant_4p_4N( /* (o) return 4*N bits */ 1885d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen Word16 pos[], /* (i) position of the pulse 1..4 */ 1895d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen Word16 N) /* (i) number of bits for position */ 190e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard{ 1915d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen Word16 nb_pos, mask __unused, n_1, tmp; 1925d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen Word16 posA[4], posB[4]; 1935d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen Word32 i, j, k, index; 1945d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen 1955d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen n_1 = (Word16) (N - 1); 1965d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen nb_pos = (1 << n_1); /* nb_pos = (1<<n_1); */ 1975d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen mask = vo_sub((1 << N), 1); /* mask = ((1<<N)-1); */ 1985d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen 1995d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen i = 0; 2005d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen j = 0; 2015d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen for (k = 0; k < 4; k++) 2025d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen { 2035d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen if ((pos[k] & nb_pos) == 0) 2045d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen { 2055d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen posA[i++] = pos[k]; 2065d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen } else 2075d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen { 2085d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen posB[j++] = pos[k]; 2095d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen } 2105d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen } 2115d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen 2125d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen switch (i) 2135d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen { 2145d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen case 0: 2155d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen tmp = vo_sub((N << 2), 3); /* index = 1 << ((4*N)-3); */ 2165d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen index = (1L << tmp); 2175d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen /* index += quant_4p_4N1(posB[0], posB[1], posB[2], posB[3], n_1); */ 2185d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen index = vo_L_add(index, quant_4p_4N1(posB[0], posB[1], posB[2], posB[3], n_1)); 2195d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen break; 2205d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen case 1: 2215d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen /* index = quant_1p_N1(posA[0], n_1) << ((3*n_1)+1); */ 2225d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen tmp = add1((Word16)((vo_L_mult(3, n_1) >> 1)), 1); 2235d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen index = L_shl(quant_1p_N1(posA[0], n_1), tmp); 2245d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen /* index += quant_3p_3N1(posB[0], posB[1], posB[2], n_1); */ 2255d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen index = vo_L_add(index, quant_3p_3N1(posB[0], posB[1], posB[2], n_1)); 2265d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen break; 2275d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen case 2: 2285d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen tmp = ((n_1 << 1) + 1); /* index = quant_2p_2N1(posA[0], posA[1], n_1) << ((2*n_1)+1); */ 2295d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen index = L_shl(quant_2p_2N1(posA[0], posA[1], n_1), tmp); 2305d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen /* index += quant_2p_2N1(posB[0], posB[1], n_1); */ 2315d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen index = vo_L_add(index, quant_2p_2N1(posB[0], posB[1], n_1)); 2325d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen break; 2335d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen case 3: 2345d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen /* index = quant_3p_3N1(posA[0], posA[1], posA[2], n_1) << N; */ 2355d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen index = L_shl(quant_3p_3N1(posA[0], posA[1], posA[2], n_1), N); 2365d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen index = vo_L_add(index, quant_1p_N1(posB[0], n_1)); /* index += quant_1p_N1(posB[0], n_1); */ 2375d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen break; 2385d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen case 4: 2395d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen index = quant_4p_4N1(posA[0], posA[1], posA[2], posA[3], n_1); 2405d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen break; 2415d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen default: 2425d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen index = 0; 2435d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen fprintf(stderr, "Error in function quant_4p_4N\n"); 2445d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen } 2455d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen tmp = ((N << 2) - 2); /* index += (i & 3) << ((4*N)-2); */ 2465d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen index = vo_L_add(index, L_shl((L_deposit_l(i) & (3L)), tmp)); 2475d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen 2485d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen return (index); 249e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard} 250e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard 251e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard 252e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard 253e2e838afcf03e603a41a0455846eaf9614537c16Mans RullgardWord32 quant_5p_5N( /* (o) return 5*N bits */ 2545d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen Word16 pos[], /* (i) position of the pulse 1..5 */ 2555d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen Word16 N) /* (i) number of bits for position */ 256e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard{ 2575d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen Word16 nb_pos, n_1, tmp; 2585d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen Word16 posA[5], posB[5]; 2595d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen Word32 i, j, k, index, tmp2; 2605d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen 2615d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen n_1 = (Word16) (N - 1); 2625d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen nb_pos = (1 << n_1); /* nb_pos = (1<<n_1); */ 2635d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen 2645d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen i = 0; 2655d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen j = 0; 2665d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen for (k = 0; k < 5; k++) 2675d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen { 2685d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen if ((pos[k] & nb_pos) == 0) 2695d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen { 2705d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen posA[i++] = pos[k]; 2715d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen } else 2725d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen { 2735d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen posB[j++] = pos[k]; 2745d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen } 2755d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen } 2765d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen 2775d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen switch (i) 2785d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen { 2795d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen case 0: 2805d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen tmp = vo_sub((Word16)((vo_L_mult(5, N) >> 1)), 1); /* ((5*N)-1)) */ 2815d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen index = L_shl(1L, tmp); /* index = 1 << ((5*N)-1); */ 2825d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen tmp = add1((N << 1), 1); /* index += quant_3p_3N1(posB[0], posB[1], posB[2], n_1) << ((2*N)+1);*/ 2835d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen tmp2 = L_shl(quant_3p_3N1(posB[0], posB[1], posB[2], n_1), tmp); 2845d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen index = vo_L_add(index, tmp2); 2855d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen index = vo_L_add(index, quant_2p_2N1(posB[3], posB[4], N)); /* index += quant_2p_2N1(posB[3], posB[4], N); */ 2865d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen break; 2875d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen case 1: 2885d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen tmp = vo_sub((Word16)((vo_L_mult(5, N) >> 1)), 1); /* index = 1 << ((5*N)-1); */ 2895d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen index = L_shl(1L, tmp); 2905d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen tmp = add1((N << 1), 1); /* index += quant_3p_3N1(posB[0], posB[1], posB[2], n_1) <<((2*N)+1); */ 2915d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen tmp2 = L_shl(quant_3p_3N1(posB[0], posB[1], posB[2], n_1), tmp); 2925d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen index = vo_L_add(index, tmp2); 2935d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen index = vo_L_add(index, quant_2p_2N1(posB[3], posA[0], N)); /* index += quant_2p_2N1(posB[3], posA[0], N); */ 2945d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen break; 2955d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen case 2: 2965d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen tmp = vo_sub((Word16)((vo_L_mult(5, N) >> 1)), 1); /* ((5*N)-1)) */ 2975d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen index = L_shl(1L, tmp); /* index = 1 << ((5*N)-1); */ 2985d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen tmp = add1((N << 1), 1); /* index += quant_3p_3N1(posB[0], posB[1], posB[2], n_1) << ((2*N)+1); */ 2995d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen tmp2 = L_shl(quant_3p_3N1(posB[0], posB[1], posB[2], n_1), tmp); 3005d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen index = vo_L_add(index, tmp2); 3015d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen index = vo_L_add(index, quant_2p_2N1(posA[0], posA[1], N)); /* index += quant_2p_2N1(posA[0], posA[1], N); */ 3025d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen break; 3035d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen case 3: 3045d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen tmp = add1((N << 1), 1); /* index = quant_3p_3N1(posA[0], posA[1], posA[2], n_1) << ((2*N)+1); */ 3055d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen index = L_shl(quant_3p_3N1(posA[0], posA[1], posA[2], n_1), tmp); 3065d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen index = vo_L_add(index, quant_2p_2N1(posB[0], posB[1], N)); /* index += quant_2p_2N1(posB[0], posB[1], N); */ 3075d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen break; 3085d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen case 4: 3095d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen tmp = add1((N << 1), 1); /* index = quant_3p_3N1(posA[0], posA[1], posA[2], n_1) << ((2*N)+1); */ 3105d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen index = L_shl(quant_3p_3N1(posA[0], posA[1], posA[2], n_1), tmp); 3115d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen index = vo_L_add(index, quant_2p_2N1(posA[3], posB[0], N)); /* index += quant_2p_2N1(posA[3], posB[0], N); */ 3125d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen break; 3135d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen case 5: 3145d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen tmp = add1((N << 1), 1); /* index = quant_3p_3N1(posA[0], posA[1], posA[2], n_1) << ((2*N)+1); */ 3155d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen index = L_shl(quant_3p_3N1(posA[0], posA[1], posA[2], n_1), tmp); 3165d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen index = vo_L_add(index, quant_2p_2N1(posA[3], posA[4], N)); /* index += quant_2p_2N1(posA[3], posA[4], N); */ 3175d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen break; 3185d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen default: 3195d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen index = 0; 3205d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen fprintf(stderr, "Error in function quant_5p_5N\n"); 3215d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen } 3225d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen 3235d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen return (index); 324e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard} 325e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard 326e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard 327e2e838afcf03e603a41a0455846eaf9614537c16Mans RullgardWord32 quant_6p_6N_2( /* (o) return (6*N)-2 bits */ 3285d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen Word16 pos[], /* (i) position of the pulse 1..6 */ 3295d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen Word16 N) /* (i) number of bits for position */ 330e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard{ 3315d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen Word16 nb_pos, n_1; 3325d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen Word16 posA[6], posB[6]; 3335d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen Word32 i, j, k, index; 3345d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen 3355d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen /* !! N and n_1 are constants -> it doesn't need to be operated by Basic Operators */ 3365d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen n_1 = (Word16) (N - 1); 3375d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen nb_pos = (1 << n_1); /* nb_pos = (1<<n_1); */ 3385d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen 3395d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen i = 0; 3405d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen j = 0; 3415d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen for (k = 0; k < 6; k++) 3425d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen { 3435d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen if ((pos[k] & nb_pos) == 0) 3445d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen { 3455d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen posA[i++] = pos[k]; 3465d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen } else 3475d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen { 3485d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen posB[j++] = pos[k]; 3495d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen } 3505d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen } 3515d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen 3525d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen switch (i) 3535d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen { 3545d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen case 0: 3555d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen index = (1 << (Word16) (6 * N - 5)); /* index = 1 << ((6*N)-5); */ 3565d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen index = vo_L_add(index, (quant_5p_5N(posB, n_1) << N)); /* index += quant_5p_5N(posB, n_1) << N; */ 3575d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen index = vo_L_add(index, quant_1p_N1(posB[5], n_1)); /* index += quant_1p_N1(posB[5], n_1); */ 3585d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen break; 3595d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen case 1: 3605d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen index = (1L << (Word16) (6 * N - 5)); /* index = 1 << ((6*N)-5); */ 3615d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen index = vo_L_add(index, (quant_5p_5N(posB, n_1) << N)); /* index += quant_5p_5N(posB, n_1) << N; */ 3625d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen index = vo_L_add(index, quant_1p_N1(posA[0], n_1)); /* index += quant_1p_N1(posA[0], n_1); */ 3635d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen break; 3645d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen case 2: 3655d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen index = (1L << (Word16) (6 * N - 5)); /* index = 1 << ((6*N)-5); */ 3665d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen /* index += quant_4p_4N(posB, n_1) << ((2*n_1)+1); */ 3675d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen index = vo_L_add(index, (quant_4p_4N(posB, n_1) << (Word16) (2 * n_1 + 1))); 3685d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen index = vo_L_add(index, quant_2p_2N1(posA[0], posA[1], n_1)); /* index += quant_2p_2N1(posA[0], posA[1], n_1); */ 3695d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen break; 3705d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen case 3: 3715d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen index = (quant_3p_3N1(posA[0], posA[1], posA[2], n_1) << (Word16) (3 * n_1 + 1)); 3725d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen /* index = quant_3p_3N1(posA[0], posA[1], posA[2], n_1) << ((3*n_1)+1); */ 3735d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen index =vo_L_add(index, quant_3p_3N1(posB[0], posB[1], posB[2], n_1)); 3745d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen /* index += quant_3p_3N1(posB[0], posB[1], posB[2], n_1); */ 3755d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen break; 3765d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen case 4: 3775d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen i = 2; 3785d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen index = (quant_4p_4N(posA, n_1) << (Word16) (2 * n_1 + 1)); /* index = quant_4p_4N(posA, n_1) << ((2*n_1)+1); */ 3795d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen index = vo_L_add(index, quant_2p_2N1(posB[0], posB[1], n_1)); /* index += quant_2p_2N1(posB[0], posB[1], n_1); */ 3805d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen break; 3815d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen case 5: 3825d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen i = 1; 3835d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen index = (quant_5p_5N(posA, n_1) << N); /* index = quant_5p_5N(posA, n_1) << N; */ 3845d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen index = vo_L_add(index, quant_1p_N1(posB[0], n_1)); /* index += quant_1p_N1(posB[0], n_1); */ 3855d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen break; 3865d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen case 6: 3875d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen i = 0; 3885d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen index = (quant_5p_5N(posA, n_1) << N); /* index = quant_5p_5N(posA, n_1) << N; */ 3895d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen index = vo_L_add(index, quant_1p_N1(posA[5], n_1)); /* index += quant_1p_N1(posA[5], n_1); */ 3905d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen break; 3915d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen default: 3925d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen index = 0; 3935d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen fprintf(stderr, "Error in function quant_6p_6N_2\n"); 3945d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen } 3955d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen index = vo_L_add(index, ((L_deposit_l(i) & 3L) << (Word16) (6 * N - 4))); /* index += (i & 3) << ((6*N)-4); */ 3965d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen 3975d5c3a132bb446ac78a37dfaac24a46cacf0dd73Marco Nelissen return (index); 398e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard} 399e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard 400e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard 401