From patchwork Fri May 21 09:17:23 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andreas Rheinhardt X-Patchwork-Id: 27866 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a6b:b214:0:0:0:0:0 with SMTP id b20csp341652iof; Fri, 21 May 2021 02:21:19 -0700 (PDT) X-Google-Smtp-Source: ABdhPJw+Af7tqHwli+G4C0yihcBkB7+y5aJDhkByPLd/YkBt/0ZWPmpft70jN0sbgFqUWS1dsACm X-Received: by 2002:a17:907:76e8:: with SMTP id kg8mr8801079ejc.130.1621588878916; Fri, 21 May 2021 02:21:18 -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 g3si4711878eds.351.2021.05.21.02.21.18; Fri, 21 May 2021 02:21:18 -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=qZPuO6pW; 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 22C30689E9A; Fri, 21 May 2021 12:18:28 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from EUR04-HE1-obe.outbound.protection.outlook.com (mail-oln040092073026.outbound.protection.outlook.com [40.92.73.26]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 66828689E3B for ; Fri, 21 May 2021 12:18:25 +0300 (EEST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=IJQuZNk8dOtUjgIcDYkyGVwOCa/+hFFzWd9kKHCUB7bwl8aYyPs3/FOExSNpoMPpEOuFgjYVOSCtNkT9zoVcC0LI4olVRdr7E8aaiJEgY4Ma74WNs8ufxsQu+sCaxrpUAdREKVvgDvqFXUTACQcjB0Wt63R2NEFZ7nKKsR/Jy/PjY9xBo0qsDTH6gSL1wmQgGQ40b0JsA8Zkeve/7k6A+zCWwYVg0TYKsu9t1Xsenziwq75mvgy3EspXNVUWbDSKlmgZUARyew3CqbSmE5ZCys5GgNKuehazWuMTzfGOSPdX11P1Rjc5PXF2llngwJ5GytN8Qep/qptUKS3bPNq3YQ== 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=efcy0sKL3ss11NdVE+bAl96uUktQN+im/rDaqwSzsQ8=; b=B2FHB4UP12AJx0x/L+zvFObFnsxQAl9K72CyDDbccTtUzs0Mhfy/TmaJAZ9GHC50CpAUDuKJgU2REgIf1X6egXRj4qlj01+SZcRPUfNprUvQ75Xy+mN4g3XpNZCAjOzTaBnghOZEtMPH5HsxWsEy2mBOwtMs0SqSOsONvrQPA/eA0WE/v8cUvSGJBvuSfMGPe2xpCs9bQCWVpv8CceIg8ZJi+IKYHQvcfpk9jYjq/b4foytFEUFJrsf1yOeL9nJFPffMUsMSA2ZaWaGCEPQa8OAqBgB+Lh74qfkObYjwWPCcr7em4KzRvS/FE4gw6L4bCT2uBrLSfPREMqpWcxme9w== 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=efcy0sKL3ss11NdVE+bAl96uUktQN+im/rDaqwSzsQ8=; b=qZPuO6pWqp7fHSr4VUA4ssZtF2h45cAl1A6hMHeioiBVznbadwC41JA42H3+nz8ync7m8Cl509+EqOTU5dUOk8IvN3QwFFF2SmJLj0sNypvxLhn7CzxoPgoARk2KWrhYUwB5LvBp6AV88w/mBOwZYJdEJCEcXhPXE9YVoGXx/y8d/8W8skzg++/fAuxTOvBC527QVp0XqUHTmi7SRj4R2AFo4TWIB098Rq0YmGqgCZVb/spUWzuaairWCBVFzAqKctYks9CFdFybd/o9o6/IeNipSV13OK0qovtdgFr3JO+Q9729JY85iL5smU3Eg2RyOckebO/Cepb6iShu93NXKQ== Received: from DB3EUR04FT030.eop-eur04.prod.protection.outlook.com (2a01:111:e400:7e0c::42) by DB3EUR04HT103.eop-eur04.prod.protection.outlook.com (2a01:111:e400:7e0c::343) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4129.25; Fri, 21 May 2021 09:18:24 +0000 Received: from HE1PR0301MB2154.eurprd03.prod.outlook.com (2a01:111:e400:7e0c::41) by DB3EUR04FT030.mail.protection.outlook.com (2a01:111:e400:7e0c::99) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4129.25 via Frontend Transport; Fri, 21 May 2021 09:18:24 +0000 X-IncomingTopHeaderMarker: OriginalChecksum:A163B69F43B4632AAAB3DA2FDD0EF34CBA1D582B61A84BB5584DD373EC8CA873; UpperCasedChecksum:CF2318F8AD1557A8EF2CFD9572296B5CA6C198D483D03A90BD69DA4568F87CF4; SizeAsReceived:7607; Count:48 Received: from HE1PR0301MB2154.eurprd03.prod.outlook.com ([fe80::f4cc:63fc:9cef:37fb]) by HE1PR0301MB2154.eurprd03.prod.outlook.com ([fe80::f4cc:63fc:9cef:37fb%6]) with mapi id 15.20.4150.025; Fri, 21 May 2021 09:18:24 +0000 From: Andreas Rheinhardt To: ffmpeg-devel@ffmpeg.org Date: Fri, 21 May 2021 11:17:23 +0200 Message-ID: X-Mailer: git-send-email 2.27.0 In-Reply-To: References: X-TMN: [WTy+g7YWZw3pxOj1okuxdO9MihdGJdYt] X-ClientProxiedBy: PR0P264CA0070.FRAP264.PROD.OUTLOOK.COM (2603:10a6:100:1d::34) To HE1PR0301MB2154.eurprd03.prod.outlook.com (2603:10a6:3:2a::22) X-Microsoft-Original-Message-ID: <20210521091742.184902-19-andreas.rheinhardt@outlook.com> MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 Received: from sblaptop.fritz.box (188.192.95.27) by PR0P264CA0070.FRAP264.PROD.OUTLOOK.COM (2603:10a6:100:1d::34) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4150.23 via Frontend Transport; Fri, 21 May 2021 09:18:23 +0000 X-MS-PublicTrafficType: Email X-IncomingHeaderCount: 48 X-EOPAttributedMessage: 0 X-MS-Office365-Filtering-Correlation-Id: ec87a809-84d7-4bf1-4a02-08d91c396280 X-MS-Exchange-SLBlob-MailProps: gjx25WM8ZNU/M7M4vrgvBd+IenKLBfauLQAzQmnoW8wXeY5Jd3kXNXTg8Og1i0geCvFpE9A2hGYmCTK4x6mdsoIJCDuGTvtucBJuoZaWPbpJacsO1f1vwfJFcuDZCH08nxJwaEJxhK/TPDrVe2AwoXPX+FRiRGl7F/1yo8V/rdHpkwaSGOImherFkg3zRQmCOYnynKantX8RD9XK6pDLi9gtjbx1bpgyMrcymBDj2C+AFaN/QIEXn4y4VFdBQuxLCjkcSgrgJC1mlBctxti6Knu2onsghzNxZZ41No+r9+zELXj0afOPcctuCMfs23TfWoH+bCAOthFAXzHcB+Zj1gkDbl3wBy3vqQrtGqP9L3y+WCmE+6gUqhXM+pOy0sYJsuBcgJkwsgiA4aa2SpRtHDucmEPjypyeEfsbk1ZYBHbGXDV1sHkC1wnLG4H9Y23CsulLgOGn+UqZV7vefx1AS0Ekz0/2zDxDDkYBjDoR32MhAWa1JrsGY6QMqYxzqD+8YSq7qRg8B+qUidsveSvFh1lp3lvoYtnANAQvZRNbHE9UMwG7dcGJfpODEHjqdKMMDMJFDT3SHq93kJPDA56L0icLYwWo3uW5zoWVU4/JioZP1OC6t0OQOXyNSx6b2s4pbmOYqgKKCSM0wdhM4y7av2kie4NXMeI7V5NZYJA/XMnq5ULQIZ96TAxd0JQHRmf8gkBiwgLZKQhPM32CWPcdXcUGfXvdiR0c8CJvahkkdBg= X-MS-TrafficTypeDiagnostic: DB3EUR04HT103: X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: P8LL6o8TerWDlQcJMcWtnlM80a41UDIbS5n7deNFTlPin4p4aAfD+rEdnLrsqCotWiWx5QVVumLac89cR70VeOw4B3wgqDE96qF6a1c49BzDF/itmZPmjo131s58VQ+kW5DTV+Cahb7cYT0hvVrRo1/I0CGPPL+2mOnp3b0GIv8lya6qqMbsVmSys8t3fZvd52el9KcpmuaZgq6DPMbgYLA9QNJg4wn2pCrdsfGoCbOgApk7EVeFrsfgWvZQgR/+xhIytQTfy2oIoDOhZLt3aNE1IEmmm0RrLrgsjTgz09Pjfs1/wtxhx/ue1Ecyn4V1g0ixSQh8gUma4joLAYE7D9D4S5zGIARul3Y7lzymkZRAhWGzynH12PEfNv9e9OiY0ebjtRzxFvIkOxjxF+mKcg== X-MS-Exchange-AntiSpam-MessageData: si5OvHt6bKTkp+XeC5pSVMpCV0pq5eOtdDJTkTPzqiIgTcUfMEavQEtI7cXNWUWHAueLDkCU4gRy+i+TwpM6jtJISZYRwnPxcImzxHzUW81fyE0+F5Xlun4/n7MGrewgxQXx6ktIPS8/S7rX34IttQ== X-OriginatorOrg: outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: ec87a809-84d7-4bf1-4a02-08d91c396280 X-MS-Exchange-CrossTenant-OriginalArrivalTime: 21 May 2021 09:18:24.3053 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 84df9e7f-e9f6-40af-b435-aaaaaaaaaaaa X-MS-Exchange-CrossTenant-AuthSource: DB3EUR04FT030.eop-eur04.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: DB3EUR04HT103 Subject: [FFmpeg-devel] [PATCH 20/39] avcodec/pamenc: 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: Y/cBmlgTU7J/ When the packet size is known in advance like here, one can avoid an intermediate buffer for the packet data by using ff_get_encode_buffer() and also set AV_CODEC_CAP_DR1 at the same time. Signed-off-by: Andreas Rheinhardt --- libavcodec/pamenc.c | 26 ++++++++++++++------------ 1 file changed, 14 insertions(+), 12 deletions(-) diff --git a/libavcodec/pamenc.c b/libavcodec/pamenc.c index f1df7c88f5..c38de5c607 100644 --- a/libavcodec/pamenc.c +++ b/libavcodec/pamenc.c @@ -19,16 +19,18 @@ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ +#include "libavutil/avassert.h" #include "avcodec.h" +#include "encode.h" #include "internal.h" static int pam_encode_frame(AVCodecContext *avctx, AVPacket *pkt, const AVFrame *p, int *got_packet) { - uint8_t *bytestream_start, *bytestream, *bytestream_end; - int i, h, w, n, linesize, depth, maxval, ret; + int i, h, w, n, linesize, depth, maxval, ret, header_size; + uint8_t *bytestream, *ptr; const char *tuple_type; - uint8_t *ptr; + char header[100]; h = avctx->height; w = avctx->width; @@ -91,17 +93,17 @@ static int pam_encode_frame(AVCodecContext *avctx, AVPacket *pkt, return -1; } - if ((ret = ff_alloc_packet2(avctx, pkt, n*h + 200, 0)) < 0) + header_size = snprintf(header, sizeof(header), + "P7\nWIDTH %d\nHEIGHT %d\nDEPTH %d\nMAXVAL %d\nTUPLTYPE %s\nENDHDR\n", + w, h, depth, maxval, tuple_type); + av_assert1(header_size < sizeof(header)); + + if ((ret = ff_get_encode_buffer(avctx, pkt, n*h + header_size, 0)) < 0) return ret; - bytestream_start = bytestream = pkt->data; - bytestream_end = pkt->data + pkt->size; - - snprintf(bytestream, bytestream_end - bytestream, - "P7\nWIDTH %d\nHEIGHT %d\nDEPTH %d\nMAXVAL %d\nTUPLTYPE %s\nENDHDR\n", - w, h, depth, maxval, tuple_type); - bytestream += strlen(bytestream); + memcpy(bytestream, header, header_size); + bytestream += header_size; ptr = p->data[0]; linesize = p->linesize[0]; @@ -121,7 +123,6 @@ static int pam_encode_frame(AVCodecContext *avctx, AVPacket *pkt, } } - pkt->size = bytestream - bytestream_start; pkt->flags |= AV_PKT_FLAG_KEY; *got_packet = 1; return 0; @@ -132,6 +133,7 @@ const AVCodec ff_pam_encoder = { .long_name = NULL_IF_CONFIG_SMALL("PAM (Portable AnyMap) image"), .type = AVMEDIA_TYPE_VIDEO, .id = AV_CODEC_ID_PAM, + .capabilities = AV_CODEC_CAP_DR1, .encode2 = pam_encode_frame, .pix_fmts = (const enum AVPixelFormat[]){ AV_PIX_FMT_RGB24, AV_PIX_FMT_RGBA,