Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
小白菜888
Ffmpeg
提交
bc17df09
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,发现更多精彩内容 >>
提交
bc17df09
编写于
12月 06, 2004
作者:
M
Michael Niedermayer
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
seeking in rm
Originally committed as revision 3737 to
svn://svn.ffmpeg.org/ffmpeg/trunk
上级
80016c48
变更
2
显示空白变更内容
内联
并排
Showing
2 changed file
with
102 addition
and
44 deletion
+102
-44
libavcodec/rv10.c
libavcodec/rv10.c
+14
-5
libavformat/rm.c
libavformat/rm.c
+88
-39
未找到文件。
libavcodec/rv10.c
浏览文件 @
bc17df09
...
...
@@ -400,20 +400,28 @@ static int rv20_decode_picture_header(MpegEncContext *s)
}
if
(
s
->
avctx
->
has_b_frames
){
int
f1
=
9
;
int
f2
=
9
;
int
f3
=
9
;
if
(
get_bits
(
&
s
->
gb
,
1
)){
//
av_log(s->avctx, AV_LOG_ERROR, "unknown bit3 set\n");
av_log
(
s
->
avctx
,
AV_LOG_ERROR
,
"unknown bit3 set
\n
"
);
// return -1;
}
seq
=
get_bits
(
&
s
->
gb
,
14
)
<<
1
;
if
(
s
->
avctx
->
extradata_size
>=
4
&&
((
uint8_t
*
)
s
->
avctx
->
extradata
)[
1
]
&
1
){
get_bits
(
&
s
->
gb
,
1
);
f1
=
get_bits
(
&
s
->
gb
,
1
);
}
if
(
s
->
avctx
->
extradata_size
>=
4
&&
((
uint8_t
*
)
s
->
avctx
->
extradata
)[
1
]
&
2
){
get_bits
(
&
s
->
gb
,
1
);
f2
=
get_bits
(
&
s
->
gb
,
1
);
}
if
(
s
->
avctx
->
extradata_size
>=
4
&&
((
uint8_t
*
)
s
->
avctx
->
extradata
)[
1
]
&
4
){
get_bits
(
&
s
->
gb
,
2
);
f3
=
get_bits
(
&
s
->
gb
,
2
);
}
if
(
s
->
avctx
->
debug
&
FF_DEBUG_PICT_INFO
){
av_log
(
s
->
avctx
,
AV_LOG_DEBUG
,
"F %d %d %d
\n
"
,
f1
,
f2
,
f3
);
}
mb_pos
=
get_bits
(
&
s
->
gb
,
av_log2
(
s
->
mb_num
-
1
)
+
1
);
...
...
@@ -733,6 +741,7 @@ AVCodec rv20_decoder = {
NULL
,
rv10_decode_end
,
rv10_decode_frame
,
CODEC_CAP_DR1
CODEC_CAP_DR1
,
.
flush
=
ff_mpeg_flush
,
};
libavformat/rm.c
浏览文件 @
bc17df09
...
...
@@ -720,56 +720,35 @@ static int get_num(ByteIOContext *pb, int *len)
/* multiple of 20 bytes for ra144 (ugly) */
#define RAW_PACKET_SIZE 1000
static
int
rm_read_packet
(
AVFormatContext
*
s
,
AVPacket
*
pkt
)
{
static
int
sync
(
AVFormatContext
*
s
,
int64_t
*
timestamp
,
int
*
flags
,
int
*
stream_index
){
RMContext
*
rm
=
s
->
priv_data
;
ByteIOContext
*
pb
=
&
s
->
pb
;
int
len
,
num
,
res
,
i
;
AVStream
*
st
;
int
num
,
i
,
len
,
tmp
,
j
;
int64_t
timestamp
;
uint8_t
*
ptr
;
int
flags
,
res
;
if
(
rm
->
old_format
)
{
/* just read raw bytes */
len
=
RAW_PACKET_SIZE
;
av_new_packet
(
pkt
,
len
);
pkt
->
stream_index
=
0
;
len
=
get_buffer
(
pb
,
pkt
->
data
,
len
);
if
(
len
<=
0
)
{
av_free_packet
(
pkt
);
return
AVERROR_IO
;
}
pkt
->
size
=
len
;
st
=
s
->
streams
[
0
];
}
else
{
redo:
if
(
url_feof
(
pb
))
return
AVERROR_IO
;
while
(
!
url_feof
(
pb
)){
if
(
rm
->
remaining_len
>
0
){
num
=
rm
->
current_stream
;
len
=
rm
->
remaining_len
;
timestamp
=
AV_NOPTS_VALUE
;
flags
=
0
;
*
timestamp
=
AV_NOPTS_VALUE
;
*
flags
=
0
;
}
else
{
if
(
get_byte
(
pb
))
goto
redo
;
continue
;
if
(
get_byte
(
pb
))
goto
redo
;
continue
;
len
=
get_be16
(
pb
);
if
(
len
<
12
)
goto
redo
;
continue
;
num
=
get_be16
(
pb
);
timestamp
=
get_be32
(
pb
);
*
timestamp
=
get_be32
(
pb
);
res
=
get_byte
(
pb
);
/* reserved */
flags
=
get_byte
(
pb
);
/* flags */
*
flags
=
get_byte
(
pb
);
/* flags */
//
av_log(s, AV_LOG_DEBUG, "%d %d %X %d\n", num, timestamp,
flags, res);
//
av_log(s, AV_LOG_DEBUG, "%d %Ld %X %X\n", num, *timestamp, *
flags, res);
len
-=
12
;
}
st
=
NULL
;
for
(
i
=
0
;
i
<
s
->
nb_streams
;
i
++
)
{
st
=
s
->
streams
[
i
];
if
(
num
==
st
->
id
)
...
...
@@ -778,8 +757,43 @@ static int rm_read_packet(AVFormatContext *s, AVPacket *pkt)
if
(
i
==
s
->
nb_streams
)
{
/* skip packet if unknown number */
url_fskip
(
pb
,
len
);
goto
redo
;
rm
->
remaining_len
-=
len
;
continue
;
}
*
stream_index
=
i
;
return
len
;
}
return
-
1
;
}
static
int
rm_read_packet
(
AVFormatContext
*
s
,
AVPacket
*
pkt
)
{
RMContext
*
rm
=
s
->
priv_data
;
ByteIOContext
*
pb
=
&
s
->
pb
;
AVStream
*
st
;
int
i
,
len
,
tmp
,
j
;
int64_t
timestamp
;
uint8_t
*
ptr
;
int
flags
;
if
(
rm
->
old_format
)
{
/* just read raw bytes */
len
=
RAW_PACKET_SIZE
;
av_new_packet
(
pkt
,
len
);
pkt
->
stream_index
=
0
;
len
=
get_buffer
(
pb
,
pkt
->
data
,
len
);
if
(
len
<=
0
)
{
av_free_packet
(
pkt
);
return
AVERROR_IO
;
}
pkt
->
size
=
len
;
st
=
s
->
streams
[
0
];
}
else
{
len
=
sync
(
s
,
&
timestamp
,
&
flags
,
&
i
);
if
(
len
<
0
)
return
AVERROR_IO
;
st
=
s
->
streams
[
i
];
if
(
st
->
codec
.
codec_type
==
CODEC_TYPE_VIDEO
)
{
int
h
,
pic_num
,
len2
,
pos
;
...
...
@@ -861,6 +875,39 @@ static int rm_probe(AVProbeData *p)
return
0
;
}
static
int64_t
rm_read_dts
(
AVFormatContext
*
s
,
int
stream_index
,
int64_t
*
ppos
,
int64_t
pos_limit
)
{
RMContext
*
rm
=
s
->
priv_data
;
int64_t
pos
,
dts
;
int
stream_index2
,
flags
,
len
;
pos
=
*
ppos
;
if
(
rm
->
old_format
)
return
AV_NOPTS_VALUE
;
url_fseek
(
&
s
->
pb
,
pos
,
SEEK_SET
);
rm
->
remaining_len
=
0
;
for
(;;){
pos
=
url_ftell
(
&
s
->
pb
);
len
=
sync
(
s
,
&
dts
,
&
flags
,
&
stream_index2
);
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
;
}
}
url_fskip
(
&
s
->
pb
,
len
);
}
*
ppos
=
pos
;
return
dts
;
}
static
AVInputFormat
rm_iformat
=
{
"rm"
,
"rm format"
,
...
...
@@ -869,6 +916,8 @@ static AVInputFormat rm_iformat = {
rm_read_header
,
rm_read_packet
,
rm_read_close
,
NULL
,
rm_read_dts
,
};
#ifdef CONFIG_ENCODERS
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录