Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
小白菜888
Ffmpeg
提交
f610a9f2
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,发现更多精彩内容 >>
提交
f610a9f2
编写于
2月 28, 2009
作者:
A
Aurelien Jacobs
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
add a metadata conversion API
Originally committed as revision 17670 to
svn://svn.ffmpeg.org/ffmpeg/trunk
上级
efd8c1f6
变更
3
隐藏空白更改
内联
并排
Showing
3 changed file
with
70 addition
and
2 deletion
+70
-2
libavformat/avformat.h
libavformat/avformat.h
+16
-2
libavformat/metadata.c
libavformat/metadata.c
+49
-0
libavformat/metadata.h
libavformat/metadata.h
+5
-0
未找到文件。
libavformat/avformat.h
浏览文件 @
f610a9f2
...
...
@@ -46,6 +46,8 @@ unsigned avformat_version(void);
#include "avio.h"
struct
AVFormatContext
;
/*
* Public Metadata API.
...
...
@@ -77,6 +79,7 @@ typedef struct {
}
AVMetadataTag
;
typedef
struct
AVMetadata
AVMetadata
;
typedef
struct
AVMetadataConv
AVMetadataConv
;
/**
* Gets a metadata element with matching key.
...
...
@@ -95,6 +98,15 @@ av_metadata_get(AVMetadata *m, const char *key, const AVMetadataTag *prev, int f
*/
int
av_metadata_set
(
AVMetadata
**
pm
,
const
char
*
key
,
const
char
*
value
);
/**
* Convert all the metadata sets from ctx according to the source and
* destination conversion tables.
* @param d_conv destination tags format conversion table
* @param s_conv source tags format conversion table
*/
void
av_metadata_conv
(
struct
AVFormatContext
*
ctx
,
const
AVMetadataConv
*
d_conv
,
const
AVMetadataConv
*
s_conv
);
/**
* Frees all the memory allocated for an AVMetadata struct.
*/
...
...
@@ -220,8 +232,6 @@ typedef struct AVFrac {
struct
AVCodecTag
;
struct
AVFormatContext
;
/** This structure contains the data a format has to probe a file. */
typedef
struct
AVProbeData
{
const
char
*
filename
;
...
...
@@ -299,6 +309,8 @@ typedef struct AVOutputFormat {
enum
CodecID
subtitle_codec
;
/**< default subtitle codec */
AVMetadataConv
*
metadata_conv
;
/* private fields */
struct
AVOutputFormat
*
next
;
}
AVOutputFormat
;
...
...
@@ -378,6 +390,8 @@ typedef struct AVInputFormat {
*/
int
(
*
read_seek2
)(
struct
AVFormatContext
*
s
,
int
stream_index
,
int64_t
min_ts
,
int64_t
ts
,
int64_t
max_ts
,
int
flags
);
AVMetadataConv
*
metadata_conv
;
/* private fields */
struct
AVInputFormat
*
next
;
}
AVInputFormat
;
...
...
libavformat/metadata.c
浏览文件 @
f610a9f2
...
...
@@ -18,6 +18,8 @@
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*/
#include <strings.h>
#include "avformat.h"
#include "metadata.h"
AVMetadataTag
*
...
...
@@ -89,3 +91,50 @@ void av_metadata_free(AVMetadata **pm)
}
av_freep
(
pm
);
}
static
void
metadata_conv
(
AVMetadata
**
pm
,
const
AVMetadataConv
*
d_conv
,
const
AVMetadataConv
*
s_conv
)
{
/* TODO: use binary search to look up the two conversion tables
if the tables are getting big enough that it would matter speed wise */
const
AVMetadataConv
*
s_conv1
=
s_conv
,
*
d_conv1
=
d_conv
,
*
sc
,
*
dc
;
AVMetadataTag
*
mtag
=
NULL
;
AVMetadata
*
dst
=
NULL
;
const
char
*
key
,
*
key2
;
while
((
mtag
=
av_metadata_get
(
*
pm
,
""
,
mtag
,
AV_METADATA_IGNORE_SUFFIX
)))
{
key
=
key2
=
mtag
->
key
;
if
(
s_conv
!=
d_conv
)
{
if
(
!
s_conv
)
s_conv1
=
(
const
AVMetadataConv
[
2
]){{
key
,
key
}};
for
(
sc
=
s_conv1
;
sc
->
native
;
sc
++
)
if
(
!
strcasecmp
(
key
,
sc
->
native
))
{
key2
=
sc
->
generic
;
break
;
}
if
(
!
d_conv
)
d_conv1
=
(
const
AVMetadataConv
[
2
]){{
key2
,
key2
}};
for
(
dc
=
d_conv1
;
dc
->
native
;
dc
++
)
if
(
!
strcasecmp
(
key2
,
dc
->
generic
))
{
key
=
dc
->
native
;
break
;
}
}
av_metadata_set
(
&
dst
,
key
,
mtag
->
value
);
}
av_metadata_free
(
pm
);
*
pm
=
dst
;
}
void
av_metadata_conv
(
AVFormatContext
*
ctx
,
const
AVMetadataConv
*
d_conv
,
const
AVMetadataConv
*
s_conv
)
{
int
i
;
metadata_conv
(
&
ctx
->
metadata
,
d_conv
,
s_conv
);
for
(
i
=
0
;
i
<
ctx
->
nb_streams
;
i
++
)
metadata_conv
(
&
ctx
->
streams
[
i
]
->
metadata
,
d_conv
,
s_conv
);
for
(
i
=
0
;
i
<
ctx
->
nb_chapters
;
i
++
)
metadata_conv
(
&
ctx
->
chapters
[
i
]
->
metadata
,
d_conv
,
s_conv
);
for
(
i
=
0
;
i
<
ctx
->
nb_programs
;
i
++
)
metadata_conv
(
&
ctx
->
programs
[
i
]
->
metadata
,
d_conv
,
s_conv
);
}
libavformat/metadata.h
浏览文件 @
f610a9f2
...
...
@@ -35,6 +35,11 @@ struct AVMetadata{
AVMetadataTag
*
elems
;
};
struct
AVMetadataConv
{
const
char
*
native
;
const
char
*
generic
;
};
#if LIBAVFORMAT_VERSION_MAJOR < 53
void
ff_metadata_demux_compat
(
AVFormatContext
*
s
);
void
ff_metadata_mux_compat
(
AVFormatContext
*
s
);
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录