From patchwork Wed Jan 27 15:28:19 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andreas Rheinhardt X-Patchwork-Id: 25219 Return-Path: X-Original-To: patchwork@ffaux-bg.ffmpeg.org Delivered-To: patchwork@ffaux-bg.ffmpeg.org Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org [79.124.17.100]) by ffaux.localdomain (Postfix) with ESMTP id 43C0844AE15 for ; Wed, 27 Jan 2021 17:28:38 +0200 (EET) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 11C93689C71; Wed, 27 Jan 2021 17:28:38 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-wm1-f41.google.com (mail-wm1-f41.google.com [209.85.128.41]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id E75276899C9 for ; Wed, 27 Jan 2021 17:28:31 +0200 (EET) Received: by mail-wm1-f41.google.com with SMTP id u14so1864103wml.4 for ; Wed, 27 Jan 2021 07:28:31 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:mime-version :content-transfer-encoding; bh=cqWzArZ9We5mCeuqR2ACNQxp3QuhuJctUmkukzlYzq8=; b=mNOndkOnm/Jz+ldR+cTHInA685wDRLoPaDvY30Qp7PvT6rBRl7rxOe+jxk5L7shPhv UlGHSrfGdUl7FoyBdSVctmpDi0ArP8YzMmlE2zux/p+V13OcyrbcbtR7+QIlQtW97dKY nYIkJjRSAyQ4Wndi9JAlTTrirNUyW8+omKOB4eLWtue0YqM5AiWf3gFjAC3bsgOviSGM 17o+HMYwwGo9oyD0+V+gxEFRvyzmSDRB9c3t/tHUYpx6sK+UjOEePxpSSAu/qccl5ra2 4UFz2rWf3zn4JHDLh64KP88nJyyrmjjUrDnSijMAEN/rPTTiBYNeWIt5lELhHRPXpNBV 73Dg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:mime-version :content-transfer-encoding; bh=cqWzArZ9We5mCeuqR2ACNQxp3QuhuJctUmkukzlYzq8=; b=jlh9IepdMTCG4L3jLik5Na1nAXB8IA1R0B3mAM/HngXQGtnH6htUmVnkmCdZB2rVPN WI1yOB3rAjFstwt2oUnCzL4Zl2rIAn0hKjsiHPxNUrsIGgR5Q8jEj7pQMtGd5/4mnkB+ qNQYXp26IVqQDtVnVbNipLZNAaQYtH8oL5QPG4fSvj1rXPRU3dneoUJ2ws7inmRYwdl4 z3pYFw1fjgczpw7vD7tdigcRSQN0uPTMX2ZLVCcD8XN3lWazw420ehU9kbYfP85UFk4U PktmupdTq38fQXS5ZvsiEfaH6zcuSr7jeXhgaJST+qK7JPckBX/cjtc4xRJRIkKZaIUj kKHw== X-Gm-Message-State: AOAM530D/+nL/j7G6/FRUVfbG3eokLZ+7nxCJRmHy+n1bKTMbHo0gTqx 2291vmj6XkAhzfXxipn2APPlykXP7b8= X-Google-Smtp-Source: ABdhPJyVs076t9IhP7+rB18d9Yh7vRG39PIuE1sI9l42l9d7e8laJn6HQMJ8DcWwePwdJO0di0raNg== X-Received: by 2002:a1c:6709:: with SMTP id b9mr4637622wmc.102.1611761311130; Wed, 27 Jan 2021 07:28:31 -0800 (PST) Received: from sblaptop.fritz.box (ipbcc1aa4b.dynamic.kabel-deutschland.de. [188.193.170.75]) by smtp.gmail.com with ESMTPSA id u14sm2730886wml.19.2021.01.27.07.28.29 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 27 Jan 2021 07:28:30 -0800 (PST) From: Andreas Rheinhardt To: ffmpeg-devel@ffmpeg.org Date: Wed, 27 Jan 2021 16:28:19 +0100 Message-Id: <20210127152819.2351127-1-andreas.rheinhardt@gmail.com> X-Mailer: git-send-email 2.25.1 MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH] avformat/rtpdec: Avoid allocations of small dynamic buffers X-BeenThere: ffmpeg-devel@ffmpeg.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: FFmpeg development discussions and patches List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Reply-To: FFmpeg development discussions and patches Cc: Andreas Rheinhardt Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" 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 --- libavformat/rtpdec.c | 38 +++++++++++++------------------------- 1 file changed, 13 insertions(+), 25 deletions(-) diff --git a/libavformat/rtpdec.c b/libavformat/rtpdec.c index f40c020c33..d592e34893 100644 --- a/libavformat/rtpdec.c +++ b/libavformat/rtpdec.c @@ -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,