FFmpeg
1.2.12
Main Page
Related Pages
Modules
Data Structures
Files
Examples
File List
Globals
libavcodec
mpc.c
Go to the documentation of this file.
1
/*
2
* Musepack decoder core
3
* Copyright (c) 2006 Konstantin Shishkov
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
29
#include "
avcodec.h
"
30
#include "
get_bits.h
"
31
#include "
mpegaudiodsp.h
"
32
#include "
mpegaudio.h
"
33
34
#include "
mpc.h
"
35
#include "
mpcdata.h
"
36
37
void
ff_mpc_init
(
void
)
38
{
39
ff_mpa_synth_init_fixed
(
ff_mpa_synth_window_fixed
);
40
}
41
45
static
void
mpc_synth
(
MPCContext
*
c
, int16_t **
out
,
int
channels)
46
{
47
int
dither_state = 0;
48
int
i, ch;
49
50
for
(ch = 0; ch < channels; ch++){
51
for
(i = 0; i <
SAMPLES_PER_BAND
; i++) {
52
ff_mpa_synth_filter_fixed
(&c->
mpadsp
,
53
c->
synth_buf
[ch], &(c->
synth_buf_offset
[ch]),
54
ff_mpa_synth_window_fixed
, &dither_state,
55
out[ch] + 32 * i, 1,
56
c->
sb_samples
[ch][i]);
57
}
58
}
59
}
60
61
void
ff_mpc_dequantize_and_synth
(
MPCContext
*
c
,
int
maxband, int16_t **
out
,
62
int
channels)
63
{
64
int
i, j, ch;
65
Band
*bands = c->
bands
;
66
int
off
;
67
float
mul;
68
69
/* dequantize */
70
memset(c->
sb_samples
, 0,
sizeof
(c->
sb_samples
));
71
off = 0;
72
for
(i = 0; i <= maxband; i++, off +=
SAMPLES_PER_BAND
){
73
for
(ch = 0; ch < 2; ch++){
74
if
(bands[i].res[ch]){
75
j = 0;
76
mul = (
mpc_CC
+1)[bands[i].res[ch]] *
mpc_SCF
[bands[i].scf_idx[ch][0] & 0xFF];
77
for
(; j < 12; j++)
78
c->
sb_samples
[ch][j][i] = mul * c->
Q
[ch][j + off];
79
mul = (
mpc_CC
+1)[bands[i].
res
[ch]] *
mpc_SCF
[bands[i].
scf_idx
[ch][1] & 0xFF];
80
for
(; j < 24; j++)
81
c->
sb_samples
[ch][j][i] = mul * c->
Q
[ch][j + off];
82
mul = (
mpc_CC
+1)[bands[i].
res
[ch]] *
mpc_SCF
[bands[i].
scf_idx
[ch][2] & 0xFF];
83
for
(; j < 36; j++)
84
c->
sb_samples
[ch][j][i] = mul * c->
Q
[ch][j + off];
85
}
86
}
87
if
(bands[i].msf){
88
int
t1
,
t2
;
89
for
(j = 0; j <
SAMPLES_PER_BAND
; j++){
90
t1 = c->
sb_samples
[0][j][i];
91
t2 = c->
sb_samples
[1][j][i];
92
c->
sb_samples
[0][j][i] = t1 +
t2
;
93
c->
sb_samples
[1][j][i] = t1 -
t2
;
94
}
95
}
96
}
97
98
mpc_synth
(c, out, channels);
99
}
Generated on Thu Feb 12 2015 17:56:56 for FFmpeg by
1.8.1.2