FFmpeg
Main Page
Related Pages
Modules
Data Structures
Files
Examples
File List
Globals
•
All
Data Structures
Files
Functions
Variables
Typedefs
Enumerations
Enumerator
Macros
Groups
Pages
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
22
/**
23
* @file
24
* Musepack decoder core
25
* MPEG Audio Layer 1/2 -like codec with frames of 1152 samples
26
* divided into 32 subbands.
27
*/
28
29
#include "
avcodec.h
"
30
#include "
get_bits.h
"
31
#include "
dsputil.h
"
32
#include "
mpegaudiodsp.h
"
33
#include "
mpegaudio.h
"
34
35
#include "
mpc.h
"
36
#include "
mpcdata.h
"
37
38
void
ff_mpc_init
(
void
)
39
{
40
ff_mpa_synth_init_fixed
(
ff_mpa_synth_window_fixed
);
41
}
42
43
/**
44
* Process decoded Musepack data and produce PCM
45
*/
46
static
void
mpc_synth
(
MPCContext
*
c
, int16_t **out,
int
channels)
47
{
48
int
dither_state = 0;
49
int
i, ch;
50
51
for
(ch = 0; ch < channels; ch++){
52
for
(i = 0; i <
SAMPLES_PER_BAND
; i++) {
53
ff_mpa_synth_filter_fixed
(&c->
mpadsp
,
54
c->
synth_buf
[ch], &(c->
synth_buf_offset
[ch]),
55
ff_mpa_synth_window_fixed
, &dither_state,
56
out[ch] + 32 * i, 1,
57
c->
sb_samples
[ch][i]);
58
}
59
}
60
}
61
62
void
ff_mpc_dequantize_and_synth
(
MPCContext
*
c
,
int
maxband, int16_t **out,
63
int
channels)
64
{
65
int
i, j, ch;
66
Band
*bands = c->
bands
;
67
int
off
;
68
float
mul;
69
70
/* dequantize */
71
memset(c->
sb_samples
, 0,
sizeof
(c->
sb_samples
));
72
off = 0;
73
for
(i = 0; i <= maxband; i++, off +=
SAMPLES_PER_BAND
){
74
for
(ch = 0; ch < 2; ch++){
75
if
(bands[i].res[ch]){
76
j = 0;
77
mul = (
mpc_CC
+1)[bands[i].res[ch]] *
mpc_SCF
[bands[i].scf_idx[ch][0] & 0xFF];
78
for
(; j < 12; j++)
79
c->
sb_samples
[ch][j][i] = mul * c->
Q
[ch][j + off];
80
mul = (
mpc_CC
+1)[bands[i].
res
[ch]] *
mpc_SCF
[bands[i].
scf_idx
[ch][1] & 0xFF];
81
for
(; j < 24; j++)
82
c->
sb_samples
[ch][j][i] = mul * c->
Q
[ch][j + off];
83
mul = (
mpc_CC
+1)[bands[i].
res
[ch]] *
mpc_SCF
[bands[i].
scf_idx
[ch][2] & 0xFF];
84
for
(; j < 36; j++)
85
c->
sb_samples
[ch][j][i] = mul * c->
Q
[ch][j + off];
86
}
87
}
88
if
(bands[i].msf){
89
int
t1
,
t2
;
90
for
(j = 0; j <
SAMPLES_PER_BAND
; j++){
91
t1 = c->
sb_samples
[0][j][i];
92
t2 = c->
sb_samples
[1][j][i];
93
c->
sb_samples
[0][j][i] = t1 +
t2
;
94
c->
sb_samples
[1][j][i] = t1 -
t2
;
95
}
96
}
97
}
98
99
mpc_synth
(c, out, channels);
100
}
Generated on Sat May 25 2013 03:58:37 for FFmpeg by
1.8.2