From patchwork Sun Nov 17 07:34:40 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andreas Rheinhardt X-Patchwork-Id: 16303 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 671414499FD for ; Sun, 17 Nov 2019 09:35:33 +0200 (EET) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 4AFD768A675; Sun, 17 Nov 2019 09:35:33 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-wr1-f65.google.com (mail-wr1-f65.google.com [209.85.221.65]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 2B9EB68A476 for ; Sun, 17 Nov 2019 09:35:25 +0200 (EET) Received: by mail-wr1-f65.google.com with SMTP id b3so15782391wrs.13 for ; Sat, 16 Nov 2019 23:35:25 -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:in-reply-to:references :mime-version:content-transfer-encoding; bh=hcLlR+pmTSGrjznIICbp54HgluLnE2mBWp1th5Sy/NA=; b=ZrV2FD/aTCDUWE/kTw5cqtftYVt41YFkasQ6zVxzCdJf7IpA7AcFZazAkU4rYEnb5g nJjI4vt52cn7EIJ/Vz4S5RYITAYl1RkhYnVQXZL9s9oJfcYXZOPF1Aw/dwI3wfCkfsSn kGhFepHJA3s7P1emyC0EjbHfkwj5VLy/7o6jpiDgv5Er8g2bheRS9gRoirpmjiy6UEjP roKPLJQlXJskGdxqCbGK0Gl/WwK9c7GPiUN8uh0SFTn62zyGVTaZm2EfweGSST1T5G1v LEDiJEMrArNTNVwaC0plRQzyyAOB/7SQUtpckuosWeCKYLpuyY79aiVLsUpzIGDQelHd 6WOw== 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:in-reply-to :references:mime-version:content-transfer-encoding; bh=hcLlR+pmTSGrjznIICbp54HgluLnE2mBWp1th5Sy/NA=; b=brFPaurjvE5UwzUy0u/JaCYCNbKk6Gwqo1vffE6CWM9sHGy0B4V3q1vuWLiyezRg4W RZU/al/jSos5lA3piPDhzwjM1BWHOG/4B0INBTOiDsIPko/GA+jGPmVx161R/EecxxU2 YmOBc+v+pYl+acrCVPrfWu11LqdsR+khK7OEBl7Z/1diWbQB2rrK0JEfr9GWtMmoeh69 1O+umhnuXTMPKtficLR2HmZdh4/N56HPQVl7xN8AQkQoEVK/0a+UJ/tsEnzCBs+wWNAz /meI7IoMxKZ40ZwdnOgeVfNk3D0/qTNVq1VLe5G1XTXKHi9Os3nAlwxRmZvpbneT2dn2 Mnyg== X-Gm-Message-State: APjAAAW20aPIBvIyaXJV0OJ3Q60YeYkWKYGdEj5hv9X+t4XytZlckOu3 Z8NAscpyE40sSvaFSTwLcToFRQEKcrU= X-Google-Smtp-Source: APXvYqy2dd7XFfhrjWkOc5rP8YcGkLOL7mWfw02FO3O7NTf0DuXdA3eRam64nuk9PnDVR5BlwtYNlQ== X-Received: by 2002:adf:dc06:: with SMTP id t6mr20305941wri.378.1573976124598; Sat, 16 Nov 2019 23:35:24 -0800 (PST) Received: from sblaptop.fritz.box (ipbcc08e23.dynamic.kabel-deutschland.de. [188.192.142.35]) by smtp.gmail.com with ESMTPSA id q15sm16713082wmq.0.2019.11.16.23.35.23 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 16 Nov 2019 23:35:24 -0800 (PST) From: Andreas Rheinhardt To: ffmpeg-devel@ffmpeg.org Date: Sun, 17 Nov 2019 08:34:40 +0100 Message-Id: <20191117073440.22718-7-andreas.rheinhardt@gmail.com> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20191117073440.22718-1-andreas.rheinhardt@gmail.com> References: <20191117073440.22718-1-andreas.rheinhardt@gmail.com> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH v2 6/6] avcodec/cbs_jpeg: Write scan data directly 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" Writing the scan element in cbs_jpeg used an intermediate buffer to write the scan header followed by the scan data that was copied into said buffer. Afterwards, the final buffer for the element was allocated and everything copied into this buffer. But it is trivial to compute the needed size of the final buffer after having written the header, so one can allocate the final buffer immediately and copy the scan data directly into it, avoiding a memcpy. Signed-off-by: Andreas Rheinhardt --- libavcodec/cbs_jpeg.c | 18 ++++++++++++++---- 1 file changed, 14 insertions(+), 4 deletions(-) diff --git a/libavcodec/cbs_jpeg.c b/libavcodec/cbs_jpeg.c index 64fe70beab..25321bce35 100644 --- a/libavcodec/cbs_jpeg.c +++ b/libavcodec/cbs_jpeg.c @@ -337,15 +337,25 @@ static int cbs_jpeg_write_scan(CodedBitstreamContext *ctx, return err; if (scan->data) { - if (scan->data_size * 8 > put_bits_left(pbc)) - return AVERROR(ENOSPC); + size_t header_size = put_bits_count(pbc) / 8; av_assert0(put_bits_count(pbc) % 8 == 0); + if (scan->data_size > INT_MAX - AV_INPUT_BUFFER_PADDING_SIZE + - header_size) + return AVERROR(ENOMEM); + + err = ff_cbs_alloc_unit_data(ctx, unit, header_size + scan->data_size); + if (err < 0) + return err; + flush_put_bits(pbc); + unit->data_bit_padding = 0; + + memcpy(unit->data, pbc->buf, header_size); + memcpy(unit->data + header_size, scan->data, scan->data_size); - memcpy(put_bits_ptr(pbc), scan->data, scan->data_size); - skip_put_bytes(pbc, scan->data_size); + return 1; } return 0;