Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
小白菜888
Ffmpeg
提交
d4a240cb
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,发现更多精彩内容 >>
提交
d4a240cb
编写于
9月 03, 2008
作者:
B
Baptiste Coudurier
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
ac3 muxing support in mov/mp4/m4v
Originally committed as revision 15184 to
svn://svn.ffmpeg.org/ffmpeg/trunk
上级
395206f6
变更
2
隐藏空白更改
内联
并排
Showing
2 changed file
with
53 addition
and
1 deletion
+53
-1
libavformat/isom.c
libavformat/isom.c
+2
-0
libavformat/movenc.c
libavformat/movenc.c
+51
-1
未找到文件。
libavformat/isom.c
浏览文件 @
d4a240cb
...
...
@@ -48,6 +48,7 @@ const AVCodecTag ff_mp4_obj_type[] = {
{
CODEC_ID_PNG
,
109
},
{
CODEC_ID_JPEG2000
,
110
},
/* 15444-1 */
{
CODEC_ID_VC1
,
163
},
{
CODEC_ID_AC3
,
165
},
{
CODEC_ID_VORBIS
,
221
},
/* non standard, gpac uses it */
{
CODEC_ID_DVD_SUBTITLE
,
224
},
/* non standard, see unsupported-embedded-subs-2.mp4 */
{
CODEC_ID_QCELP
,
225
},
...
...
@@ -187,6 +188,7 @@ const AVCodecTag codec_movaudio_tags[] = {
/* { CODEC_ID_OGG_VORBIS, MKTAG('O', 'g', 'g', 'S') }, *//* sample files at http://heroinewarrior.com/xmovie.php3 use this tag */
{
CODEC_ID_AAC
,
MKTAG
(
'm'
,
'p'
,
'4'
,
'a'
)
},
/* MPEG-4 AAC */
{
CODEC_ID_AC3
,
MKTAG
(
'a'
,
'c'
,
'-'
,
'3'
)
},
/* ETSI TS 102 366 Annex F */
{
CODEC_ID_AMR_NB
,
MKTAG
(
's'
,
'a'
,
'm'
,
'r'
)
},
/* AMR-NB 3gp */
{
CODEC_ID_AMR_WB
,
MKTAG
(
's'
,
'a'
,
'w'
,
'b'
)
},
/* AMR-WB 3gp */
...
...
libavformat/movenc.c
浏览文件 @
d4a240cb
...
...
@@ -24,6 +24,7 @@
#include "avio.h"
#include "isom.h"
#include "avc.h"
#include "libavcodec/bitstream.h"
#undef NDEBUG
#include <assert.h>
...
...
@@ -219,6 +220,50 @@ static int mov_write_amr_tag(ByteIOContext *pb, MOVTrack *track)
return
0x11
;
}
static
int
mov_write_ac3_tag
(
ByteIOContext
*
pb
,
MOVTrack
*
track
)
{
GetBitContext
gbc
;
PutBitContext
pbc
;
uint8_t
buf
[
3
];
int
fscod
,
bsid
,
bsmod
,
acmod
,
lfeon
,
frmsizecod
;
if
(
track
->
vosLen
<
7
)
return
-
1
;
put_be32
(
pb
,
11
);
put_tag
(
pb
,
"dac3"
);
init_get_bits
(
&
gbc
,
track
->
vosData
+
2
,
track
->
vosLen
-
2
);
fscod
=
get_bits
(
&
gbc
,
2
);
frmsizecod
=
get_bits
(
&
gbc
,
6
);
bsid
=
get_bits
(
&
gbc
,
5
);
bsmod
=
get_bits
(
&
gbc
,
3
);
acmod
=
get_bits
(
&
gbc
,
3
);
if
(
acmod
==
2
)
{
skip_bits
(
&
gbc
,
2
);
// dsurmod
}
else
{
if
((
acmod
&
1
)
&&
acmod
!=
1
)
skip_bits
(
&
gbc
,
2
);
// cmixlev
if
(
acmod
&
4
)
skip_bits
(
&
gbc
,
2
);
// surmixlev
}
lfeon
=
get_bits1
(
&
gbc
);
init_put_bits
(
&
pbc
,
buf
,
sizeof
(
buf
));
put_bits
(
&
pbc
,
2
,
fscod
);
put_bits
(
&
pbc
,
5
,
bsid
);
put_bits
(
&
pbc
,
3
,
bsmod
);
put_bits
(
&
pbc
,
3
,
acmod
);
put_bits
(
&
pbc
,
1
,
lfeon
);
put_bits
(
&
pbc
,
5
,
frmsizecod
>>
1
);
// bit_rate_code
put_bits
(
&
pbc
,
5
,
0
);
// reserved
flush_put_bits
(
&
pbc
);
put_buffer
(
pb
,
buf
,
sizeof
(
buf
));
return
11
;
}
/**
* This function writes extradata "as is".
* Extradata must be formated like a valid atom (with size and tag)
...
...
@@ -330,6 +375,8 @@ static int mov_write_wave_tag(ByteIOContext *pb, MOVTrack *track)
mov_write_enda_tag
(
pb
);
}
else
if
(
track
->
enc
->
codec_id
==
CODEC_ID_AMR_NB
)
{
mov_write_amr_tag
(
pb
,
track
);
}
else
if
(
track
->
enc
->
codec_id
==
CODEC_ID_AC3
)
{
mov_write_ac3_tag
(
pb
,
track
);
}
else
if
(
track
->
enc
->
codec_id
==
CODEC_ID_ALAC
)
{
mov_write_extradata_tag
(
pb
,
track
);
}
...
...
@@ -516,6 +563,7 @@ static const AVCodecTag codec_ipod_tags[] = {
{
CODEC_ID_MPEG4
,
MKTAG
(
'm'
,
'p'
,
'4'
,
'v'
)
},
{
CODEC_ID_AAC
,
MKTAG
(
'm'
,
'p'
,
'4'
,
'a'
)
},
{
CODEC_ID_ALAC
,
MKTAG
(
'a'
,
'l'
,
'a'
,
'c'
)
},
{
CODEC_ID_AC3
,
MKTAG
(
'a'
,
'c'
,
'-'
,
'3'
)
},
};
static
int
mov_find_codec_tag
(
AVFormatContext
*
s
,
MOVTrack
*
track
)
...
...
@@ -525,6 +573,7 @@ static int mov_find_codec_tag(AVFormatContext *s, MOVTrack *track)
if
(
!
codec_get_tag
(
ff_mp4_obj_type
,
track
->
enc
->
codec_id
))
return
0
;
if
(
track
->
enc
->
codec_id
==
CODEC_ID_H264
)
tag
=
MKTAG
(
'a'
,
'v'
,
'c'
,
'1'
);
else
if
(
track
->
enc
->
codec_id
==
CODEC_ID_AC3
)
tag
=
MKTAG
(
'a'
,
'c'
,
'-'
,
'3'
);
else
if
(
track
->
enc
->
codec_type
==
CODEC_TYPE_VIDEO
)
tag
=
MKTAG
(
'm'
,
'p'
,
'4'
,
'v'
);
else
if
(
track
->
enc
->
codec_type
==
CODEC_TYPE_AUDIO
)
tag
=
MKTAG
(
'm'
,
'p'
,
'4'
,
'a'
);
}
else
if
(
track
->
mode
==
MODE_IPOD
)
{
...
...
@@ -1618,7 +1667,8 @@ static int mov_write_packet(AVFormatContext *s, AVPacket *pkt)
return
ret
;
assert
(
pkt
->
size
);
size
=
pkt
->
size
;
}
else
if
(
enc
->
codec_id
==
CODEC_ID_DNXHD
&&
!
trk
->
vosLen
)
{
}
else
if
((
enc
->
codec_id
==
CODEC_ID_DNXHD
||
enc
->
codec_id
==
CODEC_ID_AC3
)
&&
!
trk
->
vosLen
)
{
/* copy frame to create needed atoms */
trk
->
vosLen
=
size
;
trk
->
vosData
=
av_malloc
(
size
);
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录