diff --git a/libavformat/rtpdec.c b/libavformat/rtpdec.c index ca06bfff00..4922ce3820 100644 --- a/libavformat/rtpdec.c +++ b/libavformat/rtpdec.c @@ -375,7 +375,7 @@ rtp_parse_set_dynamic_protocol(RTPDemuxContext *s, PayloadContext *ctx, */ static void finalize_packet(RTPDemuxContext *s, AVPacket *pkt, uint32_t timestamp) { - if (s->last_rtcp_ntp_time != AV_NOPTS_VALUE) { + if (s->last_rtcp_ntp_time != AV_NOPTS_VALUE && timestamp != RTP_NOTS_VALUE) { int64_t addend; int delta_timestamp; @@ -408,7 +408,9 @@ int rtp_parse_packet(RTPDemuxContext *s, AVPacket *pkt, if (!buf) { /* return the next packets, if any */ if(s->st && s->parse_packet) { - timestamp= 0; ///< Should not be used if buf is NULL, but should be set to the timestamp of the packet returned.... + /* timestamp should be overwritten by parse_packet, if not, + * the packet is left with pts == AV_NOPTS_VALUE */ + timestamp = RTP_NOTS_VALUE; rv= s->parse_packet(s->ic, s->dynamic_protocol_context, s->st, pkt, ×tamp, NULL, 0, flags); finalize_packet(s, pkt, timestamp); diff --git a/libavformat/rtpdec.h b/libavformat/rtpdec.h index 86af2b9d45..aa686da7bb 100644 --- a/libavformat/rtpdec.h +++ b/libavformat/rtpdec.h @@ -34,6 +34,8 @@ typedef struct RTPDynamicProtocolHandler_s RTPDynamicProtocolHandler; #define RTP_MIN_PACKET_LENGTH 12 #define RTP_MAX_PACKET_LENGTH 1500 /* XXX: suppress this define */ +#define RTP_NOTS_VALUE ((uint32_t)-1) + typedef struct RTPDemuxContext RTPDemuxContext; RTPDemuxContext *rtp_parse_open(AVFormatContext *s1, AVStream *st, URLContext *rtpc, int payload_type); void rtp_parse_set_dynamic_protocol(RTPDemuxContext *s, PayloadContext *ctx,