OSDN Git Service

libavformat/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)
committerMichael Niedermayer <michaelni@gmx.at>
Sat, 21 Feb 2015 13:18:52 +0000 (14:18 +0100)
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: Michael Niedermayer <michaelni@gmx.at>
libavformat/rtpdec.c

index 1866bda..b4637e2 100644 (file)
@@ -161,7 +161,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;