Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
小白菜888
Ffmpeg
提交
9ea24e92
F
Ffmpeg
项目概览
小白菜888
/
Ffmpeg
通知
3
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
F
Ffmpeg
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
9ea24e92
编写于
7月 30, 2013
作者:
D
Diego Biurrun
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
twinvq: Add proper twinvq prefixes to identifiers
上级
f900f35a
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
95 addition
and
94 deletion
+95
-94
libavcodec/twinvq.c
libavcodec/twinvq.c
+95
-94
未找到文件。
libavcodec/twinvq.c
浏览文件 @
9ea24e92
...
...
@@ -32,7 +32,7 @@
#include "sinewin.h"
#include "twinvq_data.h"
enum
FrameType
{
enum
TwinVQ
FrameType
{
FT_SHORT
=
0
,
///< Short frame (divided in n sub-blocks)
FT_MEDIUM
,
///< Medium frame (divided in m<n sub-blocks)
FT_LONG
,
///< Long frame (single sub-block + PPC)
...
...
@@ -42,7 +42,7 @@ enum FrameType {
/**
* Parameters and tables that are different for each frame type
*/
struct
FrameMode
{
struct
TwinVQ
FrameMode
{
uint8_t
sub
;
///< Number subblocks in each frame
const
uint16_t
*
bark_tab
;
...
...
@@ -66,8 +66,8 @@ struct FrameMode {
* Parameters and tables that are different for every combination of
* bitrate/sample rate
*/
typedef
struct
{
struct
FrameMode
fmode
[
3
];
///< frame type-dependant parameters
typedef
struct
TwinVQModeTab
{
struct
TwinVQ
FrameMode
fmode
[
3
];
///< frame type-dependant parameters
uint16_t
size
;
///< frame size in samples
uint8_t
n_lsp
;
///< number of lsp coefficients
...
...
@@ -90,9 +90,9 @@ typedef struct {
/** constant for peak period to peak width conversion */
uint16_t
peak_per2wid
;
}
ModeTab
;
}
TwinVQ
ModeTab
;
static
const
ModeTab
mode_08_08
=
{
static
const
TwinVQ
ModeTab
mode_08_08
=
{
{
{
8
,
bark_tab_s08_64
,
10
,
tab
.
fcb08s
,
1
,
5
,
tab
.
cb0808s0
,
tab
.
cb0808s1
,
18
},
{
2
,
bark_tab_m08_256
,
20
,
tab
.
fcb08m
,
2
,
5
,
tab
.
cb0808m0
,
tab
.
cb0808m1
,
16
},
...
...
@@ -101,7 +101,7 @@ static const ModeTab mode_08_08 = {
512
,
12
,
tab
.
lsp08
,
1
,
5
,
3
,
3
,
tab
.
shape08
,
8
,
28
,
20
,
6
,
40
};
static
const
ModeTab
mode_11_08
=
{
static
const
TwinVQ
ModeTab
mode_11_08
=
{
{
{
8
,
bark_tab_s11_64
,
10
,
tab
.
fcb11s
,
1
,
5
,
tab
.
cb1108s0
,
tab
.
cb1108s1
,
29
},
{
2
,
bark_tab_m11_256
,
20
,
tab
.
fcb11m
,
2
,
5
,
tab
.
cb1108m0
,
tab
.
cb1108m1
,
24
},
...
...
@@ -110,7 +110,7 @@ static const ModeTab mode_11_08 = {
512
,
16
,
tab
.
lsp11
,
1
,
6
,
4
,
3
,
tab
.
shape11
,
9
,
36
,
30
,
7
,
90
};
static
const
ModeTab
mode_11_10
=
{
static
const
TwinVQ
ModeTab
mode_11_10
=
{
{
{
8
,
bark_tab_s11_64
,
10
,
tab
.
fcb11s
,
1
,
5
,
tab
.
cb1110s0
,
tab
.
cb1110s1
,
21
},
{
2
,
bark_tab_m11_256
,
20
,
tab
.
fcb11m
,
2
,
5
,
tab
.
cb1110m0
,
tab
.
cb1110m1
,
18
},
...
...
@@ -119,7 +119,7 @@ static const ModeTab mode_11_10 = {
512
,
16
,
tab
.
lsp11
,
1
,
6
,
4
,
3
,
tab
.
shape11
,
9
,
36
,
30
,
7
,
90
};
static
const
ModeTab
mode_16_16
=
{
static
const
TwinVQ
ModeTab
mode_16_16
=
{
{
{
8
,
bark_tab_s16_128
,
10
,
tab
.
fcb16s
,
1
,
5
,
tab
.
cb1616s0
,
tab
.
cb1616s1
,
16
},
{
2
,
bark_tab_m16_512
,
20
,
tab
.
fcb16m
,
2
,
5
,
tab
.
cb1616m0
,
tab
.
cb1616m1
,
15
},
...
...
@@ -128,7 +128,7 @@ static const ModeTab mode_16_16 = {
1024
,
16
,
tab
.
lsp16
,
1
,
6
,
4
,
3
,
tab
.
shape16
,
9
,
56
,
60
,
7
,
180
};
static
const
ModeTab
mode_22_20
=
{
static
const
TwinVQ
ModeTab
mode_22_20
=
{
{
{
8
,
bark_tab_s22_128
,
10
,
tab
.
fcb22s_1
,
1
,
6
,
tab
.
cb2220s0
,
tab
.
cb2220s1
,
18
},
{
2
,
bark_tab_m22_512
,
20
,
tab
.
fcb22m_1
,
2
,
6
,
tab
.
cb2220m0
,
tab
.
cb2220m1
,
17
},
...
...
@@ -137,7 +137,7 @@ static const ModeTab mode_22_20 = {
1024
,
16
,
tab
.
lsp22_1
,
1
,
6
,
4
,
3
,
tab
.
shape22_1
,
9
,
56
,
36
,
7
,
144
};
static
const
ModeTab
mode_22_24
=
{
static
const
TwinVQ
ModeTab
mode_22_24
=
{
{
{
8
,
bark_tab_s22_128
,
10
,
tab
.
fcb22s_1
,
1
,
6
,
tab
.
cb2224s0
,
tab
.
cb2224s1
,
15
},
{
2
,
bark_tab_m22_512
,
20
,
tab
.
fcb22m_1
,
2
,
6
,
tab
.
cb2224m0
,
tab
.
cb2224m1
,
14
},
...
...
@@ -146,7 +146,7 @@ static const ModeTab mode_22_24 = {
1024
,
16
,
tab
.
lsp22_1
,
1
,
6
,
4
,
3
,
tab
.
shape22_1
,
9
,
56
,
36
,
7
,
144
};
static
const
ModeTab
mode_22_32
=
{
static
const
TwinVQ
ModeTab
mode_22_32
=
{
{
{
4
,
bark_tab_s22_128
,
10
,
tab
.
fcb22s_2
,
1
,
6
,
tab
.
cb2232s0
,
tab
.
cb2232s1
,
11
},
{
2
,
bark_tab_m22_256
,
20
,
tab
.
fcb22m_2
,
2
,
6
,
tab
.
cb2232m0
,
tab
.
cb2232m1
,
11
},
...
...
@@ -155,7 +155,7 @@ static const ModeTab mode_22_32 = {
512
,
16
,
tab
.
lsp22_2
,
1
,
6
,
4
,
4
,
tab
.
shape22_2
,
9
,
56
,
36
,
7
,
72
};
static
const
ModeTab
mode_44_40
=
{
static
const
TwinVQ
ModeTab
mode_44_40
=
{
{
{
16
,
bark_tab_s44_128
,
10
,
tab
.
fcb44s
,
1
,
6
,
tab
.
cb4440s0
,
tab
.
cb4440s1
,
18
},
{
4
,
bark_tab_m44_512
,
20
,
tab
.
fcb44m
,
2
,
6
,
tab
.
cb4440m0
,
tab
.
cb4440m1
,
17
},
...
...
@@ -164,7 +164,7 @@ static const ModeTab mode_44_40 = {
2048
,
20
,
tab
.
lsp44
,
1
,
6
,
4
,
4
,
tab
.
shape44
,
9
,
84
,
54
,
7
,
432
};
static
const
ModeTab
mode_44_48
=
{
static
const
TwinVQ
ModeTab
mode_44_48
=
{
{
{
16
,
bark_tab_s44_128
,
10
,
tab
.
fcb44s
,
1
,
6
,
tab
.
cb4448s0
,
tab
.
cb4448s1
,
15
},
{
4
,
bark_tab_m44_512
,
20
,
tab
.
fcb44m
,
2
,
6
,
tab
.
cb4448m0
,
tab
.
cb4448m1
,
14
},
...
...
@@ -173,12 +173,12 @@ static const ModeTab mode_44_48 = {
2048
,
20
,
tab
.
lsp44
,
1
,
6
,
4
,
4
,
tab
.
shape44
,
9
,
84
,
54
,
7
,
432
};
typedef
struct
TwinContext
{
typedef
struct
Twin
VQ
Context
{
AVCodecContext
*
avctx
;
AVFloatDSPContext
fdsp
;
FFTContext
mdct_ctx
[
3
];
const
ModeTab
*
mtab
;
const
TwinVQ
ModeTab
*
mtab
;
// history
float
lsp_hist
[
2
][
20
];
///< LSP coefficients of the last frame
...
...
@@ -202,7 +202,7 @@ typedef struct TwinContext {
// scratch buffers
float
*
tmp_buf
;
}
TwinContext
;
}
Twin
VQ
Context
;
#define PPC_SHAPE_CB_SIZE 64
#define PPC_SHAPE_LEN_MAX 60
...
...
@@ -263,11 +263,11 @@ static float eval_lpc_spectrum(const float *lsp, float cos_val, int order)
/**
* Evaluate the LPC amplitude spectrum envelope from the line spectrum pairs.
*/
static
void
eval_lpcenv
(
TwinContext
*
tctx
,
const
float
*
cos_vals
,
float
*
lpc
)
static
void
eval_lpcenv
(
Twin
VQ
Context
*
tctx
,
const
float
*
cos_vals
,
float
*
lpc
)
{
int
i
;
const
ModeTab
*
mtab
=
tctx
->
mtab
;
int
size_s
=
mtab
->
size
/
mtab
->
fmode
[
FT_SHORT
].
sub
;
const
TwinVQ
ModeTab
*
mtab
=
tctx
->
mtab
;
int
size_s
=
mtab
->
size
/
mtab
->
fmode
[
FT_SHORT
].
sub
;
for
(
i
=
0
;
i
<
size_s
/
2
;
i
++
)
{
float
cos_i
=
tctx
->
cos_tabs
[
0
][
i
];
...
...
@@ -307,14 +307,14 @@ static inline float get_cos(int idx, int part, const float *cos_tab, int size)
* (negative cosine values)
* @param size the size of the whole output
*/
static
inline
void
eval_lpcenv_or_interp
(
TwinContext
*
tctx
,
enum
FrameType
ftype
,
static
inline
void
eval_lpcenv_or_interp
(
Twin
VQ
Context
*
tctx
,
enum
TwinVQ
FrameType
ftype
,
float
*
out
,
const
float
*
in
,
int
size
,
int
step
,
int
part
)
{
int
i
;
const
ModeTab
*
mtab
=
tctx
->
mtab
;
const
float
*
cos_tab
=
tctx
->
cos_tabs
[
ftype
];
const
TwinVQModeTab
*
mtab
=
tctx
->
mtab
;
const
float
*
cos_tab
=
tctx
->
cos_tabs
[
ftype
];
// Fill the 's'
for
(
i
=
0
;
i
<
size
;
i
+=
step
)
...
...
@@ -344,7 +344,7 @@ static inline void eval_lpcenv_or_interp(TwinContext *tctx,
out
[
size
-
2
*
step
],
step
-
1
);
}
static
void
eval_lpcenv_2parts
(
Twin
Context
*
tctx
,
enum
FrameType
ftype
,
static
void
eval_lpcenv_2parts
(
Twin
VQContext
*
tctx
,
enum
TwinVQ
FrameType
ftype
,
const
float
*
buf
,
float
*
lpc
,
int
size
,
int
step
)
{
...
...
@@ -363,8 +363,8 @@ static void eval_lpcenv_2parts(TwinContext *tctx, enum FrameType ftype,
* bitstream, sum the corresponding vectors and write the result to *out
* after permutation.
*/
static
void
dequant
(
TwinContext
*
tctx
,
GetBitContext
*
gb
,
float
*
out
,
enum
FrameType
ftype
,
static
void
dequant
(
Twin
VQ
Context
*
tctx
,
GetBitContext
*
gb
,
float
*
out
,
enum
TwinVQ
FrameType
ftype
,
const
int16_t
*
cb0
,
const
int16_t
*
cb1
,
int
cb_len
)
{
int
pos
=
0
;
...
...
@@ -478,15 +478,15 @@ static void add_peak(int period, int width, const float *shape,
speech
[
j
+
center
]
+=
ppc_gain
*
*
shape
++
;
}
static
void
decode_ppc
(
Twin
Context
*
tctx
,
int
period_coef
,
const
float
*
shape
,
float
ppc_gain
,
float
*
speech
)
static
void
decode_ppc
(
Twin
VQContext
*
tctx
,
int
period_coef
,
const
float
*
shape
,
float
ppc_gain
,
float
*
speech
)
{
const
ModeTab
*
mtab
=
tctx
->
mtab
;
int
isampf
=
tctx
->
avctx
->
sample_rate
/
1000
;
int
ibps
=
tctx
->
avctx
->
bit_rate
/
(
1000
*
tctx
->
avctx
->
channels
);
int
min_period
=
ROUNDED_DIV
(
40
*
2
*
mtab
->
size
,
isampf
);
int
max_period
=
ROUNDED_DIV
(
40
*
2
*
mtab
->
size
*
6
,
isampf
);
int
period_range
=
max_period
-
min_period
;
const
TwinVQ
ModeTab
*
mtab
=
tctx
->
mtab
;
int
isampf
=
tctx
->
avctx
->
sample_rate
/
1000
;
int
ibps
=
tctx
->
avctx
->
bit_rate
/
(
1000
*
tctx
->
avctx
->
channels
);
int
min_period
=
ROUNDED_DIV
(
40
*
2
*
mtab
->
size
,
isampf
);
int
max_period
=
ROUNDED_DIV
(
40
*
2
*
mtab
->
size
*
6
,
isampf
);
int
period_range
=
max_period
-
min_period
;
// This is actually the period multiplied by 400. It is just linearly coded
// between its maximum and minimum value.
...
...
@@ -505,10 +505,10 @@ static void decode_ppc(TwinContext *tctx, int period_coef, const float *shape,
add_peak
(
period
,
width
,
shape
,
ppc_gain
,
speech
,
mtab
->
ppc_shape_len
);
}
static
void
dec_gain
(
Twin
Context
*
tctx
,
GetBitContext
*
gb
,
enum
FrameType
ftype
,
float
*
out
)
static
void
dec_gain
(
Twin
VQContext
*
tctx
,
GetBitContext
*
gb
,
enum
TwinVQFrameType
ftype
,
float
*
out
)
{
const
ModeTab
*
mtab
=
tctx
->
mtab
;
const
TwinVQ
ModeTab
*
mtab
=
tctx
->
mtab
;
int
i
,
j
;
int
sub
=
mtab
->
fmode
[
ftype
].
sub
;
float
step
=
AMP_MAX
/
((
1
<<
GAIN_BITS
)
-
1
);
...
...
@@ -553,10 +553,10 @@ static void rearrange_lsp(int order, float *lsp, float min_dist)
}
}
static
void
decode_lsp
(
TwinContext
*
tctx
,
int
lpc_idx1
,
uint8_t
*
lpc_idx2
,
static
void
decode_lsp
(
Twin
VQ
Context
*
tctx
,
int
lpc_idx1
,
uint8_t
*
lpc_idx2
,
int
lpc_hist_idx
,
float
*
lsp
,
float
*
hist
)
{
const
ModeTab
*
mtab
=
tctx
->
mtab
;
const
TwinVQ
ModeTab
*
mtab
=
tctx
->
mtab
;
int
i
,
j
;
const
float
*
cb
=
mtab
->
lspcodebook
;
...
...
@@ -593,8 +593,8 @@ static void decode_lsp(TwinContext *tctx, int lpc_idx1, uint8_t *lpc_idx2,
ff_sort_nearly_sorted_floats
(
lsp
,
mtab
->
n_lsp
);
}
static
void
dec_lpc_spectrum_inv
(
TwinContext
*
tctx
,
float
*
lsp
,
enum
FrameType
ftype
,
float
*
lpc
)
static
void
dec_lpc_spectrum_inv
(
Twin
VQ
Context
*
tctx
,
float
*
lsp
,
enum
TwinVQ
FrameType
ftype
,
float
*
lpc
)
{
int
i
;
int
size
=
tctx
->
mtab
->
size
/
tctx
->
mtab
->
fmode
[
ftype
].
sub
;
...
...
@@ -617,14 +617,14 @@ static void dec_lpc_spectrum_inv(TwinContext *tctx, float *lsp,
static
const
uint8_t
wtype_to_wsize
[]
=
{
0
,
0
,
2
,
2
,
2
,
1
,
0
,
1
,
1
};
static
void
imdct_and_window
(
Twin
Context
*
tctx
,
enum
FrameType
ftype
,
int
w
type
,
float
*
in
,
float
*
prev
,
int
ch
)
static
void
imdct_and_window
(
Twin
VQContext
*
tctx
,
enum
TwinVQFrameType
f
type
,
int
wtype
,
float
*
in
,
float
*
prev
,
int
ch
)
{
FFTContext
*
mdct
=
&
tctx
->
mdct_ctx
[
ftype
];
const
ModeTab
*
mtab
=
tctx
->
mtab
;
int
bsize
=
mtab
->
size
/
mtab
->
fmode
[
ftype
].
sub
;
int
size
=
mtab
->
size
;
float
*
buf1
=
tctx
->
tmp_buf
;
FFTContext
*
mdct
=
&
tctx
->
mdct_ctx
[
ftype
];
const
TwinVQ
ModeTab
*
mtab
=
tctx
->
mtab
;
int
bsize
=
mtab
->
size
/
mtab
->
fmode
[
ftype
].
sub
;
int
size
=
mtab
->
size
;
float
*
buf1
=
tctx
->
tmp_buf
;
int
j
,
first_wsize
,
wsize
;
// Window size
float
*
out
=
tctx
->
curr_frame
+
2
*
ch
*
mtab
->
size
;
float
*
out2
=
out
;
...
...
@@ -668,11 +668,11 @@ static void imdct_and_window(TwinContext *tctx, enum FrameType ftype, int wtype,
tctx
->
last_block_pos
[
ch
]
=
(
size
+
first_wsize
)
/
2
;
}
static
void
imdct_output
(
Twin
Context
*
tctx
,
enum
FrameType
ftype
,
int
w
type
,
float
**
out
)
static
void
imdct_output
(
Twin
VQContext
*
tctx
,
enum
TwinVQFrameType
f
type
,
int
wtype
,
float
**
out
)
{
const
ModeTab
*
mtab
=
tctx
->
mtab
;
float
*
prev_buf
=
tctx
->
prev_frame
+
tctx
->
last_block_pos
[
0
];
const
TwinVQ
ModeTab
*
mtab
=
tctx
->
mtab
;
float
*
prev_buf
=
tctx
->
prev_frame
+
tctx
->
last_block_pos
[
0
];
int
size1
,
size2
,
i
;
for
(
i
=
0
;
i
<
tctx
->
avctx
->
channels
;
i
++
)
...
...
@@ -699,10 +699,11 @@ static void imdct_output(TwinContext *tctx, enum FrameType ftype, int wtype,
}
}
static
void
dec_bark_env
(
TwinContext
*
tctx
,
const
uint8_t
*
in
,
int
use_hist
,
int
ch
,
float
*
out
,
float
gain
,
enum
FrameType
ftype
)
static
void
dec_bark_env
(
TwinVQContext
*
tctx
,
const
uint8_t
*
in
,
int
use_hist
,
int
ch
,
float
*
out
,
float
gain
,
enum
TwinVQFrameType
ftype
)
{
const
ModeTab
*
mtab
=
tctx
->
mtab
;
const
TwinVQ
ModeTab
*
mtab
=
tctx
->
mtab
;
int
i
,
j
;
float
*
hist
=
tctx
->
bark_hist
[
ftype
][
ch
];
float
val
=
((
const
float
[])
{
0
.
4
,
0
.
35
,
0
.
28
})[
ftype
];
...
...
@@ -726,13 +727,13 @@ static void dec_bark_env(TwinContext *tctx, const uint8_t *in, int use_hist,
}
}
static
void
read_and_decode_spectrum
(
TwinContext
*
tctx
,
GetBitContext
*
gb
,
float
*
out
,
enum
FrameType
ftype
)
static
void
read_and_decode_spectrum
(
Twin
VQ
Context
*
tctx
,
GetBitContext
*
gb
,
float
*
out
,
enum
TwinVQ
FrameType
ftype
)
{
const
ModeTab
*
mtab
=
tctx
->
mtab
;
int
channels
=
tctx
->
avctx
->
channels
;
int
sub
=
mtab
->
fmode
[
ftype
].
sub
;
int
block_size
=
mtab
->
size
/
sub
;
const
TwinVQ
ModeTab
*
mtab
=
tctx
->
mtab
;
int
channels
=
tctx
->
avctx
->
channels
;
int
sub
=
mtab
->
fmode
[
ftype
].
sub
;
int
block_size
=
mtab
->
size
/
sub
;
float
gain
[
CHANNELS_MAX
*
SUBBLOCKS_MAX
];
float
ppc_shape
[
PPC_SHAPE_LEN_MAX
*
CHANNELS_MAX
*
4
];
uint8_t
bark1
[
CHANNELS_MAX
][
SUBBLOCKS_MAX
][
BARK_N_COEF_MAX
];
...
...
@@ -812,19 +813,19 @@ static void read_and_decode_spectrum(TwinContext *tctx, GetBitContext *gb,
}
}
static
int
twin_decode_frame
(
AVCodecContext
*
avctx
,
void
*
data
,
int
*
got_frame_ptr
,
AVPacket
*
avpkt
)
static
int
twin
vq
_decode_frame
(
AVCodecContext
*
avctx
,
void
*
data
,
int
*
got_frame_ptr
,
AVPacket
*
avpkt
)
{
AVFrame
*
frame
=
data
;
const
uint8_t
*
buf
=
avpkt
->
data
;
int
buf_size
=
avpkt
->
size
;
Twin
Context
*
tctx
=
avctx
->
priv_data
;
Twin
VQContext
*
tctx
=
avctx
->
priv_data
;
GetBitContext
gb
;
const
ModeTab
*
mtab
=
tctx
->
mtab
;
float
**
out
=
NULL
;
enum
FrameType
ftype
;
const
TwinVQ
ModeTab
*
mtab
=
tctx
->
mtab
;
float
**
out
=
NULL
;
enum
TwinVQ
FrameType
ftype
;
int
window_type
,
ret
;
static
const
enum
FrameType
wtype_to_ftype_table
[]
=
{
static
const
enum
TwinVQ
FrameType
wtype_to_ftype_table
[]
=
{
FT_LONG
,
FT_LONG
,
FT_SHORT
,
FT_LONG
,
FT_MEDIUM
,
FT_LONG
,
FT_LONG
,
FT_MEDIUM
,
FT_MEDIUM
};
...
...
@@ -876,14 +877,14 @@ static int twin_decode_frame(AVCodecContext *avctx, void *data,
/**
* Init IMDCT and windowing tables
*/
static
av_cold
int
init_mdct_win
(
TwinContext
*
tctx
)
static
av_cold
int
init_mdct_win
(
Twin
VQ
Context
*
tctx
)
{
int
i
,
j
,
ret
;
const
ModeTab
*
mtab
=
tctx
->
mtab
;
int
size_s
=
mtab
->
size
/
mtab
->
fmode
[
FT_SHORT
].
sub
;
int
size_m
=
mtab
->
size
/
mtab
->
fmode
[
FT_MEDIUM
].
sub
;
int
channels
=
tctx
->
avctx
->
channels
;
float
norm
=
channels
==
1
?
2
.
0
:
1
.
0
;
const
TwinVQ
ModeTab
*
mtab
=
tctx
->
mtab
;
int
size_s
=
mtab
->
size
/
mtab
->
fmode
[
FT_SHORT
].
sub
;
int
size_m
=
mtab
->
size
/
mtab
->
fmode
[
FT_MEDIUM
].
sub
;
int
channels
=
tctx
->
avctx
->
channels
;
float
norm
=
channels
==
1
?
2
.
0
:
1
.
0
;
for
(
i
=
0
;
i
<
3
;
i
++
)
{
int
bsize
=
tctx
->
mtab
->
size
/
tctx
->
mtab
->
fmode
[
i
].
sub
;
...
...
@@ -936,7 +937,7 @@ alloc_fail:
static
void
permutate_in_line
(
int16_t
*
tab
,
int
num_vect
,
int
num_blocks
,
int
block_size
,
const
uint8_t
line_len
[
2
],
int
length_div
,
enum
FrameType
ftype
)
enum
TwinVQ
FrameType
ftype
)
{
int
i
,
j
;
...
...
@@ -993,11 +994,11 @@ static void linear_perm(int16_t *out, int16_t *in, int n_blocks, int size)
out
[
i
]
=
block_size
*
(
in
[
i
]
%
n_blocks
)
+
in
[
i
]
/
n_blocks
;
}
static
av_cold
void
construct_perm_table
(
TwinContext
*
tctx
,
enum
FrameType
ftype
)
static
av_cold
void
construct_perm_table
(
Twin
VQ
Context
*
tctx
,
enum
TwinVQ
FrameType
ftype
)
{
int
block_size
,
size
;
const
ModeTab
*
mtab
=
tctx
->
mtab
;
const
TwinVQ
ModeTab
*
mtab
=
tctx
->
mtab
;
int16_t
*
tmp_perm
=
(
int16_t
*
)
tctx
->
tmp_buf
;
if
(
ftype
==
FT_PPC
)
{
...
...
@@ -1019,12 +1020,12 @@ static av_cold void construct_perm_table(TwinContext *tctx,
size
*
block_size
);
}
static
av_cold
void
init_bitstream_params
(
TwinContext
*
tctx
)
static
av_cold
void
init_bitstream_params
(
Twin
VQ
Context
*
tctx
)
{
const
ModeTab
*
mtab
=
tctx
->
mtab
;
int
n_ch
=
tctx
->
avctx
->
channels
;
int
total_fr_bits
=
tctx
->
avctx
->
bit_rate
*
mtab
->
size
/
tctx
->
avctx
->
sample_rate
;
const
TwinVQ
ModeTab
*
mtab
=
tctx
->
mtab
;
int
n_ch
=
tctx
->
avctx
->
channels
;
int
total_fr_bits
=
tctx
->
avctx
->
bit_rate
*
mtab
->
size
/
tctx
->
avctx
->
sample_rate
;
int
lsp_bits_per_block
=
n_ch
*
(
mtab
->
lsp_bit0
+
mtab
->
lsp_bit1
+
mtab
->
lsp_split
*
mtab
->
lsp_bit2
);
...
...
@@ -1033,7 +1034,7 @@ static av_cold void init_bitstream_params(TwinContext *tctx)
mtab
->
ppc_period_bit
);
int
bsize_no_main_cb
[
3
],
bse_bits
[
3
],
i
;
enum
FrameType
frametype
;
enum
TwinVQ
FrameType
frametype
;
for
(
i
=
0
;
i
<
3
;
i
++
)
// +1 for history usage switch
...
...
@@ -1088,9 +1089,9 @@ static av_cold void init_bitstream_params(TwinContext *tctx)
construct_perm_table
(
tctx
,
frametype
);
}
static
av_cold
int
twin_decode_close
(
AVCodecContext
*
avctx
)
static
av_cold
int
twin
vq
_decode_close
(
AVCodecContext
*
avctx
)
{
TwinContext
*
tctx
=
avctx
->
priv_data
;
Twin
VQ
Context
*
tctx
=
avctx
->
priv_data
;
int
i
;
for
(
i
=
0
;
i
<
3
;
i
++
)
{
...
...
@@ -1106,10 +1107,10 @@ static av_cold int twin_decode_close(AVCodecContext *avctx)
return
0
;
}
static
av_cold
int
twin_decode_init
(
AVCodecContext
*
avctx
)
static
av_cold
int
twin
vq
_decode_init
(
AVCodecContext
*
avctx
)
{
int
ret
,
isampf
,
ibps
;
TwinContext
*
tctx
=
avctx
->
priv_data
;
Twin
VQ
Context
*
tctx
=
avctx
->
priv_data
;
tctx
->
avctx
=
avctx
;
avctx
->
sample_fmt
=
AV_SAMPLE_FMT_FLTP
;
...
...
@@ -1189,7 +1190,7 @@ static av_cold int twin_decode_init(AVCodecContext *avctx)
avpriv_float_dsp_init
(
&
tctx
->
fdsp
,
avctx
->
flags
&
CODEC_FLAG_BITEXACT
);
if
((
ret
=
init_mdct_win
(
tctx
)))
{
av_log
(
avctx
,
AV_LOG_ERROR
,
"Error initializing MDCT
\n
"
);
twin_decode_close
(
avctx
);
twin
vq
_decode_close
(
avctx
);
return
ret
;
}
init_bitstream_params
(
tctx
);
...
...
@@ -1203,10 +1204,10 @@ AVCodec ff_twinvq_decoder = {
.
name
=
"twinvq"
,
.
type
=
AVMEDIA_TYPE_AUDIO
,
.
id
=
AV_CODEC_ID_TWINVQ
,
.
priv_data_size
=
sizeof
(
TwinContext
),
.
init
=
twin_decode_init
,
.
close
=
twin_decode_close
,
.
decode
=
twin_decode_frame
,
.
priv_data_size
=
sizeof
(
Twin
VQ
Context
),
.
init
=
twin
vq
_decode_init
,
.
close
=
twin
vq
_decode_close
,
.
decode
=
twin
vq
_decode_frame
,
.
capabilities
=
CODEC_CAP_DR1
,
.
long_name
=
NULL_IF_CONFIG_SMALL
(
"VQF TwinVQ"
),
.
sample_fmts
=
(
const
enum
AVSampleFormat
[])
{
AV_SAMPLE_FMT_FLTP
,
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录