Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
小白菜888
Ffmpeg
提交
817015e4
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,发现更多精彩内容 >>
提交
817015e4
编写于
8月 16, 2008
作者:
K
Kostya Shishkov
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Add approved chunks to AAC encoder
Originally committed as revision 14785 to
svn://svn.ffmpeg.org/ffmpeg/trunk
上级
38a1c7f2
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
58 addition
and
2 deletion
+58
-2
libavcodec/aacenc.c
libavcodec/aacenc.c
+58
-2
未找到文件。
libavcodec/aacenc.c
浏览文件 @
817015e4
...
...
@@ -27,8 +27,7 @@
/***********************************
* TODOs:
* psy model selection with some option
* change greedy codebook search into something more optimal, like Viterbi algorithm
* determine run lengths along with codebook
* add sane pulse detection
***********************************/
#include "avcodec.h"
...
...
@@ -129,6 +128,16 @@ static const uint8_t aac_chan_configs[6][5] = {
{
4
,
ID_SCE
,
ID_CPE
,
ID_CPE
,
ID_LFE
},
// 6 channels - front center + stereo + back stereo + LFE
};
/**
* AAC encoder context
*/
typedef
struct
{
PutBitContext
pb
;
MDCTContext
mdct1024
;
///< long (1024 samples) frame transform context
MDCTContext
mdct128
;
///< short (128 samples) frame transform context
DSPContext
dsp
;
}
AACEncContext
;
/**
* Make AAC audio config object.
* @see 1.6.2.1 "Syntax - AudioSpecificConfig"
...
...
@@ -176,6 +185,11 @@ static av_cold int aac_encode_init(AVCodecContext *avctx)
dsputil_init
(
&
s
->
dsp
,
avctx
);
ff_mdct_init
(
&
s
->
mdct1024
,
11
,
0
);
ff_mdct_init
(
&
s
->
mdct128
,
8
,
0
);
// window init
ff_kbd_window_init
(
ff_aac_kbd_long_1024
,
4
.
0
,
1024
);
ff_kbd_window_init
(
ff_aac_kbd_short_128
,
6
.
0
,
128
);
ff_sine_window_init
(
ff_sine_1024
,
1024
);
ff_sine_window_init
(
ff_sine_128
,
128
);
s
->
samples
=
av_malloc
(
2
*
1024
*
avctx
->
channels
*
sizeof
(
s
->
samples
[
0
]));
s
->
cpe
=
av_mallocz
(
sizeof
(
ChannelElement
)
*
aac_chan_configs
[
avctx
->
channels
-
1
][
0
]);
...
...
@@ -211,6 +225,48 @@ static void put_ics_info(AVCodecContext *avctx, IndividualChannelStream *info)
}
}
/**
* Encode pulse data.
*/
static
void
encode_pulses
(
AVCodecContext
*
avctx
,
AACEncContext
*
s
,
Pulse
*
pulse
,
int
channel
)
{
int
i
;
put_bits
(
&
s
->
pb
,
1
,
!!
pulse
->
num_pulse
);
if
(
!
pulse
->
num_pulse
)
return
;
put_bits
(
&
s
->
pb
,
2
,
pulse
->
num_pulse
-
1
);
put_bits
(
&
s
->
pb
,
6
,
pulse
->
start
);
for
(
i
=
0
;
i
<
pulse
->
num_pulse
;
i
++
){
put_bits
(
&
s
->
pb
,
5
,
pulse
->
offset
[
i
]);
put_bits
(
&
s
->
pb
,
4
,
pulse
->
amp
[
i
]);
}
}
/**
* Encode spectral coefficients processed by psychoacoustic model.
*/
static
void
encode_spectral_coeffs
(
AVCodecContext
*
avctx
,
AACEncContext
*
s
,
ChannelElement
*
cpe
,
int
channel
)
{
int
start
,
i
,
w
,
w2
,
wg
;
w
=
0
;
for
(
wg
=
0
;
wg
<
cpe
->
ch
[
channel
].
ics
.
num_window_groups
;
wg
++
){
start
=
0
;
for
(
i
=
0
;
i
<
cpe
->
ch
[
channel
].
ics
.
max_sfb
;
i
++
){
if
(
cpe
->
ch
[
channel
].
zeroes
[
w
][
i
]){
start
+=
cpe
->
ch
[
channel
].
ics
.
swb_sizes
[
i
];
continue
;
}
for
(
w2
=
w
;
w2
<
w
+
cpe
->
ch
[
channel
].
ics
.
group_len
[
wg
];
w2
++
){
encode_band_coeffs
(
s
,
cpe
,
channel
,
start
+
w2
*
128
,
cpe
->
ch
[
channel
].
ics
.
swb_sizes
[
i
],
cpe
->
ch
[
channel
].
band_type
[
w
][
i
]);
}
start
+=
cpe
->
ch
[
channel
].
ics
.
swb_sizes
[
i
];
}
w
+=
cpe
->
ch
[
channel
].
ics
.
group_len
[
wg
];
}
}
/**
* Write some auxiliary information about the created AAC file.
*/
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录