FFmpeg
Main Page
Related Pages
Modules
Namespaces
Data Structures
Files
Examples
File List
Globals
All
Data Structures
Namespaces
Files
Functions
Variables
Typedefs
Enumerations
Enumerator
Macros
Groups
Pages
libavcodec
ac3dsp.h
Go to the documentation of this file.
1
/*
2
* AC-3 DSP functions
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 02110-1301 USA
20
*/
21
22
#ifndef AVCODEC_AC3DSP_H
23
#define AVCODEC_AC3DSP_H
24
25
#include <stdint.h>
26
27
/**
28
* Number of mantissa bits written for each bap value.
29
* bap values with fractional bits are set to 0 and are calculated separately.
30
*/
31
extern
const
uint16_t
ff_ac3_bap_bits
[16];
32
33
typedef
struct
AC3DSPContext
{
34
/**
35
* Set each encoded exponent in a block to the minimum of itself and the
36
* exponents in the same frequency bin of up to 5 following blocks.
37
* @param exp pointer to the start of the current block of exponents.
38
* constraints: align 16
39
* @param num_reuse_blocks number of blocks that will reuse exponents from the current block.
40
* constraints: range 0 to 5
41
* @param nb_coefs number of frequency coefficients.
42
*/
43
void
(*
ac3_exponent_min
)(
uint8_t
*exp,
int
num_reuse_blocks,
int
nb_coefs);
44
45
/**
46
* Calculate the maximum MSB of the absolute value of each element in an
47
* array of int16_t.
48
* @param src input array
49
* constraints: align 16. values must be in range [-32767,32767]
50
* @param len number of values in the array
51
* constraints: multiple of 16 greater than 0
52
* @return a value with the same MSB as max(abs(src[]))
53
*/
54
int (*
ac3_max_msb_abs_int16
)(
const
int16_t *
src
,
int
len
);
55
56
/**
57
* Left-shift each value in an array of int16_t by a specified amount.
58
* @param src input array
59
* constraints: align 16
60
* @param len number of values in the array
61
* constraints: multiple of 32 greater than 0
62
* @param shift left shift amount
63
* constraints: range [0,15]
64
*/
65
void
(*
ac3_lshift_int16
)(int16_t *
src
,
unsigned
int
len
,
unsigned
int
shift
);
66
67
/**
68
* Right-shift each value in an array of int32_t by a specified amount.
69
* @param src input array
70
* constraints: align 16
71
* @param len number of values in the array
72
* constraints: multiple of 16 greater than 0
73
* @param shift right shift amount
74
* constraints: range [0,31]
75
*/
76
void
(*
ac3_rshift_int32
)(
int32_t
*
src
,
unsigned
int
len
,
unsigned
int
shift
);
77
78
/**
79
* Convert an array of float in range [-1.0,1.0] to int32_t with range
80
* [-(1<<24),(1<<24)]
81
*
82
* @param dst destination array of int32_t.
83
* constraints: 16-byte aligned
84
* @param src source array of float.
85
* constraints: 16-byte aligned
86
* @param len number of elements to convert.
87
* constraints: multiple of 32 greater than zero
88
*/
89
void
(*
float_to_fixed24
)(
int32_t
*dst,
const
float
*
src
,
unsigned
int
len
);
90
91
/**
92
* Calculate bit allocation pointers.
93
* The SNR is the difference between the masking curve and the signal. AC-3
94
* uses this value for each frequency bin to allocate bits. The snroffset
95
* parameter is a global adjustment to the SNR for all bins.
96
*
97
* @param[in] mask masking curve
98
* @param[in] psd signal power for each frequency bin
99
* @param[in] start starting bin location
100
* @param[in] end ending bin location
101
* @param[in] snr_offset SNR adjustment
102
* @param[in] floor noise floor
103
* @param[in] bap_tab look-up table for bit allocation pointers
104
* @param[out] bap bit allocation pointers
105
*/
106
void
(*
bit_alloc_calc_bap
)(int16_t *
mask
, int16_t *psd,
int
start
,
int
end
,
107
int
snr_offset,
int
floor,
108
const
uint8_t
*bap_tab,
uint8_t
*bap);
109
110
/**
111
* Update bap counts using the supplied array of bap.
112
*
113
* @param[out] mant_cnt bap counts for 1 block
114
* @param[in] bap array of bap, pointing to start coef bin
115
* @param[in] len number of elements to process
116
*/
117
void
(*
update_bap_counts
)(uint16_t mant_cnt[16],
uint8_t
*bap,
int
len
);
118
119
/**
120
* Calculate the number of bits needed to encode a set of mantissas.
121
*
122
* @param[in] mant_cnt bap counts for all blocks
123
* @return mantissa bit count
124
*/
125
int (*
compute_mantissa_size
)(uint16_t mant_cnt[6][16]);
126
127
void
(*
extract_exponents
)(
uint8_t
*exp,
int32_t
*coef,
int
nb_coefs);
128
129
void
(*
sum_square_butterfly_int32
)(int64_t sum[4],
const
int32_t
*coef0,
130
const
int32_t
*coef1,
int
len
);
131
132
void
(*
sum_square_butterfly_float
)(
float
sum[4],
const
float
*coef0,
133
const
float
*coef1,
int
len
);
134
135
void
(*
downmix
)(
float
**samples, float (*matrix)[2],
int
out_ch,
136
int
in_ch,
int
len
);
137
138
void
(*
downmix_fixed
)(
int32_t
**samples, int16_t (*matrix)[2],
int
out_ch,
139
int
in_ch,
int
len
);
140
141
/**
142
* Apply symmetric window in 16-bit fixed-point.
143
* @param output destination array
144
* constraints: 16-byte aligned
145
* @param input source array
146
* constraints: 16-byte aligned
147
* @param window window array
148
* constraints: 16-byte aligned, at least len/2 elements
149
* @param len full window length
150
* constraints: multiple of ? greater than zero
151
*/
152
void
(*
apply_window_int16
)(int16_t *output,
const
int16_t *input,
153
const
int16_t *window,
unsigned
int
len
);
154
}
AC3DSPContext
;
155
156
void
ff_ac3dsp_init
(
AC3DSPContext
*
c
,
int
bit_exact);
157
void
ff_ac3dsp_init_arm
(
AC3DSPContext
*
c
,
int
bit_exact);
158
void
ff_ac3dsp_init_x86
(
AC3DSPContext
*
c
,
int
bit_exact);
159
void
ff_ac3dsp_init_mips
(
AC3DSPContext
*
c
,
int
bit_exact);
160
161
#endif
/* AVCODEC_AC3DSP_H */
Generated on Sun Jul 20 2014 23:05:42 for FFmpeg by
1.8.2