ffmpeg / libavcodec / ac3dsp.c @ f7a5e779
History  View  Annotate  Download (1.67 KB)
1 
/*


2 
* AC3 DSP utils

3 
* Copyright (c) 2011 Justin Ruggles

4 
*

5 
* This file is part of FFmpeg.

6 
*

7 
* FFmpeg 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 
* FFmpeg 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 FFmpeg; if not, write to the Free Software

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

20 
*/

21  
22 
#include "avcodec.h" 
23 
#include "ac3dsp.h" 
24  
25 
static void ac3_exponent_min_c(uint8_t *exp, int num_reuse_blocks, int nb_coefs) 
26 
{ 
27 
int blk, i;

28  
29 
if (!num_reuse_blocks)

30 
return;

31  
32 
for (i = 0; i < nb_coefs; i++) { 
33 
uint8_t min_exp = *exp; 
34 
uint8_t *exp1 = exp + 256;

35 
for (blk = 0; blk < num_reuse_blocks; blk++) { 
36 
uint8_t next_exp = *exp1; 
37 
if (next_exp < min_exp)

38 
min_exp = next_exp; 
39 
exp1 += 256;

40 
} 
41 
*exp++ = min_exp; 
42 
} 
43 
} 
44  
45 
static int ac3_max_msb_abs_int16_c(const int16_t *src, int len) 
46 
{ 
47 
int i, v = 0; 
48 
for (i = 0; i < len; i++) 
49 
v = abs(src[i]); 
50 
return v;

51 
} 
52  
53 
av_cold void ff_ac3dsp_init(AC3DSPContext *c)

54 
{ 
55 
c>ac3_exponent_min = ac3_exponent_min_c; 
56 
c>ac3_max_msb_abs_int16 = ac3_max_msb_abs_int16_c; 
57  
58 
if (HAVE_MMX)

59 
ff_ac3dsp_init_x86(c); 
60 
} 