Commit fc78b0cb authored by Ronald S. Bultje's avatar Ronald S. Bultje

Remove first_rtcp_ntp_time. This is used to prevent overflow of the timestamp,

but doesn't actually do that. What's worse, it creates timestamp adjustments
that are different per stream within a session, leading to a/v sync issues.

See discussion in thread "[FFmpeg-devel] rtp streaming x264+audio issues (and
some ideas to fix them)". Patch suggested by Luca Abeni <lucabe72 email it>.

Originally committed as revision 21857 to svn://svn.ffmpeg.org/ffmpeg/trunk
parent 9c8fa20d
...@@ -79,8 +79,6 @@ static int rtcp_parse_packet(RTPDemuxContext *s, const unsigned char *buf, int l ...@@ -79,8 +79,6 @@ static int rtcp_parse_packet(RTPDemuxContext *s, const unsigned char *buf, int l
if (buf[1] != 200) if (buf[1] != 200)
return -1; return -1;
s->last_rtcp_ntp_time = AV_RB64(buf + 8); s->last_rtcp_ntp_time = AV_RB64(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 = AV_RB32(buf + 16); s->last_rtcp_timestamp = AV_RB32(buf + 16);
return 0; return 0;
} }
...@@ -327,7 +325,6 @@ RTPDemuxContext *rtp_parse_open(AVFormatContext *s1, AVStream *st, URLContext *r ...@@ -327,7 +325,6 @@ RTPDemuxContext *rtp_parse_open(AVFormatContext *s1, AVStream *st, URLContext *r
return NULL; return NULL;
s->payload_type = payload_type; s->payload_type = payload_type;
s->last_rtcp_ntp_time = AV_NOPTS_VALUE; s->last_rtcp_ntp_time = AV_NOPTS_VALUE;
s->first_rtcp_ntp_time = AV_NOPTS_VALUE;
s->ic = s1; s->ic = s1;
s->st = st; s->st = st;
s->rtp_payload_data = rtp_payload_data; s->rtp_payload_data = rtp_payload_data;
...@@ -431,7 +428,7 @@ static void finalize_packet(RTPDemuxContext *s, AVPacket *pkt, uint32_t timestam ...@@ -431,7 +428,7 @@ static void finalize_packet(RTPDemuxContext *s, AVPacket *pkt, uint32_t timestam
/* compute pts from timestamp with received ntp_time */ /* compute pts from timestamp with received ntp_time */
delta_timestamp = timestamp - s->last_rtcp_timestamp; delta_timestamp = timestamp - s->last_rtcp_timestamp;
/* convert to the PTS timebase */ /* convert to the PTS timebase */
addend = av_rescale(s->last_rtcp_ntp_time - s->first_rtcp_ntp_time, s->st->time_base.den, (uint64_t)s->st->time_base.num << 32); addend = av_rescale(s->last_rtcp_ntp_time, s->st->time_base.den, (uint64_t)s->st->time_base.num << 32);
pkt->pts = addend + delta_timestamp; pkt->pts = addend + delta_timestamp;
} }
} }
......
...@@ -169,7 +169,6 @@ struct RTPDemuxContext { ...@@ -169,7 +169,6 @@ struct RTPDemuxContext {
/* rtcp sender statistics receive */ /* rtcp sender statistics receive */
int64_t last_rtcp_ntp_time; // TODO: move into statistics int64_t last_rtcp_ntp_time; // TODO: move into statistics
int64_t first_rtcp_ntp_time; // TODO: move into statistics
uint32_t last_rtcp_timestamp; // TODO: move into statistics uint32_t last_rtcp_timestamp; // TODO: move into statistics
/* rtcp sender statistics */ /* rtcp sender statistics */
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment