ffmpeg / libavcodec / ra144.h @ 2912e87a
History  View  Annotate  Download (2.99 KB)
1 
/*


2 
* Real Audio 1.0 (14.4K)

3 
* Copyright (c) 2003 the ffmpeg project

4 
*

5 
* This file is part of Libav.

6 
*

7 
* Libav is free software; you can redistribute it and/or

8 
* modify it under the terms of the GNU Lesser General Public

9 
* License as published by the Free Software Foundation; either

10 
* version 2.1 of the License, or (at your option) any later version.

11 
*

12 
* Libav is distributed in the hope that it will be useful,

13 
* but WITHOUT ANY WARRANTY; without even the implied warranty of

14 
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU

15 
* Lesser General Public License for more details.

16 
*

17 
* You should have received a copy of the GNU Lesser General Public

18 
* License along with Libav; if not, write to the Free Software

19 
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 021101301 USA

20 
*/

21  
22 
#ifndef AVCODEC_RA144_H

23 
#define AVCODEC_RA144_H

24  
25 
#include <stdint.h> 
26 
#include "lpc.h" 
27  
28 
#define NBLOCKS 4 ///< number of subblocks within a block 
29 
#define BLOCKSIZE 40 ///< subblock size in 16bit words 
30 
#define BUFFERSIZE 146 ///< the size of the adaptive codebook 
31 
#define FIXED_CB_SIZE 128 ///< size of fixed codebooks 
32 
#define FRAMESIZE 20 ///< size of encoded frame 
33 
#define LPC_ORDER 10 ///< order of LPC filter 
34  
35 
typedef struct { 
36 
AVCodecContext *avctx; 
37 
LPCContext lpc_ctx; 
38  
39 
unsigned int old_energy; ///< previous frame energy 
40  
41 
unsigned int lpc_tables[2][10]; 
42  
43 
/** LPC coefficients: lpc_coef[0] is the coefficients of the current frame

44 
* and lpc_coef[1] of the previous one. */

45 
unsigned int *lpc_coef[2]; 
46  
47 
unsigned int lpc_refl_rms[2]; 
48  
49 
int16_t curr_block[NBLOCKS * BLOCKSIZE]; 
50  
51 
/** The current subblock padded by the last 10 values of the previous one. */

52 
int16_t curr_sblock[50];

53  
54 
/** Adaptive codebook, its size is two units bigger to avoid a

55 
* buffer overflow. */

56 
uint16_t adapt_cb[146+2]; 
57 
} RA144Context; 
58  
59 
void ff_copy_and_dup(int16_t *target, const int16_t *source, int offset); 
60 
int ff_eval_refl(int *refl, const int16_t *coefs, AVCodecContext *avctx); 
61 
void ff_eval_coefs(int *coefs, const int *refl); 
62 
void ff_int_to_int16(int16_t *out, const int *inp); 
63 
int ff_t_sqrt(unsigned int x); 
64 
unsigned int ff_rms(const int *data); 
65 
int ff_interp(RA144Context *ractx, int16_t *out, int a, int copyold, 
66 
int energy);

67 
unsigned int ff_rescale_rms(unsigned int rms, unsigned int energy); 
68 
int ff_irms(const int16_t *data); 
69 
void ff_subblock_synthesis(RA144Context *ractx, const uint16_t *lpc_coefs, 
70 
int cba_idx, int cb1_idx, int cb2_idx, 
71 
int gval, int gain); 
72  
73 
extern const int16_t ff_gain_val_tab[256][3]; 
74 
extern const uint8_t ff_gain_exp_tab[256]; 
75 
extern const int8_t ff_cb1_vects[128][40]; 
76 
extern const int8_t ff_cb2_vects[128][40]; 
77 
extern const uint16_t ff_cb1_base[128]; 
78 
extern const uint16_t ff_cb2_base[128]; 
79 
extern const int16_t ff_energy_tab[32]; 
80 
extern const int16_t * const ff_lpc_refl_cb[10]; 
81  
82 
#endif /* AVCODEC_RA144_H */ 