|
|
|
@ -622,6 +622,19 @@ void ff_rtp_parse_set_crypto(RTPDemuxContext *s, const char *suite, |
|
|
|
|
s->srtp_enabled = 1; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
static int rtp_set_prft(RTPDemuxContext *s, AVPacket *pkt, uint32_t timestamp) { |
|
|
|
|
AVProducerReferenceTime *prft = |
|
|
|
|
(AVProducerReferenceTime *) av_packet_new_side_data( |
|
|
|
|
pkt, AV_PKT_DATA_PRFT, sizeof(AVProducerReferenceTime)); |
|
|
|
|
if (!prft) |
|
|
|
|
return AVERROR(ENOMEM); |
|
|
|
|
|
|
|
|
|
prft->wallclock = ff_parse_ntp_time(s->last_rtcp_ntp_time) - NTP_OFFSET_US + |
|
|
|
|
timestamp - s->last_rtcp_timestamp; |
|
|
|
|
prft->flags = 24; |
|
|
|
|
return 0; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* This was the second switch in rtp_parse packet. |
|
|
|
|
* Normalizes time, if required, sets stream_index, etc. |
|
|
|
@ -633,6 +646,12 @@ static void finalize_packet(RTPDemuxContext *s, AVPacket *pkt, uint32_t timestam |
|
|
|
|
if (timestamp == RTP_NOTS_VALUE) |
|
|
|
|
return; |
|
|
|
|
|
|
|
|
|
if (s->last_rtcp_ntp_time != AV_NOPTS_VALUE) { |
|
|
|
|
if (rtp_set_prft(s, pkt, timestamp) < 0) { |
|
|
|
|
av_log(s->ic, AV_LOG_WARNING, "rtpdec: failed to set prft"); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
if (s->last_rtcp_ntp_time != AV_NOPTS_VALUE && s->ic->nb_streams > 1) { |
|
|
|
|
int64_t addend; |
|
|
|
|
int delta_timestamp; |
|
|
|
|