You've already forked FFmpeg
							
							
				mirror of
				https://github.com/FFmpeg/FFmpeg.git
				synced 2025-10-30 23:18:11 +02:00 
			
		
		
		
	avformat/rtpdec: Avoid allocations of small dynamic buffers
Besides avoiding allocations this also fixes a design defect of ff_rtp_send_punch_packets: It did not return an error in case of these allocations failed. Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@gmail.com>
This commit is contained in:
		| @@ -404,38 +404,26 @@ int ff_rtp_check_and_send_back_rr(RTPDemuxContext *s, URLContext *fd, | ||||
|  | ||||
| void ff_rtp_send_punch_packets(URLContext *rtp_handle) | ||||
| { | ||||
|     AVIOContext *pb; | ||||
|     uint8_t *buf; | ||||
|     int len; | ||||
|     uint8_t buf[RTP_MIN_PACKET_LENGTH], *ptr = buf; | ||||
|  | ||||
|     /* Send a small RTP packet */ | ||||
|     if (avio_open_dyn_buf(&pb) < 0) | ||||
|         return; | ||||
|  | ||||
|     avio_w8(pb, (RTP_VERSION << 6)); | ||||
|     avio_w8(pb, 0); /* Payload type */ | ||||
|     avio_wb16(pb, 0); /* Seq */ | ||||
|     avio_wb32(pb, 0); /* Timestamp */ | ||||
|     avio_wb32(pb, 0); /* SSRC */ | ||||
|     bytestream_put_byte(&ptr, (RTP_VERSION << 6)); | ||||
|     bytestream_put_byte(&ptr, 0); /* Payload type */ | ||||
|     bytestream_put_be16(&ptr, 0); /* Seq */ | ||||
|     bytestream_put_be32(&ptr, 0); /* Timestamp */ | ||||
|     bytestream_put_be32(&ptr, 0); /* SSRC */ | ||||
|  | ||||
|     len = avio_close_dyn_buf(pb, &buf); | ||||
|     if ((len > 0) && buf) | ||||
|         ffurl_write(rtp_handle, buf, len); | ||||
|     av_free(buf); | ||||
|     ffurl_write(rtp_handle, buf, ptr - buf); | ||||
|  | ||||
|     /* Send a minimal RTCP RR */ | ||||
|     if (avio_open_dyn_buf(&pb) < 0) | ||||
|         return; | ||||
|     ptr = buf; | ||||
|     bytestream_put_byte(&ptr, (RTP_VERSION << 6)); | ||||
|     bytestream_put_byte(&ptr, RTCP_RR); /* receiver report */ | ||||
|     bytestream_put_be16(&ptr, 1); /* length in words - 1 */ | ||||
|     bytestream_put_be32(&ptr, 0); /* our own SSRC */ | ||||
|  | ||||
|     avio_w8(pb, (RTP_VERSION << 6)); | ||||
|     avio_w8(pb, RTCP_RR); /* receiver report */ | ||||
|     avio_wb16(pb, 1); /* length in words - 1 */ | ||||
|     avio_wb32(pb, 0); /* our own SSRC */ | ||||
|  | ||||
|     len = avio_close_dyn_buf(pb, &buf); | ||||
|     if ((len > 0) && buf) | ||||
|         ffurl_write(rtp_handle, buf, len); | ||||
|     av_free(buf); | ||||
|     ffurl_write(rtp_handle, buf, ptr - buf); | ||||
| } | ||||
|  | ||||
| static int find_missing_packets(RTPDemuxContext *s, uint16_t *first_missing, | ||||
|   | ||||
		Reference in New Issue
	
	Block a user