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