Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
小白菜888
Ffmpeg
提交
82583548
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,发现更多精彩内容 >>
提交
82583548
编写于
8月 04, 2007
作者:
M
Michael Niedermayer
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
correct initial timestamps which have AV_NOPTS_VALUE
Originally committed as revision 9917 to
svn://svn.ffmpeg.org/ffmpeg/trunk
上级
3bbb0bf8
变更
2
隐藏空白更改
内联
并排
Showing
2 changed file
with
34 addition
and
3 deletion
+34
-3
libavformat/avformat.h
libavformat/avformat.h
+3
-2
libavformat/utils.c
libavformat/utils.c
+31
-1
未找到文件。
libavformat/avformat.h
浏览文件 @
82583548
...
...
@@ -280,9 +280,10 @@ typedef struct AVStream {
*/
AVRational
r_frame_rate
;
void
*
priv_data
;
#if LIBAVFORMAT_VERSION_INT < (52<<16)
/* internal data used in av_find_stream_info() */
int64_t
codec_info_duration
;
int64_t
first_dts
;
#if LIBAVFORMAT_VERSION_INT < (52<<16)
int
codec_info_nb_frames
;
#endif
/** encoding: PTS generation when outputing stream */
...
...
libavformat/utils.c
浏览文件 @
82583548
...
...
@@ -589,6 +589,28 @@ static int is_intra_only(AVCodecContext *enc){
return
0
;
}
static
void
update_initial_timestamps
(
AVFormatContext
*
s
,
int
stream_index
,
int64_t
dts
){
AVStream
*
st
=
s
->
streams
[
stream_index
];
AVPacketList
*
pktl
=
s
->
packet_buffer
;
if
(
st
->
first_dts
!=
AV_NOPTS_VALUE
||
dts
==
AV_NOPTS_VALUE
)
return
;
st
->
first_dts
=
dts
-
st
->
cur_dts
;
st
->
cur_dts
=
dts
;
for
(;
pktl
;
pktl
=
pktl
->
next
){
if
(
pktl
->
pkt
.
stream_index
!=
stream_index
)
continue
;
//FIXME think more about this check
if
(
pktl
->
pkt
.
pts
!=
AV_NOPTS_VALUE
&&
pktl
->
pkt
.
pts
==
pktl
->
pkt
.
dts
)
pktl
->
pkt
.
pts
+=
st
->
first_dts
;
if
(
pktl
->
pkt
.
dts
!=
AV_NOPTS_VALUE
)
pktl
->
pkt
.
dts
+=
st
->
first_dts
;
}
}
static
void
compute_pkt_fields
(
AVFormatContext
*
s
,
AVStream
*
st
,
AVCodecParserContext
*
pc
,
AVPacket
*
pkt
)
{
...
...
@@ -633,7 +655,7 @@ static void compute_pkt_fields(AVFormatContext *s, AVStream *st,
presentation_delayed
=
1
;
if
(
st
->
cur_dts
==
AV_NOPTS_VALUE
){
st
->
cur_dts
=
-
delay
*
pkt
->
duration
;
st
->
cur_dts
=
0
;
//FIXME maybe set it to 0 during init
}
// av_log(NULL, AV_LOG_DEBUG, "IN delayed:%d pts:%"PRId64", dts:%"PRId64" cur_dts:%"PRId64" st:%d pc:%p\n", presentation_delayed, pkt->pts, pkt->dts, st->cur_dts, pkt->stream_index, pc);
...
...
@@ -644,6 +666,7 @@ static void compute_pkt_fields(AVFormatContext *s, AVStream *st,
/* PTS = presentation time stamp */
if
(
pkt
->
dts
==
AV_NOPTS_VALUE
)
pkt
->
dts
=
st
->
last_IP_pts
;
update_initial_timestamps
(
s
,
pkt
->
stream_index
,
pkt
->
dts
);
if
(
pkt
->
dts
==
AV_NOPTS_VALUE
)
pkt
->
dts
=
st
->
cur_dts
;
...
...
@@ -669,6 +692,7 @@ static void compute_pkt_fields(AVFormatContext *s, AVStream *st,
/* presentation is not delayed : PTS and DTS are the same */
if
(
pkt
->
pts
==
AV_NOPTS_VALUE
)
pkt
->
pts
=
pkt
->
dts
;
update_initial_timestamps
(
s
,
pkt
->
stream_index
,
pkt
->
pts
);
if
(
pkt
->
pts
==
AV_NOPTS_VALUE
)
pkt
->
pts
=
st
->
cur_dts
;
pkt
->
dts
=
pkt
->
pts
;
...
...
@@ -684,6 +708,9 @@ static void compute_pkt_fields(AVFormatContext *s, AVStream *st,
FFSWAP
(
int64_t
,
st
->
pts_buffer
[
i
],
st
->
pts_buffer
[
i
+
1
]);
if
(
pkt
->
dts
==
AV_NOPTS_VALUE
)
pkt
->
dts
=
st
->
pts_buffer
[
0
];
if
(
delay
>
1
){
update_initial_timestamps
(
s
,
pkt
->
stream_index
,
pkt
->
dts
);
// this should happen on the first packet
}
if
(
pkt
->
dts
>
st
->
cur_dts
)
st
->
cur_dts
=
pkt
->
dts
;
}
...
...
@@ -1767,6 +1794,8 @@ int av_find_stream_info(AVFormatContext *ic)
if
(
st
->
codec
->
codec_type
==
CODEC_TYPE_AUDIO
&&
st
->
codec
->
codec_id
==
CODEC_ID_NONE
)
break
;
if
(
st
->
first_dts
==
AV_NOPTS_VALUE
)
break
;
}
if
(
i
==
ic
->
nb_streams
)
{
/* NOTE: if the format has no header, then we need to read
...
...
@@ -2050,6 +2079,7 @@ AVStream *av_new_stream(AVFormatContext *s, int id)
st
->
start_time
=
AV_NOPTS_VALUE
;
st
->
duration
=
AV_NOPTS_VALUE
;
st
->
cur_dts
=
AV_NOPTS_VALUE
;
st
->
first_dts
=
AV_NOPTS_VALUE
;
/* default pts settings is MPEG like */
av_set_pts_info
(
st
,
33
,
1
,
90000
);
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录