rtpdec: fix issue with conversion from unsigned to signed
authorGilles Chanteperdrix <gilles.chanteperdrix@xenomai.org>
Fri, 20 Feb 2015 06:14:53 +0000 (07:14 +0100)
committerMartin Storsjö <martin@martin.st>
Sat, 21 Feb 2015 21:37:15 +0000 (23:37 +0200)
When receiving an RTCP packet, the difference between the last RTCP
timestamp and the base timestamp may be negative. As these timestamps
are of the uint32_t type, the result becomes a large integer. Cast
the difference to int32_t to avoid this issue.

The result of this issue is very large start times for RTSP
streams, and difficulty to restart correctly after a pause.

Signed-off-by: Gilles Chanteperdrix <gilles.chanteperdrix@xenomai.org>
Signed-off-by: Martin Storsjö <martin@martin.st>
libavformat/rtpdec.c

index 97f1428..522d951 100644 (file)
@@ -143,7 +143,7 @@ static int rtcp_parse_packet(RTPDemuxContext *s, const unsigned char *buf,
                 s->first_rtcp_ntp_time = s->last_rtcp_ntp_time;
                 if (!s->base_timestamp)
                     s->base_timestamp = s->last_rtcp_timestamp;
-                s->rtcp_ts_offset = s->last_rtcp_timestamp - s->base_timestamp;
+                s->rtcp_ts_offset = (int32_t)(s->last_rtcp_timestamp - s->base_timestamp);
             }
 
             break;