From patchwork Thu Apr 29 23:56:40 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andreas Rheinhardt X-Patchwork-Id: 27495 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a11:4023:0:0:0:0 with SMTP id ky35csp2014963pxb; Thu, 29 Apr 2021 16:58:49 -0700 (PDT) X-Google-Smtp-Source: ABdhPJwMZbYX56AXqaXdshWZ4oSs2FQed3Mq5IpTJRb40V1UjD4Kg8kC7a8auliTsezMrEi9BJi8 X-Received: by 2002:a05:6402:c:: with SMTP id d12mr2566709edu.100.1619740729598; Thu, 29 Apr 2021 16:58:49 -0700 (PDT) Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id f19si56037edq.277.2021.04.29.16.58.49; Thu, 29 Apr 2021 16:58:49 -0700 (PDT) Received-SPF: pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) client-ip=79.124.17.100; Authentication-Results: mx.google.com; dkim=neutral (body hash did not verify) header.i=@outlook.com header.s=selector1 header.b=gEv5Jhn6; arc=fail (body hash mismatch); spf=pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) smtp.mailfrom=ffmpeg-devel-bounces@ffmpeg.org; dmarc=fail (p=NONE sp=QUARANTINE dis=NONE) header.from=outlook.com Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id C2B2168A0D3; Fri, 30 Apr 2021 02:58:09 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from EUR06-AM7-obe.outbound.protection.outlook.com (mail-am7eur06olkn2047.outbound.protection.outlook.com [40.92.16.47]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 1E1BA68A0B7 for ; Fri, 30 Apr 2021 02:58:07 +0300 (EEST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=hqNv0UNQsYJvxe2TnX1kejcmimblnOn7n+aarVCf+55oTl5hS76CxXpcbE91FTOdmWLZOyz9r6MRFY7yNfVkLg6C+OarFIyVLpIYFfur232HCRP9oPSxa3g+tHl/Og5w97YkGX2qQs+wrjz6vMRtaEhzWhkAiD++CC56g8M81EMT6vYL0SalLEeRXk8N0GX8LIVs4oySy5W3pD9rvM1qLzyxAbkE5JAgZvrd4MTYPCdQIsf8lX//YB7/ydwmPg8xumEtDn+7UxiPsDqpcB3REYe9UjUTaxuRTw6/8qUjBlcWE2zS/+EdL6y6jALEpBOY6FmMvk3Bl4BCc16PFLoU8w== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=5xg1cEViVadjDlgOWUZft0Q/h3v52P6sIm7Nz/aFZ9s=; b=b2CbokkYBuJXNGHEJjRaYHuYgqX65ExDWaoYIYgwc7HfLYfChSXER+iOtWQQZ4HK/3BGCh+1imFWRynT7B9EQB6w65EMU8ZLdH0fQVNo1kebUxDYDs2fxUdWYgfdEnDtmqK8il3cG3ysNvf7m3Z8tq8p7c3t2SHPCV1uoxt5/angb73UlH0FV2mJ8JgBWu024CAoHXPBjh7d79VQb93skIdgD0C07bDygLKYuKV/Jnd6Y6u1G3GeN8xsEGzRWX5Te8UWywF0PwtveZFkXmZiT00FX0YxdJGGHhHoYTegEa0rk9rZHkHG711483Rn8Syp9KY5304x4ky35plNN/Tf4A== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=none; dmarc=none; dkim=none; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=outlook.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=5xg1cEViVadjDlgOWUZft0Q/h3v52P6sIm7Nz/aFZ9s=; b=gEv5Jhn6Te/UBy8Br8eYJcDuAmzETfk6T8RdJU3hFyBJzohzO4HbGZYTSNYc4BMoHisJ9mR9wndK52I0WGKs0KV/ay+u73ORNw6xLg2VHEFyYQbPwCIOck8qtDnmTwQykTYDgEvbZ2nL2+iPmZRN48jZH5YL/2JVGB44Zt7A42P5cbOcw2dapf6l55+CjZG24tijEjxwYIayroPh6/UkZjDUQD04NYuepe7OrfJhYHWfIJe/QYf05m40tM+BVz6SWo3H3jDuDKVvFNoFGIC7SenHxULtfFiuXmnQ9T4YYcvF5ATx/itn3D0aK6APOQaK9pef/6cbfWd0eretmr/xPg== Received: from AM7EUR06FT005.eop-eur06.prod.protection.outlook.com (2a01:111:e400:fc36::4c) by AM7EUR06HT109.eop-eur06.prod.protection.outlook.com (2a01:111:e400:fc36::229) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4087.27; Thu, 29 Apr 2021 23:58:06 +0000 Received: from HE1PR0301MB2154.eurprd03.prod.outlook.com (2a01:111:e400:fc36::4c) by AM7EUR06FT005.mail.protection.outlook.com (2a01:111:e400:fc36::397) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4087.27 via Frontend Transport; Thu, 29 Apr 2021 23:58:06 +0000 X-IncomingTopHeaderMarker: OriginalChecksum:0282F048E2E0AB5DD3BF9E70D10146BD234A9C859B6B01C5AB66618B5CA3DBBA; UpperCasedChecksum:AC30D8D1F9EC9883770009055A720F383C07487DEDC6D687805270FFABFC0A35; SizeAsReceived:7601; Count:48 Received: from HE1PR0301MB2154.eurprd03.prod.outlook.com ([fe80::45bb:c44f:2b75:23b7]) by HE1PR0301MB2154.eurprd03.prod.outlook.com ([fe80::45bb:c44f:2b75:23b7%5]) with mapi id 15.20.4065.027; Thu, 29 Apr 2021 23:58:06 +0000 From: Andreas Rheinhardt To: ffmpeg-devel@ffmpeg.org Date: Fri, 30 Apr 2021 01:56:40 +0200 Message-ID: X-Mailer: git-send-email 2.27.0 In-Reply-To: References: X-TMN: [QoLZdHP+JCNxGqgNyxe6ToaCn9HwoAh6] X-ClientProxiedBy: ZR0P278CA0088.CHEP278.PROD.OUTLOOK.COM (2603:10a6:910:22::21) To HE1PR0301MB2154.eurprd03.prod.outlook.com (2603:10a6:3:2a::22) X-Microsoft-Original-Message-ID: <20210429235717.2067041-8-andreas.rheinhardt@outlook.com> MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 Received: from sblaptop.fritz.box (188.193.248.86) by ZR0P278CA0088.CHEP278.PROD.OUTLOOK.COM (2603:10a6:910:22::21) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4087.27 via Frontend Transport; Thu, 29 Apr 2021 23:58:06 +0000 X-MS-PublicTrafficType: Email X-IncomingHeaderCount: 48 X-EOPAttributedMessage: 0 X-MS-Office365-Filtering-Correlation-Id: 8466f16e-d955-4bb5-15e9-08d90b6aa235 X-MS-Exchange-SLBlob-MailProps: S/btQ8cKWiQnJqnaHo6w7XTEhYoMxTOUdiV/cvqPi1sITop5PsqPFr2aMsd+U77vzPCr3CDhdaGSQFHaYx2rJBRvOVT5vLKKFMJGyhFLYGLwfJa/pLmD1vIKpkvvEuH35nhkX/qvD4KtNU126SZvf6NEuRxU+w0nW2gmxE23Q6KTjok3k0gYqZLhkoUdKVPUQpDZlrDx8tLPFtJAw7W6jGI9ZDnhclLDrueiET1FvHVxW4Nqy78QEbONprZm/3qr2f+uQbV0Kwr+N0VKfCqYwJFiBs6GqC1R4plzPcEHVmuDEhTGN1Bx+rNDtdYXowoLGFg8QlMVUQj+G3sjXZ0P/oFlJR+JJ5QOfXSX9sO4fxV+uZhJR/HypKJ+3tjpzLNsTD/xZL6RURh8A1ZCOFw36BFtcxO4A9HAWmdUJaCWjg4L0lRS0w8dhC/d64taGUsAzmBv68ZDt5P+d3D9XzrVyCeHD9gJaSpjP1olQNjYAnEyPLtfS7kK0C2Jj0hkIsOqHftXbhCd4p+G1aKT9y3XHTvkJNszOdaCfXUGCFqJAygPpCAuiFzyP5ECfzyR1Q+kcczrYXYUN2A9k2eFXEDR9oc5Sumzzgql2wX8YqbrIku6fA7ijKkidNqPKm5prKi8EhfMku07AufM8PkGPjBfB2UjarnUOWWord9GKvxUtsmUrTVCAVa4WkZ7nCa2FSgwNkaWwntvZ2U57iryo9tv/JBTGbOmvbUTOr5oblhu4nLsn7VQMjsjrGkxAlIGc5XF1QTNliLP7Tg= X-MS-TrafficTypeDiagnostic: AM7EUR06HT109: X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: MjER38r/Q+ZZYstvRz+4jfGaWezSUTy41+qLFGC96tP51XNpnW/Vhu0XnoyoX3qHJ3wM8qjLX0j4bOqp1I55MNIH+2BP/EzFY2JI3yaiD9XP6e7zHLYAfl/gfXvhEKLmYaMdQtNFEHcJCtVeJ8JgJSCbj58LL5w40N/T/stZYtKJy3CP+IoUYRzUCXdUjCdfDaApckL/e1O7Dr9kL80LQ2J+jY55/AJ0SKaQEamvmalLlH5snvMQExHEJt8SXUZJkmVxha7oXm5T/f7B6u+Tyv+4cTJVSUHQq9NtQe5cGt5x8PK9uSJBw9w4mt96NqNifmSfrkb1MSg51cwAR8HuFsd1Ixyl//vkTnC2S7mYsvSrXXJzwzsVOgYb7dvAORm9TNSalIghBvf+9mK/5iDV6g== X-MS-Exchange-AntiSpam-MessageData: G1hGe2nNJwhynD9uc8JuFNWOpRrrsy1K179mepG6izpWHSfuhSg0XuwV0Wq1wWh2LUnToFBRCxunlgA7OQG3Z5rX33ynyOlCIzKb9a1jIX/sovWPRbKl5vrclg75UWyZUJJLhxjC5E/7xi1f9ICEvg== X-OriginatorOrg: outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 8466f16e-d955-4bb5-15e9-08d90b6aa235 X-MS-Exchange-CrossTenant-OriginalArrivalTime: 29 Apr 2021 23:58:06.7311 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 84df9e7f-e9f6-40af-b435-aaaaaaaaaaaa X-MS-Exchange-CrossTenant-AuthSource: AM7EUR06FT005.eop-eur06.prod.protection.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: Internet X-MS-Exchange-CrossTenant-RMS-PersistedConsumerOrg: 00000000-0000-0000-0000-000000000000 X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM7EUR06HT109 Subject: [FFmpeg-devel] [PATCH 09/46] avcodec/bmpenc: Avoid copying packet data, allow user-supplied buffers X-BeenThere: ffmpeg-devel@ffmpeg.org X-Mailman-Version: 2.1.29 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" X-TUID: CgFRZe7uyz1u When the packet size is known in advance like here, one can avoid an intermediate buffer for the packet data; this also makes it easy to allow user-supplied buffers. Only one thing needed to be changed: One can no longer use a pointer to uint16_t for the destination buffer because its alignment is unknown. Signed-off-by: Andreas Rheinhardt --- libavcodec/bmpenc.c | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/libavcodec/bmpenc.c b/libavcodec/bmpenc.c index ee2a2d0ea9..409564d257 100644 --- a/libavcodec/bmpenc.c +++ b/libavcodec/bmpenc.c @@ -25,6 +25,7 @@ #include "avcodec.h" #include "bytestream.h" #include "bmp.h" +#include "encode.h" #include "internal.h" static const uint32_t monoblack_pal[] = { 0x000000, 0xFFFFFF }; @@ -112,7 +113,7 @@ static int bmp_encode_frame(AVCodecContext *avctx, AVPacket *pkt, #define SIZE_BITMAPINFOHEADER 40 hsize = SIZE_BITMAPFILEHEADER + SIZE_BITMAPINFOHEADER + (pal_entries << 2); n_bytes = n_bytes_image + hsize; - if ((ret = ff_alloc_packet2(avctx, pkt, n_bytes, 0)) < 0) + if ((ret = ff_get_encode_buffer(avctx, pkt, n_bytes, 0)) < 0) return ret; buf = pkt->data; bytestream_put_byte(&buf, 'B'); // BITMAPFILEHEADER.bfType @@ -140,9 +141,8 @@ static int bmp_encode_frame(AVCodecContext *avctx, AVPacket *pkt, for(i = 0; i < avctx->height; i++) { if (bit_count == 16) { const uint16_t *src = (const uint16_t *) ptr; - uint16_t *dst = (uint16_t *) buf; for(n = 0; n < avctx->width; n++) - AV_WL16(dst + n, src[n]); + AV_WL16(buf + 2 * n, src[n]); } else { memcpy(buf, ptr, n_bytes_per_row); } @@ -162,6 +162,7 @@ const AVCodec ff_bmp_encoder = { .long_name = NULL_IF_CONFIG_SMALL("BMP (Windows and OS/2 bitmap)"), .type = AVMEDIA_TYPE_VIDEO, .id = AV_CODEC_ID_BMP, + .capabilities = AV_CODEC_CAP_DR1, .init = bmp_encode_init, .encode2 = bmp_encode_frame, .pix_fmts = (const enum AVPixelFormat[]){