mirror of
https://github.com/xenia-project/FFmpeg.git
synced 2024-11-23 11:39:49 +00: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:
parent
459c6e8ab3
commit
ad2cc0e2f4
@ -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,
|
||||
|
Loading…
Reference in New Issue
Block a user