[FFmpeg-devel] [PATCH v2 3/3] lavf: add AV_PKT_DATA_RTCP_SR side data type
Marvin Scholz
epirat07 at gmail.com
Sat Jun 28 17:27:25 EEST 2025
---
libavcodec/packet.c | 1 +
libavcodec/packet.h | 6 ++++++
libavformat/rtpdec.c | 18 ++++++++++++++++++
3 files changed, 25 insertions(+)
diff --git a/libavcodec/packet.c b/libavcodec/packet.c
index 5104eb98b1..2aace71c7d 100644
--- a/libavcodec/packet.c
+++ b/libavcodec/packet.c
@@ -308,6 +308,7 @@ const char *av_packet_side_data_name(enum AVPacketSideDataType type)
case AV_PKT_DATA_IAMF_RECON_GAIN_INFO_PARAM: return "IAMF Recon Gain Info Parameter Data";
case AV_PKT_DATA_FRAME_CROPPING: return "Frame Cropping";
case AV_PKT_DATA_LCEVC: return "LCEVC NAL data";
+ case AV_PKT_DATA_RTCP_SR: return "RTCP Sender Report";
}
return NULL;
}
diff --git a/libavcodec/packet.h b/libavcodec/packet.h
index 71bc2e0575..8ac4ef54ca 100644
--- a/libavcodec/packet.h
+++ b/libavcodec/packet.h
@@ -345,6 +345,12 @@ enum AVPacketSideDataType {
*/
AV_PKT_DATA_LCEVC,
+ /**
+ * Contains the last received RTCP SR (Sender Report) information
+ * in the form of the AVRTCPSenderReport struct.
+ */
+ AV_PKT_DATA_RTCP_SR,
+
/**
* The number of side data types.
* This is not part of the public API/ABI in the sense that it may
diff --git a/libavformat/rtpdec.c b/libavformat/rtpdec.c
index f27ef106b4..405a900ce0 100644
--- a/libavformat/rtpdec.c
+++ b/libavformat/rtpdec.c
@@ -612,12 +612,30 @@ static int rtp_set_prft(RTPDemuxContext *s, AVPacket *pkt, uint32_t timestamp) {
return 0;
}
+static int rtp_add_sr_sidedata(RTPDemuxContext *s, AVPacket *pkt) {
+ AVRTCPSenderReport *sr =
+ (AVRTCPSenderReport *) av_packet_new_side_data(
+ pkt, AV_PKT_DATA_RTCP_SR, sizeof(AVRTCPSenderReport));
+ if (!sr)
+ return AVERROR(ENOMEM);
+
+ memcpy(sr, &s->last_sr, sizeof(AVRTCPSenderReport));
+ s->pending_sr = 0;
+ return 0;
+}
+
/**
* This was the second switch in rtp_parse packet.
* Normalizes time, if required, sets stream_index, etc.
*/
static void finalize_packet(RTPDemuxContext *s, AVPacket *pkt, uint32_t timestamp)
{
+ if (s->pending_sr) {
+ int ret = rtp_add_sr_sidedata(s, pkt);
+ if (ret < 0)
+ av_log(s->ic, AV_LOG_WARNING, "rtpdec: failed to add SR sidedata\n");
+ }
+
if (pkt->pts != AV_NOPTS_VALUE || pkt->dts != AV_NOPTS_VALUE)
return; /* Timestamp already set by depacketizer */
if (timestamp == RTP_NOTS_VALUE)
--
2.39.5 (Apple Git-154)
More information about the ffmpeg-devel
mailing list