changeset 5666:57ef8feb5745 libavformat

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>.
author rbultje
date Tue, 16 Feb 2010 23:00:03 +0000
parents 93b0d64bf0c9
children 9b2e63adc0fa
files rtpdec.c rtpdec.h
diffstat 2 files changed, 1 insertions(+), 5 deletions(-) [+]
line wrap: on
line diff
--- a/rtpdec.c	Tue Feb 16 22:50:50 2010 +0000
+++ b/rtpdec.c	Tue Feb 16 23:00:03 2010 +0000
@@ -79,8 +79,6 @@
     if (buf[1] != 200)
         return -1;
     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);
     return 0;
 }
@@ -327,7 +325,6 @@
         return NULL;
     s->payload_type = payload_type;
     s->last_rtcp_ntp_time = AV_NOPTS_VALUE;
-    s->first_rtcp_ntp_time = AV_NOPTS_VALUE;
     s->ic = s1;
     s->st = st;
     s->rtp_payload_data = rtp_payload_data;
@@ -431,7 +428,7 @@
         /* compute pts from timestamp with received ntp_time */
         delta_timestamp = timestamp - s->last_rtcp_timestamp;
         /* 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;
     }
 }
--- a/rtpdec.h	Tue Feb 16 22:50:50 2010 +0000
+++ b/rtpdec.h	Tue Feb 16 23:00:03 2010 +0000
@@ -169,7 +169,6 @@
 
     /* rtcp sender statistics receive */
     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
 
     /* rtcp sender statistics */