Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
小白菜888
Ffmpeg
提交
37e85dac
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,发现更多精彩内容 >>
提交
37e85dac
编写于
12月 06, 2004
作者:
M
Michael Niedermayer
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
seeking in rm 2nd try
Originally committed as revision 3738 to
svn://svn.ffmpeg.org/ffmpeg/trunk
上级
bc17df09
变更
1
显示空白变更内容
内联
并排
Showing
1 changed file
with
31 addition
and
17 deletion
+31
-17
libavformat/rm.c
libavformat/rm.c
+31
-17
未找到文件。
libavformat/rm.c
浏览文件 @
37e85dac
...
...
@@ -720,13 +720,14 @@ static int get_num(ByteIOContext *pb, int *len)
/* multiple of 20 bytes for ra144 (ugly) */
#define RAW_PACKET_SIZE 1000
static
int
sync
(
AVFormatContext
*
s
,
int64_t
*
timestamp
,
int
*
flags
,
int
*
stream_index
){
static
int
sync
(
AVFormatContext
*
s
,
int64_t
*
timestamp
,
int
*
flags
,
int
*
stream_index
,
int64_t
*
pos
){
RMContext
*
rm
=
s
->
priv_data
;
ByteIOContext
*
pb
=
&
s
->
pb
;
int
len
,
num
,
res
,
i
;
AVStream
*
st
;
while
(
!
url_feof
(
pb
)){
*
pos
=
url_ftell
(
pb
);
if
(
rm
->
remaining_len
>
0
){
num
=
rm
->
current_stream
;
len
=
rm
->
remaining_len
;
...
...
@@ -745,7 +746,6 @@ static int sync(AVFormatContext *s, int64_t *timestamp, int *flags, int *stream_
res
=
get_byte
(
pb
);
/* reserved */
*
flags
=
get_byte
(
pb
);
/* flags */
// av_log(s, AV_LOG_DEBUG, "%d %Ld %X %X\n", num, *timestamp, *flags, res);
len
-=
12
;
}
...
...
@@ -773,7 +773,7 @@ static int rm_read_packet(AVFormatContext *s, AVPacket *pkt)
ByteIOContext
*
pb
=
&
s
->
pb
;
AVStream
*
st
;
int
i
,
len
,
tmp
,
j
;
int64_t
timestamp
;
int64_t
timestamp
,
pos
;
uint8_t
*
ptr
;
int
flags
;
...
...
@@ -790,7 +790,9 @@ static int rm_read_packet(AVFormatContext *s, AVPacket *pkt)
pkt
->
size
=
len
;
st
=
s
->
streams
[
0
];
}
else
{
len
=
sync
(
s
,
&
timestamp
,
&
flags
,
&
i
);
int
seq
=
1
;
len
=
sync
(
s
,
&
timestamp
,
&
flags
,
&
i
,
&
pos
);
if
(
len
<
0
)
return
AVERROR_IO
;
st
=
s
->
streams
[
i
];
...
...
@@ -800,8 +802,7 @@ static int rm_read_packet(AVFormatContext *s, AVPacket *pkt)
h
=
get_byte
(
pb
);
len
--
;
if
(
!
(
h
&
0x40
)){
int
seq
=
get_byte
(
pb
);
len
--
;
seq
=
get_byte
(
pb
);
len
--
;
}
if
((
h
&
0xc0
)
==
0x40
){
...
...
@@ -838,8 +839,11 @@ static int rm_read_packet(AVFormatContext *s, AVPacket *pkt)
}
#endif
pkt
->
pts
=
timestamp
;
if
(
flags
&
2
)
if
(
flags
&
2
)
{
pkt
->
flags
|=
PKT_FLAG_KEY
;
if
((
seq
&
0x7F
)
==
1
)
av_add_index_entry
(
st
,
pos
,
timestamp
,
0
,
AVINDEX_KEYFRAME
);
}
}
/* for AC3, needs to swap bytes */
...
...
@@ -880,7 +884,7 @@ static int64_t rm_read_dts(AVFormatContext *s, int stream_index,
{
RMContext
*
rm
=
s
->
priv_data
;
int64_t
pos
,
dts
;
int
stream_index2
,
flags
,
len
;
int
stream_index2
,
flags
,
len
,
h
;
pos
=
*
ppos
;
...
...
@@ -890,18 +894,28 @@ static int64_t rm_read_dts(AVFormatContext *s, int stream_index,
url_fseek
(
&
s
->
pb
,
pos
,
SEEK_SET
);
rm
->
remaining_len
=
0
;
for
(;;){
pos
=
url_ftell
(
&
s
->
pb
);
len
=
sync
(
s
,
&
dts
,
&
flags
,
&
stream_index2
);
int
seq
=
1
;
AVStream
*
st
;
len
=
sync
(
s
,
&
dts
,
&
flags
,
&
stream_index2
,
&
pos
);
if
(
len
<
0
)
return
AV_NOPTS_VALUE
;
av_log
(
s
,
AV_LOG_DEBUG
,
"%d %d-%d %Ld
\n
"
,
flags
,
stream_index2
,
stream_index
,
dts
);
if
(
flags
&
2
){
av_add_index_entry
(
s
->
streams
[
stream_index2
],
pos
,
dts
,
0
,
AVINDEX_KEYFRAME
);
if
(
stream_index2
==
stream_index
){
break
;
st
=
s
->
streams
[
stream_index2
];
if
(
st
->
codec
.
codec_type
==
CODEC_TYPE_VIDEO
)
{
h
=
get_byte
(
&
s
->
pb
);
len
--
;
if
(
!
(
h
&
0x40
)){
seq
=
get_byte
(
&
s
->
pb
);
len
--
;
}
}
if
((
flags
&
2
)
&&
(
seq
&
0x7F
)
==
1
){
// av_log(s, AV_LOG_DEBUG, "%d %d-%d %Ld %d\n", flags, stream_index2, stream_index, dts, seq);
av_add_index_entry
(
st
,
pos
,
dts
,
0
,
AVINDEX_KEYFRAME
);
if
(
stream_index2
==
stream_index
)
break
;
}
url_fskip
(
&
s
->
pb
,
len
);
}
*
ppos
=
pos
;
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录