# HG changeset patch # User rbultje # Date 1266361203 0 # Node ID 57ef8feb5745130a81a5537f140ed4b9d028f808 # Parent 93b0d64bf0c9728d6cdd36ed9e780c7ea550b942 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 . diff -r 93b0d64bf0c9 -r 57ef8feb5745 rtpdec.c --- 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; } } diff -r 93b0d64bf0c9 -r 57ef8feb5745 rtpdec.h --- 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 */