Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
小白菜888
Ffmpeg
提交
e5526b2c
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,发现更多精彩内容 >>
提交
e5526b2c
编写于
7月 15, 2003
作者:
F
Fabrice Bellard
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
fixed NTP generation for mpeg
Originally committed as revision 2046 to
svn://svn.ffmpeg.org/ffmpeg/trunk
上级
b6892136
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
24 addition
and
7 deletion
+24
-7
libavformat/rtp.c
libavformat/rtp.c
+24
-7
未找到文件。
libavformat/rtp.c
浏览文件 @
e5526b2c
...
...
@@ -98,6 +98,7 @@ typedef struct RTPContext {
int
max_payload_size
;
/* rtcp sender statistics receive */
int64_t
last_rtcp_ntp_time
;
int64_t
first_rtcp_ntp_time
;
uint32_t
last_rtcp_timestamp
;
/* rtcp sender statistics */
unsigned
int
packet_count
;
...
...
@@ -189,7 +190,7 @@ static inline uint32_t decode_be32(const uint8_t *p)
return
(
p
[
0
]
<<
24
)
|
(
p
[
1
]
<<
16
)
|
(
p
[
2
]
<<
8
)
|
p
[
3
];
}
static
inline
uint
32
_t
decode_be64
(
const
uint8_t
*
p
)
static
inline
uint
64
_t
decode_be64
(
const
uint8_t
*
p
)
{
return
((
uint64_t
)
decode_be32
(
p
)
<<
32
)
|
decode_be32
(
p
+
4
);
}
...
...
@@ -201,6 +202,8 @@ static int rtcp_parse_packet(AVFormatContext *s1, const unsigned char *buf, int
if
(
buf
[
1
]
!=
200
)
return
-
1
;
s
->
last_rtcp_ntp_time
=
decode_be64
(
buf
+
8
);
if
(
s
->
first_rtcp_ntp_time
==
AV_NOPTS_VALUE
)
s
->
first_rtcp_ntp_time
=
s
->
last_rtcp_ntp_time
;
s
->
last_rtcp_timestamp
=
decode_be32
(
buf
+
16
);
return
0
;
}
...
...
@@ -298,11 +301,23 @@ int rtp_parse_packet(AVFormatContext *s1, AVPacket *pkt,
break
;
}
if
(
s
->
last_rtcp_ntp_time
!=
AV_NOPTS_VALUE
)
{
/* compute pts from timestamp with received ntp_time */
delta_timestamp
=
timestamp
-
s
->
last_rtcp_timestamp
;
/* XXX: do conversion, but not needed for mpeg at 90 KhZ */
pkt
->
pts
=
s
->
last_rtcp_ntp_time
+
delta_timestamp
;
switch
(
st
->
codec
.
codec_id
)
{
case
CODEC_ID_MP2
:
case
CODEC_ID_MPEG1VIDEO
:
if
(
s
->
last_rtcp_ntp_time
!=
AV_NOPTS_VALUE
)
{
int64_t
addend
;
/* XXX: is it really necessary to unify the timestamp base ? */
/* compute pts from timestamp with received ntp_time */
delta_timestamp
=
timestamp
-
s
->
last_rtcp_timestamp
;
/* convert to 90 kHz without overflow */
addend
=
(
s
->
last_rtcp_ntp_time
-
s
->
first_rtcp_ntp_time
)
>>
14
;
addend
=
(
addend
*
5625
)
>>
14
;
pkt
->
pts
=
addend
+
delta_timestamp
;
}
break
;
default:
/* no timestamp info yet */
break
;
}
return
0
;
}
...
...
@@ -313,6 +328,7 @@ static int rtp_read_header(AVFormatContext *s1,
RTPContext
*
s
=
s1
->
priv_data
;
s
->
payload_type
=
-
1
;
s
->
last_rtcp_ntp_time
=
AV_NOPTS_VALUE
;
s
->
first_rtcp_ntp_time
=
AV_NOPTS_VALUE
;
return
0
;
}
...
...
@@ -613,7 +629,8 @@ static int rtp_write_packet(AVFormatContext *s1, int stream_index,
RTCP_TX_RATIO_DEN
;
if
(
s
->
first_packet
||
rtcp_bytes
>=
28
)
{
/* compute NTP time */
ntp_time
=
force_pts
;
// ((int64_t)force_pts << 28) / 5625
/* XXX: 90 kHz timestamp hardcoded */
ntp_time
=
((
int64_t
)
force_pts
<<
28
)
/
5625
;
rtcp_send_sr
(
s1
,
ntp_time
);
s
->
last_octet_count
=
s
->
octet_count
;
s
->
first_packet
=
0
;
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录