From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from ffbox0-bg.ffmpeg.org (ffbox0-bg.ffmpeg.org [79.124.17.100]) by master.gitmailbox.com (Postfix) with ESMTPS id 820584C8C0 for ; Wed, 17 Sep 2025 12:50:45 +0000 (UTC) Authentication-Results: ffbox; dkim=fail (body hash mismatch (got b'awbMJiKkJOfgCcR60y+TA+Vf9P9cqIlP5BJp8eMgZgk=', expected b'98o8Wdkvt3do18kOd0WqRPxZQqdMuqndnqbFhT2CG5s=')) header.d=ffmpeg.org header.i=@ffmpeg.org header.a=rsa-sha256 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=ffmpeg.org; i=@ffmpeg.org; q=dns/txt; s=mail; t=1758113419; h=mime-version : to : date : message-id : reply-to : subject : list-id : list-archive : list-archive : list-help : list-owner : list-post : list-subscribe : list-unsubscribe : from : cc : content-type : content-transfer-encoding : from; bh=awbMJiKkJOfgCcR60y+TA+Vf9P9cqIlP5BJp8eMgZgk=; b=bVmZRaNPKrN2WH9/OMRYW/na/3A38An+S6h46l2y9U5skN0PSgignXLMCfrvpwJIUsRYz ElKkgnd0G8FXo7Jxc5Qvf+ddnoInl0sMgoBtcF/pVEdKwkC0qln/Kv8Lz6AAvw3k3MmOxuu 2agHwu6q/b/wet4kCEWodHPGAqZCx5Q5KGWWa6FlWrtnu82X76hVWM9Debh+0YLklxPP36U 5Lv9ByDMSg8oStlPORrVfRUCm/KTYar7sz4SPk5tor4KV6pRd4z3BABzlqgqnq4nJeCN2Bo ophZyuv2CcRNUc9+HPUuNvBR+kWEY9uA9LpIqDC3wpQt2CuuQE4MwDuWMVSw== Received: from [172.19.0.4] (unknown [172.19.0.4]) by ffbox0-bg.ffmpeg.org (Postfix) with ESMTP id DF8D968E9A5; Wed, 17 Sep 2025 15:50:19 +0300 (EEST) ARC-Seal: i=1; cv=none; a=rsa-sha256; d=ffmpeg.org; s=arc; t=1758113417; b=R2nnAFDOeISZlMhaXX7yVYXuGUsUqEaePzwr54RCQpKHN7DNjeLa+cDQ+acYAP35Ly+Bg jyeQ31mSKCd9x3eRuzARG4IM6tvUplc6SxRLRhrxg82z7OXETE+YWy6mkbMQ/SBEFLunJqd O22lnoIwfTF6lgjfmyqxkUqPUmTXJu6IGP9BXFIcH45E7fDSLGH2Fkg8hOKR0ThMB+dheeW d5gfAmNoxnzK+zjf+lK3bwc00qsIX5/QKT8p6zTkkiRrMM01fLIibcikm7reL12sKQKmtL4 vI3msFJpS0eCWOQe84s9f7ZIeXbic+n6wYzbxRNnWP1uNvVjJjfHOt/86kGg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=ffmpeg.org; s=arc; t=1758113417; h=from : sender : reply-to : subject : date : message-id : to : cc : mime-version : content-type : content-transfer-encoding : content-id : content-description : resent-date : resent-from : resent-sender : resent-to : resent-cc : resent-message-id : in-reply-to : references : list-id : list-help : list-unsubscribe : list-subscribe : list-post : list-owner : list-archive; bh=nj/Ir8JeiO52A/yhWUZHUyNHiQUXnoWk7ubGFw0f6AM=; b=daCI6BLOQDqZ3rRFkAsa9whqSHBrir2U3Vr5yL21I2FyHKAkveRqZHqrc1RESGY3dgYDz s6FQqijjlLzLsnunYapnivMPC8+S0rjBJYS/ZMbYN7tlbXsjbdSXdBeWvX689zAFxo6WH3S SK0mx1pDyuXtdmPrUSokSHqD0fmm+UvRLuGmnZM1YkGTbeRfDyPnkSn57VzCae9b8HYVjFr lmUejV/8Xrks70OKicsV6yVIilWmwkpNsU3RS3+Old0dInGOVwou0A8/X6dd2k1xV3NAodF S/ov/e/Ml6ORTfc7u9tCcNR0tR/6fgtmxNwp68C/JT/0728xoh1rrCNn68Bg== ARC-Authentication-Results: i=1; ffmpeg.org; dkim=pass header.d=ffmpeg.org header.i=@ffmpeg.org; arc=none; dmarc=none Authentication-Results: ffmpeg.org; dkim=pass header.d=ffmpeg.org header.i=@ffmpeg.org; arc=none (Message is not ARC signed); dmarc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=ffmpeg.org; i=@ffmpeg.org; q=dns/txt; s=mail; t=1758113404; h=content-type : mime-version : content-transfer-encoding : from : to : reply-to : subject : date : from; bh=98o8Wdkvt3do18kOd0WqRPxZQqdMuqndnqbFhT2CG5s=; b=VOlmwl/gtMjWqLF7dD4+Ia5EUu94GG9Lj51VDuOOS/KCUYly6DiKwWO3wri8aQT8dNDiV wsvqgZSdlDVNsf5H/HpZ5VxipxhHDLO/E3fVTt8fV0ub06Bi+kqqk1pNHqBKMtRIGwcNiTY XKA9DmilS7VTMnxMb+zQoHf4GMf9c2tf67v+qS2W2Pg9Fd8omHOtnDiJ6mm67tIfygTnPNR TCTh0S7nCb7b2pcR1DdDBBMyvj6g2z8+bt2wphOTDXa4G4gTg2Q0b6N5hwB5ZRrvCj+GtXR oyIG0Q0/OFo/gqNJpHSBcIEuMyaPXUb9sFWfylI1QgWFAhDDh7DQsXi8LYng== Received: from ed19c606a818 (code.ffmpeg.org [188.245.149.3]) by ffbox0-bg.ffmpeg.org (Postfix) with ESMTPS id CC3DB68CFE6 for ; Wed, 17 Sep 2025 15:50:04 +0300 (EEST) MIME-Version: 1.0 To: ffmpeg-devel@ffmpeg.org Date: Wed, 17 Sep 2025 12:50:04 -0000 Message-ID: <175811340502.25.10695898061121140139@463a07221176> Message-ID-Hash: YJ6DZX6JLURJRAUI5IWKCH2AVQHM4SPT X-Message-ID-Hash: YJ6DZX6JLURJRAUI5IWKCH2AVQHM4SPT X-MailFrom: code@ffmpeg.org X-Mailman-Rule-Misses: dmarc-mitigation; no-senders; approved; loop; banned-address; header-match-ffmpeg-devel.ffmpeg.org-0; header-match-ffmpeg-devel.ffmpeg.org-1; header-match-ffmpeg-devel.ffmpeg.org-2; header-match-ffmpeg-devel.ffmpeg.org-3; emergency; member-moderation; nonmember-moderation; administrivia; implicit-dest; max-recipients; max-size; news-moderation; no-subject; digests; suspicious-header X-Mailman-Version: 3.3.10 Precedence: list Reply-To: FFmpeg development discussions and patches Subject: [FFmpeg-devel] [PATCH] avcodec/pngenc: include EXIF buffer in max_packet_size (PR #20539) List-Id: FFmpeg development discussions and patches Archived-At: Archived-At: List-Archive: List-Archive: List-Help: List-Owner: List-Post: List-Subscribe: List-Unsubscribe: From: Leo Izen via ffmpeg-devel Cc: Leo Izen Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Archived-At: List-Archive: List-Post: PR #20539 opened by Leo Izen (Traneptora) URL: https://code.ffmpeg.org/FFmpeg/FFmpeg/pulls/20539 Patch URL: https://code.ffmpeg.org/FFmpeg/FFmpeg/pulls/20539.patch When calculating the max size of an output PNG packet, we should include the size of a possible eXIf chunk that we may write. Signed-off-by: Leo Izen >>From 7b7a90f4e93d36ffb6d5c939c61560daf91c2683 Mon Sep 17 00:00:00 2001 From: Leo Izen Date: Wed, 17 Sep 2025 08:48:02 -0400 Subject: [PATCH] avcodec/pngenc: include EXIF buffer in max_packet_size When calculating the max size of an output PNG packet, we should include the size of a possible eXIf chunk that we may write. Signed-off-by: Leo Izen --- libavcodec/pngenc.c | 64 ++++++++++++++++++++++++++++++++++++++++----- 1 file changed, 58 insertions(+), 6 deletions(-) diff --git a/libavcodec/pngenc.c b/libavcodec/pngenc.c index 5baad9aad5..1d6d2be8c4 100644 --- a/libavcodec/pngenc.c +++ b/libavcodec/pngenc.c @@ -644,24 +644,76 @@ static int add_icc_profile_size(AVCodecContext *avctx, const AVFrame *pict, return 0; } -static int encode_png(AVCodecContext *avctx, AVPacket *pkt, - const AVFrame *pict, int *got_packet) +static int add_exif_profile_size(AVCodecContext *avctx, const AVFrame *pict, + uint64_t *max_packet_size) +{ + PNGEncContext *s = avctx->priv_data; + const AVFrameSideData *sd; + uint64_t new_pkt_size; + /* includes orientation tag */ + const int base_exif_size = 92; + uint64_t estimated_exif_size; + + if (!pict) + return 0; + + sd = av_frame_get_side_data(pict, AV_FRAME_DATA_EXIF); + estimated_exif_size = sd ? sd->size : 0; + sd = av_frame_get_side_data(pict, AV_FRAME_DATA_DISPLAYMATRIX); + if (sd) + estimated_exif_size += base_exif_size; + + if (!estimated_exif_size) + return 0; + + /* 12 is the png chunk header size */ + new_pkt_size = *max_packet_size + estimated_exif_size + 12; + if (new_pkt_size < *max_packet_size) + return AVERROR_INVALIDDATA; + + *max_packet_size = new_pkt_size; + + return 0; +} + +static int get_max_packet_size(AVCodecContext *avctx, const AVFrame *pict, + uint64_t *max_packet_size) { PNGEncContext *s = avctx->priv_data; - int ret; int enc_row_size; uint64_t max_packet_size; + int ret; - enc_row_size = deflateBound(&s->zstream.zstream, - (avctx->width * s->bits_per_pixel + 7) >> 3); + enc_row_size = deflateBound(&s->zstream.zstream, (avctx->width * s->bits_per_pixel + 7) >> 3); max_packet_size = FF_INPUT_BUFFER_MIN_SIZE + // headers avctx->height * ( enc_row_size + 12 * (((int64_t)enc_row_size + IOBUF_SIZE - 1) / IOBUF_SIZE) // IDAT * ceil(enc_row_size / IOBUF_SIZE) ); - if ((ret = add_icc_profile_size(avctx, pict, &max_packet_size))) + + ret = add_icc_profile_size(avctx, pict, &max_packet_size); + if (ret < 0) return ret; + + ret = add_exif_profile_size(avctx, pict, &max_packet_size); + if (ret < 0) + return ret; + + return 0; +} + +static int encode_png(AVCodecContext *avctx, AVPacket *pkt, + const AVFrame *pict, int *got_packet) +{ + PNGEncContext *s = avctx->priv_data; + int ret; + uint64_t max_packet_size; + + ret = get_max_packet_size(avctx, pict, &max_packet_size); + if (ret < 0) + return ret; + ret = ff_alloc_packet(avctx, pkt, max_packet_size); if (ret < 0) return ret; -- 2.49.1 _______________________________________________ ffmpeg-devel mailing list -- ffmpeg-devel@ffmpeg.org To unsubscribe send an email to ffmpeg-devel-leave@ffmpeg.org