aboutsummaryrefslogtreecommitdiffstats
path: root/libSBRenc/src/env_est.h
blob: be74976b0342e02624a1bb6b1d9ee159e696e4a3 (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
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
/****************************************************************************

                     (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  Envelope estimation structs and prototypes $Revision: 37142 $
*/
#ifndef __ENV_EST_H
#define __ENV_EST_H

#include "sbr_def.h"
#include "sbr_encoder.h" /* SBR econfig structs */
#include "ps_main.h"
#include "bit_sbr.h"
#include "fram_gen.h"
#include "tran_det.h"
#include "code_env.h"
#include "ton_corr.h"

typedef struct
{
  FIXP_DBL  *rBuffer[QMF_MAX_TIME_SLOTS];
  FIXP_DBL  *iBuffer[QMF_MAX_TIME_SLOTS];

  FIXP_DBL  *p_YBuffer;

  FIXP_DBL  *YBuffer[QMF_MAX_TIME_SLOTS];
  int        YBufferScale[2];

  UCHAR envelopeCompensation[MAX_FREQ_COEFFS];
  UCHAR pre_transient_info[2];


  int YBufferWriteOffset;
  int YBufferSzShift;
  int rBufferReadOffset;

  int no_cols;
  int no_rows;
  int start_index;

  int time_slots;
  int time_step;
}
SBR_EXTRACT_ENVELOPE;
typedef SBR_EXTRACT_ENVELOPE *HANDLE_SBR_EXTRACT_ENVELOPE;

struct ENV_CHANNEL
{
  SBR_TRANSIENT_DETECTOR sbrTransientDetector;
  SBR_CODE_ENVELOPE sbrCodeEnvelope;
  SBR_CODE_ENVELOPE sbrCodeNoiseFloor;
  SBR_EXTRACT_ENVELOPE sbrExtractEnvelope;


  SBR_ENVELOPE_FRAME SbrEnvFrame;
  SBR_TON_CORR_EST   TonCorr;

  struct SBR_ENV_DATA encEnvData;

  int qmfScale;
  UCHAR fLevelProtect;
};
typedef struct ENV_CHANNEL *HANDLE_ENV_CHANNEL;

/************  Function Declarations ***************/

INT
FDKsbrEnc_CreateExtractSbrEnvelope (HANDLE_SBR_EXTRACT_ENVELOPE  hSbrCut,
                                    INT channel
                                   ,INT chInEl
                                   ,UCHAR* dynamic_RAM
                         );


INT
FDKsbrEnc_InitExtractSbrEnvelope (
                          HANDLE_SBR_EXTRACT_ENVELOPE hSbr,
                          int no_cols,
                          int no_rows,
                          int start_index,
                          int time_slots, int time_step, int tran_off,
                          ULONG statesInitFlag
                         ,int chInEl
                         ,UCHAR* dynamic_RAM
                         ,UINT sbrSyntaxFlags
                         );

void FDKsbrEnc_deleteExtractSbrEnvelope (HANDLE_SBR_EXTRACT_ENVELOPE hSbrCut);

typedef struct {
    FREQ_RES res[MAX_NUM_NOISE_VALUES];
    int maxQuantError;

} SBR_FRAME_TEMP_DATA;

typedef struct {
    const SBR_FRAME_INFO *frame_info;
    FIXP_DBL noiseFloor[MAX_NUM_NOISE_VALUES];
    SCHAR sfb_nrg_coupling[MAX_NUM_ENVELOPE_VALUES]; /* only used if stereomode = SWITCH_L_R_C */
    SCHAR sfb_nrg[MAX_NUM_ENVELOPE_VALUES];
    SCHAR noise_level_coupling[MAX_NUM_NOISE_VALUES]; /* only used if stereomode = SWITCH_L_R_C */
    SCHAR noise_level[MAX_NUM_NOISE_VALUES];
    UCHAR transient_info[3];
    UCHAR nEnvelopes;
} SBR_ENV_TEMP_DATA;

/*
 * Extract features from QMF data. Afterwards, the QMF data is not required anymore.
 */
void
FDKsbrEnc_extractSbrEnvelope1(
                   HANDLE_SBR_CONFIG_DATA    h_con,
                   HANDLE_SBR_HEADER_DATA    sbrHeaderData,
                   HANDLE_SBR_BITSTREAM_DATA sbrBitstreamData,
                   HANDLE_ENV_CHANNEL        h_envChan,
                   HANDLE_COMMON_DATA        cmonData,
                   SBR_ENV_TEMP_DATA   *eData,
                   SBR_FRAME_TEMP_DATA *fData
                    );


/*
 * Process the previously features extracted by FDKsbrEnc_extractSbrEnvelope1
 * and create/encode SBR envelopes.
 */
void
FDKsbrEnc_extractSbrEnvelope2(
                   HANDLE_SBR_CONFIG_DATA     h_con,
                   HANDLE_SBR_HEADER_DATA     sbrHeaderData,
                   HANDLE_PARAMETRIC_STEREO   hParametricStereo,
                   HANDLE_SBR_BITSTREAM_DATA  sbrBitstreamData,
                   HANDLE_ENV_CHANNEL         sbrEnvChannel0,
                   HANDLE_ENV_CHANNEL         sbrEnvChannel1,
                   HANDLE_COMMON_DATA         cmonData,
                   SBR_ENV_TEMP_DATA         *eData,
                   SBR_FRAME_TEMP_DATA       *fData,
                   int                        clearOutput
                   );

INT
FDKsbrEnc_GetEnvEstDelay(HANDLE_SBR_EXTRACT_ENVELOPE hSbr);

#endif