Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
小白菜888
Ffmpeg
提交
ac066b83
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,发现更多精彩内容 >>
提交
ac066b83
编写于
7月 29, 2010
作者:
A
Aurelien Jacobs
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
add seeking support in ASS demuxer
Originally committed as revision 24578 to
svn://svn.ffmpeg.org/ffmpeg/trunk
上级
530bbe96
变更
1
显示空白变更内容
内联
并排
Showing
1 changed file
with
41 addition
and
1 deletion
+41
-1
libavformat/assdec.c
libavformat/assdec.c
+41
-1
未找到文件。
libavformat/assdec.c
浏览文件 @
ac066b83
...
...
@@ -162,6 +162,46 @@ static int read_packet(AVFormatContext *s, AVPacket *pkt)
return
0
;
}
static
int
read_seek2
(
AVFormatContext
*
s
,
int
stream_index
,
int64_t
min_ts
,
int64_t
ts
,
int64_t
max_ts
,
int
flags
)
{
ASSContext
*
ass
=
s
->
priv_data
;
if
(
flags
&
AVSEEK_FLAG_BYTE
)
{
return
AVERROR_NOTSUPP
;
}
else
if
(
flags
&
AVSEEK_FLAG_FRAME
)
{
if
(
ts
<
0
||
ts
>=
ass
->
event_count
)
return
AVERROR
(
ERANGE
);
ass
->
event_index
=
ts
;
}
else
{
int
i
,
idx
=
-
1
;
int64_t
min_ts_diff
=
INT64_MAX
;
if
(
stream_index
==
-
1
)
{
AVRational
time_base
=
s
->
streams
[
0
]
->
time_base
;
ts
=
av_rescale_q
(
ts
,
AV_TIME_BASE_Q
,
time_base
);
min_ts
=
av_rescale_rnd
(
min_ts
,
time_base
.
den
,
time_base
.
num
*
(
int64_t
)
AV_TIME_BASE
,
AV_ROUND_UP
);
max_ts
=
av_rescale_rnd
(
max_ts
,
time_base
.
den
,
time_base
.
num
*
(
int64_t
)
AV_TIME_BASE
,
AV_ROUND_DOWN
);
}
/* TODO: ass->event[] is sorted by pts so we could do a binary search */
for
(
i
=
0
;
i
<
ass
->
event_count
;
i
++
)
{
int64_t
pts
=
get_pts
(
ass
->
event
[
i
]);
int64_t
ts_diff
=
FFABS
(
pts
-
ts
);
if
(
pts
>=
min_ts
&&
pts
<=
max_ts
&&
ts_diff
<
min_ts_diff
)
{
min_ts_diff
=
ts_diff
;
idx
=
i
;
}
}
if
(
idx
<
0
)
return
AVERROR
(
ERANGE
);
ass
->
event_index
=
idx
;
}
return
0
;
}
AVInputFormat
ass_demuxer
=
{
"ass"
,
NULL_IF_CONFIG_SMALL
(
"Advanced SubStation Alpha subtitle format"
),
...
...
@@ -170,5 +210,5 @@ AVInputFormat ass_demuxer = {
read_header
,
read_packet
,
read_close
,
// read_seek
,
.
read_seek2
=
read_seek2
,
};
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录