Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
小白菜888
Ffmpeg
提交
0fb44a4e
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,发现更多精彩内容 >>
提交
0fb44a4e
编写于
3月 16, 2009
作者:
B
Baptiste Coudurier
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
move read_udta_string up to avoid forward declaration
Originally committed as revision 18000 to
svn://svn.ffmpeg.org/ffmpeg/trunk
上级
873358e5
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
68 addition
and
70 deletion
+68
-70
libavformat/mov.c
libavformat/mov.c
+68
-70
未找到文件。
libavformat/mov.c
浏览文件 @
0fb44a4e
...
...
@@ -79,7 +79,74 @@ typedef struct MOVParseTableEntry {
static
const
MOVParseTableEntry
mov_default_parse_table
[];
static
int
mov_read_udta_string
(
MOVContext
*
c
,
ByteIOContext
*
pb
,
MOVAtom
atom
);
static
int
mov_read_udta_string
(
MOVContext
*
c
,
ByteIOContext
*
pb
,
MOVAtom
atom
)
{
#ifdef MOV_EXPORT_ALL_METADATA
char
tmp_key
[
5
];
#endif
char
str
[
1024
],
key2
[
16
],
language
[
4
]
=
{
0
};
const
char
*
key
=
NULL
;
uint16_t
str_size
;
switch
(
atom
.
type
)
{
case
MKTAG
(
0xa9
,
'n'
,
'a'
,
'm'
):
key
=
"title"
;
break
;
case
MKTAG
(
0xa9
,
'a'
,
'u'
,
't'
):
case
MKTAG
(
0xa9
,
'A'
,
'R'
,
'T'
):
case
MKTAG
(
0xa9
,
'w'
,
'r'
,
't'
):
key
=
"author"
;
break
;
case
MKTAG
(
0xa9
,
'c'
,
'p'
,
'y'
):
key
=
"copyright"
;
break
;
case
MKTAG
(
0xa9
,
'c'
,
'm'
,
't'
):
case
MKTAG
(
0xa9
,
'i'
,
'n'
,
'f'
):
key
=
"comment"
;
break
;
case
MKTAG
(
0xa9
,
'a'
,
'l'
,
'b'
):
key
=
"album"
;
break
;
case
MKTAG
(
0xa9
,
'd'
,
'a'
,
'y'
):
key
=
"year"
;
break
;
case
MKTAG
(
0xa9
,
'g'
,
'e'
,
'n'
):
key
=
"genre"
;
break
;
case
MKTAG
(
0xa9
,
't'
,
'o'
,
'o'
):
case
MKTAG
(
0xa9
,
'e'
,
'n'
,
'c'
):
key
=
"muxer"
;
break
;
}
if
(
c
->
itunes_metadata
&&
atom
.
size
>
8
)
{
int
data_size
=
get_be32
(
pb
);
int
tag
=
get_le32
(
pb
);
if
(
tag
==
MKTAG
(
'd'
,
'a'
,
't'
,
'a'
))
{
get_be32
(
pb
);
// type
get_be32
(
pb
);
// unknown
str_size
=
data_size
-
16
;
atom
.
size
-=
16
;
}
else
return
0
;
}
else
if
(
atom
.
size
>
4
&&
key
&&
!
c
->
itunes_metadata
)
{
str_size
=
get_be16
(
pb
);
// string length
ff_mov_lang_to_iso639
(
get_be16
(
pb
),
language
);
atom
.
size
-=
4
;
}
else
str_size
=
atom
.
size
;
#ifdef MOV_EXPORT_ALL_METADATA
if
(
!
key
)
{
snprintf
(
tmp_key
,
5
,
"%.4s"
,
(
char
*
)
&
atom
.
type
);
key
=
tmp_key
;
}
#endif
if
(
!
key
)
return
0
;
if
(
atom
.
size
<
0
)
return
-
1
;
str_size
=
FFMIN3
(
sizeof
(
str
)
-
1
,
str_size
,
atom
.
size
);
get_buffer
(
pb
,
str
,
str_size
);
str
[
str_size
]
=
0
;
av_metadata_set
(
&
c
->
fc
->
metadata
,
key
,
str
);
if
(
*
language
&&
strcmp
(
language
,
"und"
))
{
snprintf
(
key2
,
sizeof
(
key2
),
"%s-%s"
,
key
,
language
);
av_metadata_set
(
&
c
->
fc
->
metadata
,
key2
,
str
);
}
#ifdef DEBUG_METADATA
av_log
(
c
->
fc
,
AV_LOG_DEBUG
,
"lang
\"
%3s
\"
"
,
language
);
av_log
(
c
->
fc
,
AV_LOG_DEBUG
,
"tag
\"
%s
\"
value
\"
%s
\"
atom
\"
%.4s
\"
%d %lld
\n
"
,
key
,
str
,
(
char
*
)
&
atom
.
type
,
str_size
,
atom
.
size
);
#endif
return
0
;
}
static
int
mov_read_default
(
MOVContext
*
c
,
ByteIOContext
*
pb
,
MOVAtom
atom
)
{
...
...
@@ -1372,75 +1439,6 @@ static int mov_read_trkn(MOVContext *c, ByteIOContext *pb, MOVAtom atom)
return
0
;
}
static
int
mov_read_udta_string
(
MOVContext
*
c
,
ByteIOContext
*
pb
,
MOVAtom
atom
)
{
#ifdef MOV_EXPORT_ALL_METADATA
char
tmp_key
[
5
];
#endif
char
str
[
1024
],
key2
[
16
],
language
[
4
]
=
{
0
};
const
char
*
key
=
NULL
;
uint16_t
str_size
;
switch
(
atom
.
type
)
{
case
MKTAG
(
0xa9
,
'n'
,
'a'
,
'm'
):
key
=
"title"
;
break
;
case
MKTAG
(
0xa9
,
'a'
,
'u'
,
't'
):
case
MKTAG
(
0xa9
,
'A'
,
'R'
,
'T'
):
case
MKTAG
(
0xa9
,
'w'
,
'r'
,
't'
):
key
=
"author"
;
break
;
case
MKTAG
(
0xa9
,
'c'
,
'p'
,
'y'
):
key
=
"copyright"
;
break
;
case
MKTAG
(
0xa9
,
'c'
,
'm'
,
't'
):
case
MKTAG
(
0xa9
,
'i'
,
'n'
,
'f'
):
key
=
"comment"
;
break
;
case
MKTAG
(
0xa9
,
'a'
,
'l'
,
'b'
):
key
=
"album"
;
break
;
case
MKTAG
(
0xa9
,
'd'
,
'a'
,
'y'
):
key
=
"year"
;
break
;
case
MKTAG
(
0xa9
,
'g'
,
'e'
,
'n'
):
key
=
"genre"
;
break
;
case
MKTAG
(
0xa9
,
't'
,
'o'
,
'o'
):
case
MKTAG
(
0xa9
,
'e'
,
'n'
,
'c'
):
key
=
"muxer"
;
break
;
}
if
(
c
->
itunes_metadata
&&
atom
.
size
>
8
)
{
int
data_size
=
get_be32
(
pb
);
int
tag
=
get_le32
(
pb
);
if
(
tag
==
MKTAG
(
'd'
,
'a'
,
't'
,
'a'
))
{
get_be32
(
pb
);
// type
get_be32
(
pb
);
// unknown
str_size
=
data_size
-
16
;
atom
.
size
-=
16
;
}
else
return
0
;
}
else
if
(
atom
.
size
>
4
&&
key
&&
!
c
->
itunes_metadata
)
{
str_size
=
get_be16
(
pb
);
// string length
ff_mov_lang_to_iso639
(
get_be16
(
pb
),
language
);
atom
.
size
-=
4
;
}
else
str_size
=
atom
.
size
;
#ifdef MOV_EXPORT_ALL_METADATA
if
(
!
key
)
{
snprintf
(
tmp_key
,
5
,
"%.4s"
,
(
char
*
)
&
atom
.
type
);
key
=
tmp_key
;
}
#endif
if
(
!
key
)
return
0
;
if
(
atom
.
size
<
0
)
return
-
1
;
str_size
=
FFMIN3
(
sizeof
(
str
)
-
1
,
str_size
,
atom
.
size
);
get_buffer
(
pb
,
str
,
str_size
);
str
[
str_size
]
=
0
;
av_metadata_set
(
&
c
->
fc
->
metadata
,
key
,
str
);
if
(
*
language
&&
strcmp
(
language
,
"und"
))
{
snprintf
(
key2
,
sizeof
(
key2
),
"%s-%s"
,
key
,
language
);
av_metadata_set
(
&
c
->
fc
->
metadata
,
key2
,
str
);
}
#ifdef DEBUG_METADATA
av_log
(
c
->
fc
,
AV_LOG_DEBUG
,
"lang
\"
%3s
\"
"
,
language
);
av_log
(
c
->
fc
,
AV_LOG_DEBUG
,
"tag
\"
%s
\"
value
\"
%s
\"
atom
\"
%.4s
\"
%d %lld
\n
"
,
key
,
str
,
(
char
*
)
&
atom
.
type
,
str_size
,
atom
.
size
);
#endif
return
0
;
}
static
int
mov_read_tkhd
(
MOVContext
*
c
,
ByteIOContext
*
pb
,
MOVAtom
atom
)
{
int
i
;
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录