From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org [79.124.17.100]) by master.gitmailbox.com (Postfix) with ESMTP id CFA7E496CE for ; Sun, 18 Feb 2024 01:42:07 +0000 (UTC) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id C193468D30D; Sun, 18 Feb 2024 03:41:40 +0200 (EET) Received: from EUR04-DB3-obe.outbound.protection.outlook.com (mail-db3eur04olkn2097.outbound.protection.outlook.com [40.92.74.97]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 3317C68D315 for ; Sun, 18 Feb 2024 03:41:37 +0200 (EET) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=hRueNGx+FthAdCZhUiwUoAmfpx/ZA5FB9YGpT7IJ08Xn4FTPXxzgAZ7SMLl9ANYiAjNsO/t4Z2n3MsJWT/ukIRraOjrUhvVCS062TC55CF0ZDiDIXZw8UXKq174jhLQoinSl78iDwg22OV+a+DXa0zkzYsblJyTmBH/TXsjEmWOGS+nVg6YWjFvF82Eo/j3Hx2N7FLhgMaiS2U88gR8eEyE2BhuJsrNUve92RCGuWLrIINx/Ydyfx11Rr09nLFuWxoOTYuQPxKggk2Y5GUG6+RWosx++6tB3NG0YBDkLr7WnIDovHE2aoJiFKJwYdf0w4wvavWl/m+FopjPdEl7/qw== 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-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=6R0Lm9p5VbW/E0xs/kzIvIMVXGxv0WEZoJzMMx0H+Ow=; b=DOFVWIjHZYLcap3uuQfWMqNPpnsvS0mzi8ZfCyHndFVW0uYnT4F3ZzpbGZma+ivK9QFpFRuQrd/XCW6lhVzJWA+f4xxve0WuZ9kOM65mCDBLTZafYji35NDY5BqktH8ekiOdzm4ABu/ASGL/wvpHec04optAX5bXApDDqN02Ly6AHxw9L/ttPZfFnP8tCRk4XrfbbUDsyGslw1m7h8lQ3nZyCdykyweoE1Aq64BW4G7dcBsE885/hhmZFXl56G4jFAp/NUEIbdCCX2wAXqISpYCoJF3S9c1L0irLSHxgD3B5vIukV91Df+p6seQtEVQ5M59n9aR8tj/P//r+qXRQLg== 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=6R0Lm9p5VbW/E0xs/kzIvIMVXGxv0WEZoJzMMx0H+Ow=; b=Kn9B9E3NH8hE0kz5CtrhYSpfNRPsLTLjEaAJxotDDnN5ouTWLXpRCPgZDm9GxmRkfwbzVUu5N28bbQ5Hba1mwqvc1ZiViC7t50x5HCoDKaWLL2daErOrrO2EDE2c4EvjVTuQH4sxe2AZiRa48/28/yh3AX2ftR/RWsgK7ihP9FPJpbYOoaceCCnJNj5aoCk7KQHJIDX2Kz7cP6h+h18pcPdW2S+eKjjcH89uuWE5Y/8XmomN81LF/TKTLc8zvVGQaRGiztU4CaLQcL5q7mnMuz0HFBaFLdM6hgyIvPZsJFXOEFKEOIXPbFaD+F8xYaGF/oNZHPkrSODArDz08gFwxQ== Received: from GV1SPRMB0063.EURP250.PROD.OUTLOOK.COM (2603:10a6:150:109::7) by DU2P250MB0319.EURP250.PROD.OUTLOOK.COM (2603:10a6:10:27c::22) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7292.32; Sun, 18 Feb 2024 01:41:28 +0000 Received: from GV1SPRMB0063.EURP250.PROD.OUTLOOK.COM ([fe80::ffe3:46c:6214:2504]) by GV1SPRMB0063.EURP250.PROD.OUTLOOK.COM ([fe80::ffe3:46c:6214:2504%6]) with mapi id 15.20.7292.026; Sun, 18 Feb 2024 01:41:27 +0000 From: Andreas Rheinhardt To: ffmpeg-devel@ffmpeg.org Date: Sun, 18 Feb 2024 02:43:08 +0100 Message-ID: X-Mailer: git-send-email 2.34.1 In-Reply-To: References: X-TMN: [f7LBRkJDKhG4opJBAcj1lQ6Y0Hlc6CW8rVd6aNLHf6w=] X-ClientProxiedBy: FR3P281CA0033.DEUP281.PROD.OUTLOOK.COM (2603:10a6:d10:1c::12) To GV1SPRMB0063.EURP250.PROD.OUTLOOK.COM (2603:10a6:150:109::7) X-Microsoft-Original-Message-ID: <20240218014308.2819410-6-andreas.rheinhardt@outlook.com> MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: GV1SPRMB0063:EE_|DU2P250MB0319:EE_ X-MS-Office365-Filtering-Correlation-Id: 72ad2a6f-9f00-48bb-d3bd-08dc3022b96d X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: QbJY5X6pF+C4dZiK7Ta6P0gYKjfXrwE8uQv4ytHkcc/r4p+cVWVfpxlSuKsJ1KLASx6uMzNbAW4V4XQEM4ZBaMXOWaTvOEoQCT3lz+DPNJe4KKS+5EsFkFM6xvrPGx070Sik1WZBy1niT13RVio2N7g49e1qTmbioKN7tW6G3N96s8pFfmiGsGuCXbmOtu3/znUPAjFxXkx334bpq44ReWjQWwaOv/NkQP286CIRr96KIxQVS6RhuVv91Gb/fnvQ2eEzf6ijD3kOTcgOqpnom/MUFiJIUrpX1NznCMXJeKloopbXENNwr8w5r79hqnxBhXyEtetYFnTW9wSLxQkVZc6fsok0xX0n0Tz5r2yELQ/hfMqHe9xkK7hMH4JWFifR4OKpqz9owm+zcLEVtz8cx14EgGXxdzkBlfyNalw/PL8roIZoAckmZhGl0Ve6RS0KAwajZKJ28ehWCgtm1YqUrRqFsLQTGfB4yclQavwBRGHE7E7kFESNXkZlYADfYybk4s8p+TIll7j4dvaG4rN4GgfgScN7Evr4xddae76BeXwcgvtNt0vvuve4nI29aSRnu0aAhoznX8l4gOUleMuoEnFcuPHIlqEzwWSPGt3A820l5CG7R8dCaUwhepJcVv71 X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?GSSZ9shrErQW+v2yTPhVxIVjcWqlZyx7oK9jS3cE7wV1ucwMn8KH2Tu1M4/0?= =?us-ascii?Q?jCDMYcaubv4G1HFnbP/kQJx25EwkAyoRz9Ir3k82ha1q4yiaKbB4swM5dG9k?= =?us-ascii?Q?WwQ5l27Nmix1DfrXWdEPeIoHz1yTRriL00Le/bUnVUlVJe0vyzOkxOydjpJd?= =?us-ascii?Q?R99fb00cjY51OfTYl8o4X7kDvrgpfb5XQQFH0qZeHUOJjPGYPcvzFxwqOEqD?= =?us-ascii?Q?3+q5b5V5G7d/lIcaIW2oVWZDed73Km86+QZAWiSGfURlJIq6avgb12RQ84Bo?= =?us-ascii?Q?2byWWPd+bzH7JxK7gxzFspMdfBs4sQrYUJSgzDYX4kcFe92erRHTPsdJG4Sp?= =?us-ascii?Q?DDyXbOjgN1rE/HJhZbHvd4ACzig++81RvI9ISeCVX1+MShWdLvuQAKXZQQbF?= =?us-ascii?Q?TwM4+BqJ1LUprPiHqFGkqNsEcl8r6EXkD5mpWe69WBWEXjNBTiySJBJ7HAuP?= =?us-ascii?Q?UnGScuBqkZEJ0GtVVGPBcpN85Mm+lDVsYVez+kFHFsR4DWmi37Cw0XL+/d2/?= =?us-ascii?Q?mmrWLrXAEVsJ6mcpYfi2bWvMSXJZbzgPXxc/iomM/AcWyn9UwjVz0LYo9j3l?= =?us-ascii?Q?ZPZKtKvp/dAv27y02YbxRRbOaKVv56QPGy7AaIdFKPJQzD7P2LJDBRWUA/eC?= =?us-ascii?Q?vxEoQ8YNuWDB3sd5+yDTYDJg1rStSYD4+IKo5GTBHu7ko/75mUykuvl8QR6X?= =?us-ascii?Q?lTBGsIspiEu83Ut0Xl88VOxo1Vt6hO4V1SZCyksFlcgilOvLXBhOBL7nryww?= =?us-ascii?Q?rBvVowHjig2dAg79EInp4QkVLYcmQUFwPvGlYisr1VN+q+qJX55QIyebS4ky?= =?us-ascii?Q?il9Mq5LvsGy0bZQAaTBhj3hUV0d8zQwD4AnCWrEPd4yKAReVouzFWMwkK5Dh?= =?us-ascii?Q?exdbg2yrOmoDTWc6/5xlWJbGo5PD9JlpINrqa4ZXVobHirO4VONIx3M41Av4?= =?us-ascii?Q?x8/ogQloTJ5wnW6ehCK57OEpTjEUvcYedpy9QcEaAd4gMIO611fmes+NeDhZ?= =?us-ascii?Q?Q1NOP3oDph1Twhus9omEHo6ivy0PftcxIaa7KpoebmRCO9KFR3qse8JLzRUh?= =?us-ascii?Q?9c0w8I3O0CebbOPD4FN/IjvUE4nA7iHxfFs3ERAKf42Dx2Cfnfqe2dUpA0jY?= =?us-ascii?Q?B8tTWZTgPu/ytnjrvya679CoRqeKMODumZLb8g9AmF05s0VHPJQ2KyMXlcYg?= =?us-ascii?Q?hcQac8vokTZ2rcuZlfk5PhxBCiiJ19NCyZ2aP79I7svkVuZ5trKazunXArvc?= =?us-ascii?Q?SdJN2EmOydMn4BGOEoai//Fi/M6nCQizZRN4kR8I1A=3D=3D?= X-OriginatorOrg: outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 72ad2a6f-9f00-48bb-d3bd-08dc3022b96d X-MS-Exchange-CrossTenant-AuthSource: GV1SPRMB0063.EURP250.PROD.OUTLOOK.COM X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 18 Feb 2024 01:41:27.9028 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 84df9e7f-e9f6-40af-b435-aaaaaaaaaaaa X-MS-Exchange-CrossTenant-RMS-PersistedConsumerOrg: 00000000-0000-0000-0000-000000000000 X-MS-Exchange-Transport-CrossTenantHeadersStamped: DU2P250MB0319 Subject: [FFmpeg-devel] [PATCH 7/7] avcodec/movtextenc: Don't copy data around unnecessarily 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 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" Archived-At: List-Archive: List-Post: Using av_bprint_init_for_buffer() avoids copying data into the internal AVBPrint buffer (or worse: to allocate a temporary buffer in case the internal buffer does not suffice). Signed-off-by: Andreas Rheinhardt --- libavcodec/movtextenc.c | 33 ++++++++++++++++++--------------- 1 file changed, 18 insertions(+), 15 deletions(-) diff --git a/libavcodec/movtextenc.c b/libavcodec/movtextenc.c index 7aa74d7c9d..fd8c7dc9f7 100644 --- a/libavcodec/movtextenc.c +++ b/libavcodec/movtextenc.c @@ -22,7 +22,6 @@ #include #include "avcodec.h" #include "libavutil/opt.h" -#include "libavutil/avstring.h" #include "libavutil/intreadwrite.h" #include "libavutil/mem.h" #include "libavutil/common.h" @@ -170,7 +169,6 @@ static int mov_text_encode_close(AVCodecContext *avctx) ff_ass_split_free(s->ass_ctx); av_freep(&s->style_attributes); av_freep(&s->fonts); - av_bprint_finalize(&s->buffer, NULL); return 0; } @@ -183,6 +181,9 @@ static int encode_sample_description(AVCodecContext *avctx) int font_names_total_len = 0; MovTextContext *s = avctx->priv_data; uint8_t buf[30], *p = buf; + int ret; + + av_bprint_init(&s->buffer, 0, INT_MAX - AV_INPUT_BUFFER_PADDING_SIZE + 1); // 0x00, 0x00, 0x00, 0x00, // uint32_t displayFlags // 0x01, // int8_t horizontal-justification @@ -306,19 +307,23 @@ static int encode_sample_description(AVCodecContext *avctx) // }; if (!av_bprint_is_complete(&s->buffer)) { - return AVERROR(ENOMEM); + ret = AVERROR(ENOMEM); + goto fail; } avctx->extradata_size = s->buffer.len; avctx->extradata = av_mallocz(avctx->extradata_size + AV_INPUT_BUFFER_PADDING_SIZE); if (!avctx->extradata) { - return AVERROR(ENOMEM); + ret = AVERROR(ENOMEM); + goto fail; } memcpy(avctx->extradata, s->buffer.str, avctx->extradata_size); - av_bprint_clear(&s->buffer); + ret = 0; +fail: + av_bprint_finalize(&s->buffer, NULL); - return 0; + return ret; } static av_cold int mov_text_encode_init(AVCodecContext *avctx) @@ -327,8 +332,6 @@ static av_cold int mov_text_encode_init(AVCodecContext *avctx) MovTextContext *s = avctx->priv_data; s->avctx = avctx; - av_bprint_init(&s->buffer, 0, AV_BPRINT_SIZE_UNLIMITED); - s->ass_ctx = ff_ass_split(avctx->subtitle_header); if (!s->ass_ctx) return AVERROR_INVALIDDATA; @@ -640,10 +643,14 @@ static int mov_text_encode_frame(AVCodecContext *avctx, unsigned char *buf, ASSDialog *dialog; int i, length; + if (bufsize < 3) + goto too_small; + s->text_pos = 0; s->count = 0; s->box_flags = 0; - av_bprint_clear(&s->buffer); + + av_bprint_init_for_buffer(&s->buffer, buf + 2, bufsize - 2); for (i = 0; i < sub->num_rects; i++) { const char *ass = sub->rects[i]->ass; @@ -663,23 +670,19 @@ static int mov_text_encode_frame(AVCodecContext *avctx, unsigned char *buf, if (s->buffer.len > UINT16_MAX) return AVERROR(ERANGE); AV_WB16(buf, s->buffer.len); - buf += 2; for (size_t j = 0; j < box_count; j++) box_types[j].encode(s); - if (!av_bprint_is_complete(&s->buffer)) - return AVERROR(ENOMEM); - if (!s->buffer.len) return 0; - if (s->buffer.len > bufsize - 3) { + if (!av_bprint_is_complete(&s->buffer)) { +too_small: av_log(avctx, AV_LOG_ERROR, "Buffer too small for ASS event.\n"); return AVERROR_BUFFER_TOO_SMALL; } - memcpy(buf, s->buffer.str, s->buffer.len); length = s->buffer.len + 2; return length; -- 2.34.1 _______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org https://ffmpeg.org/mailman/listinfo/ffmpeg-devel To unsubscribe, visit link above, or email ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe".