summaryrefslogtreecommitdiffstats
path: root/libAACdec/src/rvlc_info.h
blob: 2edc1b334428c5f2a9fa47f90ff7353a90c2095f (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
/****************************************************************************

                     (C) Copyright Fraunhofer IIS (2004)
                               All Rights Reserved

    Please be advised that this software and/or program delivery is
    Confidential Information of Fraunhofer and subject to and covered by the

    Fraunhofer IIS Software Evaluation Agreement
    between Google Inc. and  Fraunhofer
    effective and in full force since March 1, 2012.

    You may use this software and/or program only under the terms and
    conditions described in the above mentioned Fraunhofer IIS Software
    Evaluation Agreement. Any other and/or further use requires a separate agreement.


   This software and/or program is protected by copyright law and international
   treaties. Any reproduction or distribution of this software and/or program,
   or any portion of it, may result in severe civil and criminal penalties, and
   will be prosecuted to the maximum extent possible under law.

 $Id$

****************************************************************************/
/*!
  \file
  \brief  Defines structures for RVLC
  \author Robert Weidner
*/
#ifndef RVLC_INFO_H
#define RVLC_INFO_H



#define FWD                           0     /* bitstream decoding direction forward (RVL coded part) */
#define BWD                           1     /* bitstream decoding direction backward (RVL coded part) */

#define MAX_RVL                       7     /* positive RVLC escape */
#define MIN_RVL                      -7     /* negative RVLC escape */
#define MAX_ALLOWED_DPCM_INDEX       14     /* the maximum allowed index of a decoded dpcm value (offset 'TABLE_OFFSET' incl --> must be subtracted) */
#define TABLE_OFFSET                  7     /* dpcm offset of valid output values of rvl table decoding, the rvl table ouly returns positive values, therefore the offset */
#define MAX_LEN_RVLC_CODE_WORD        9     /* max length of a RVL codeword in bits */
#define MAX_LEN_RVLC_ESCAPE_WORD     20     /* max length of huffman coded RVLC escape word in bits */

#define DPCM_NOISE_NRG_BITS           9
#define SF_OFFSET                   100     /* offset for correcting scf value */

#define CONCEAL_MAX_INIT           1311     /* arbitrary value */
#define CONCEAL_MIN_INIT          -1311     /* arbitrary value */

#define RVLC_MAX_SFB              ((8) * (16))

/* sideinfo of RVLC */
typedef struct
{
  /* ------- ESC 1 Data: --------- */     /* order of RVLC-bitstream components in bitstream (RVLC-initialization), every component appears only once in bitstream */
  INT        sf_concealment;              /* 1          */
  INT        rev_global_gain;             /* 2          */
  SHORT      length_of_rvlc_sf;           /* 3          */  /* original value, gets modified (subtract 9) in case of noise (PNS); is kept for later use */
  INT        dpcm_noise_nrg;              /* 4 optional */
  INT        sf_escapes_present;          /* 5          */
  SHORT      length_of_rvlc_escapes;      /* 6 optional */
  INT        dpcm_noise_last_position;    /* 7 optional */

  INT        dpcm_is_last_position;

  SHORT      length_of_rvlc_sf_fwd;       /* length_of_rvlc_sf used for forward decoding */
  SHORT      length_of_rvlc_sf_bwd;       /* length_of_rvlc_sf used for backward decoding */

  /* for RVL-Codeword decoder to distinguish between fwd and bwd decoding */
  SHORT     *pRvlBitCnt_RVL;
  USHORT    *pBitstrIndxRvl_RVL;

  UCHAR      numWindowGroups;
  UCHAR      maxSfbTransmitted;
  UCHAR      first_noise_group;
  UCHAR      first_noise_band;
  UCHAR      direction;

  /* bitstream indices */
  USHORT     bitstreamIndexRvlFwd;        /* base address of RVL-coded-scalefactor data (ESC 2) for forward  decoding */
  USHORT     bitstreamIndexRvlBwd;        /* base address of RVL-coded-scalefactor data (ESC 2) for backward decoding */
  USHORT     bitstreamIndexEsc;           /* base address where RVLC-escapes start (ESC 2) */

  /* decoding trees */
  const UINT *pHuffTreeRvlCodewds;
  const UINT *pHuffTreeRvlcEscape;

  /* escape counters */
  UCHAR      numDecodedEscapeWordsFwd;    /* when decoding RVL-codes forward  */
  UCHAR      numDecodedEscapeWordsBwd;    /* when decoding RVL-codes backward */
  UCHAR      numDecodedEscapeWordsEsc;    /* when decoding the escape-Words */

  SCHAR      noise_used;
  SCHAR      intensity_used;
  SCHAR      sf_used;

  SHORT      firstScf;
  SHORT      lastScf;
  SHORT      firstNrg;
  SHORT      lastNrg;
  SHORT      firstIs;
  SHORT      lastIs;

  /* ------ RVLC error detection ------ */
  UINT       errorLogRvlc;                /* store RVLC errors  */
  SHORT      conceal_min;                 /* is set at backward decoding  */
  SHORT      conceal_max;                 /* is set at forward  decoding  */
  SHORT      conceal_min_esc;             /* is set at backward decoding  */
  SHORT      conceal_max_esc;             /* is set at forward  decoding  */
} CErRvlcInfo;

typedef CErRvlcInfo RVLC_INFO; /* temp */



#endif /* RVLC_INFO_H */