Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
小白菜888
Ffmpeg
提交
4fabb60d
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,发现更多精彩内容 >>
提交
4fabb60d
编写于
4月 22, 2009
作者:
J
Jai Menon
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
NSV : Add TOC2 parsing and seeking support.
Originally committed as revision 18662 to
svn://svn.ffmpeg.org/ffmpeg/trunk
上级
6c73a7d0
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
40 addition
and
14 deletion
+40
-14
libavformat/nsvdec.c
libavformat/nsvdec.c
+40
-14
未找到文件。
libavformat/nsvdec.c
浏览文件 @
4fabb60d
...
...
@@ -181,6 +181,7 @@ typedef struct {
uint16_t
vwidth
,
vheight
;
int16_t
avsync
;
AVRational
framerate
;
uint32_t
*
nsvs_timestamps
;
//DVDemuxContext* dv_demux;
}
NSVContext
;
...
...
@@ -348,12 +349,22 @@ static int nsv_parse_NSVf_header(AVFormatContext *s, AVFormatParameters *ap)
PRINT
((
"NSV got infos; filepos %"
PRId64
"
\n
"
,
url_ftell
(
pb
)));
if
(
table_entries_used
>
0
)
{
int
i
;
nsv
->
index_entries
=
table_entries_used
;
if
((
unsigned
)
table_entries
>=
UINT_MAX
/
sizeof
(
uint32_t
))
if
((
unsigned
)
table_entries
_used
>=
UINT_MAX
/
sizeof
(
uint32_t
))
return
-
1
;
nsv
->
nsvs_file_offset
=
av_malloc
(
table_entries
*
sizeof
(
uint32_t
));
#warning "FIXME: Byteswap buffer as needed"
get_buffer
(
pb
,
(
unsigned
char
*
)
nsv
->
nsvs_file_offset
,
table_entries
*
sizeof
(
uint32_t
));
nsv
->
nsvs_file_offset
=
av_malloc
((
unsigned
)
table_entries_used
*
sizeof
(
uint32_t
));
for
(
i
=
0
;
i
<
table_entries_used
;
i
++
)
nsv
->
nsvs_file_offset
[
i
]
=
get_le32
(
pb
)
+
size
;
if
(
table_entries
>
table_entries_used
&&
get_le32
(
pb
)
==
MKTAG
(
'T'
,
'O'
,
'C'
,
'2'
))
{
nsv
->
nsvs_timestamps
=
av_malloc
((
unsigned
)
table_entries_used
*
sizeof
(
uint32_t
));
for
(
i
=
0
;
i
<
table_entries_used
;
i
++
)
{
nsv
->
nsvs_timestamps
[
i
]
=
get_le32
(
pb
);
}
}
}
PRINT
((
"NSV got index; filepos %"
PRId64
"
\n
"
,
url_ftell
(
pb
)));
...
...
@@ -436,6 +447,7 @@ static int nsv_parse_NSVs_header(AVFormatContext *s, AVFormatParameters *ap)
nsv
->
vwidth
=
vwidth
;
nsv
->
vheight
=
vwidth
;
if
(
vtag
!=
T_NONE
)
{
int
i
;
st
=
av_new_stream
(
s
,
NSV_ST_VIDEO
);
if
(
!
st
)
goto
fail
;
...
...
@@ -454,6 +466,16 @@ static int nsv_parse_NSVs_header(AVFormatContext *s, AVFormatParameters *ap)
av_set_pts_info
(
st
,
64
,
framerate
.
den
,
framerate
.
num
);
st
->
start_time
=
0
;
st
->
duration
=
av_rescale
(
nsv
->
duration
,
framerate
.
num
,
1000
*
framerate
.
den
);
for
(
i
=
0
;
i
<
nsv
->
index_entries
;
i
++
)
{
if
(
nsv
->
nsvs_timestamps
)
{
av_add_index_entry
(
st
,
nsv
->
nsvs_file_offset
[
i
],
nsv
->
nsvs_timestamps
[
i
],
0
,
0
,
AVINDEX_KEYFRAME
);
}
else
{
int64_t
ts
=
av_rescale
(
i
*
nsv
->
duration
/
nsv
->
index_entries
,
framerate
.
num
,
1000
*
framerate
.
den
);
av_add_index_entry
(
st
,
nsv
->
nsvs_file_offset
[
i
],
ts
,
0
,
0
,
AVINDEX_KEYFRAME
);
}
}
}
if
(
atag
!=
T_NONE
)
{
#ifndef DISABLE_AUDIO
...
...
@@ -684,15 +706,19 @@ static int nsv_read_packet(AVFormatContext *s, AVPacket *pkt)
static
int
nsv_read_seek
(
AVFormatContext
*
s
,
int
stream_index
,
int64_t
timestamp
,
int
flags
)
{
#if 0
NSVContext *avi = s->priv_data;
AVStream *st;
NSVStream *ast;
int frame_number, i;
int64_t pos;
#endif
NSVContext
*
nsv
=
s
->
priv_data
;
AVStream
*
st
=
s
->
streams
[
stream_index
];
NSVStream
*
nst
=
st
->
priv_data
;
int
index
;
return
-
1
;
index
=
av_index_search_timestamp
(
st
,
timestamp
,
flags
);
if
(
index
<
0
)
return
-
1
;
url_fseek
(
s
->
pb
,
st
->
index_entries
[
index
].
pos
,
SEEK_SET
);
nst
->
frame_offset
=
st
->
index_entries
[
index
].
timestamp
;
nsv
->
state
=
NSV_UNSYNC
;
return
0
;
}
static
int
nsv_read_close
(
AVFormatContext
*
s
)
...
...
@@ -700,8 +726,8 @@ static int nsv_read_close(AVFormatContext *s)
/* int i; */
NSVContext
*
nsv
=
s
->
priv_data
;
if
(
nsv
->
index_entries
)
av_free
(
nsv
->
nsvs_file_offset
);
av_freep
(
&
nsv
->
nsvs_file_offset
);
av_freep
(
&
nsv
->
nsvs_timestamps
);
#if 0
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录