From patchwork Wed Feb 12 15:02:21 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andreas Rheinhardt X-Patchwork-Id: 17760 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 BEE5E44B397 for ; Wed, 12 Feb 2020 17:29:31 +0200 (EET) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 9565668A76A; Wed, 12 Feb 2020 17:29:31 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-wr1-f66.google.com (mail-wr1-f66.google.com [209.85.221.66]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 1910C689F6B for ; Wed, 12 Feb 2020 17:29:25 +0200 (EET) Received: by mail-wr1-f66.google.com with SMTP id w12so2892848wrt.2 for ; Wed, 12 Feb 2020 07:29: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:mime-version :content-transfer-encoding; bh=wU4giydALLhOuCdCJriU+eNMkNYw3UiKQPMg3kCFQgA=; b=jvaW/b6AQO1NJwoCtRLlYN82Q9RNY0FC9CcFIDqZfw9J6nAyUESBDrzQFMlPdmb4gX aUIj2+Mthn+fLsk0HUFJerS/BQ+/de+PBU3aIR6J686oAxKyousPw1+NDmrb0mbXaIpN OF/O91imkaqK3c4bdZ/jZPvpRAtSYKx3tkrZ9rwfJ6aSklOWxfrVHlwTL64AVSzrTHjX Afl7Bi4HwyCkxwlJlAz1qV38babvinMojLbEGr9HR3xWZsnI4/P+cYQtVaQhtGzjzXJ3 iST1ncWGyFzZ54mF5dasF00+91G5NTpKoElnOZH+OBXYMgdATAg1/ai7wUUhkBp28aNS T4Bw== 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:mime-version :content-transfer-encoding; bh=wU4giydALLhOuCdCJriU+eNMkNYw3UiKQPMg3kCFQgA=; b=f7611cZLq1PzsRiGazVPa2abfZKZzGGzl/PtxKDH/9P2OwdWJLHcbj7IWNLrDT79pV IErKsMgmdW+39JP9ysbqQXQOSrBvtywyTHT+YaNRlq2b/Fz60v9yEe5oWFP/vJPUlwbO D78QoWOleYS15ff0rrMjuSnCpKQ7zPuJlsCYtNYkeq5za0ye06p2gH3hcGLXB5WC4ao8 IRGyjEySi+QJtnbPsI/xYUIQJ2EQ9sybbAIfG2RALFozi61uWhrA9sccxxA7G6tNTm5M as1Babisn5k6VZHQOqwASfG9wHYwR/JPlTjbtozPYgP7GpJckemg8N+9cII2PJE1jx4X LALw== X-Gm-Message-State: APjAAAWuyb/AdqjxoCAFFuVZR2tBQ5LREp1M1F+6TR3ZB5b2PSb5y1Cd Dri5+1OwgxW+aSBMBdP1nQtQqHAC X-Google-Smtp-Source: APXvYqxzJFAzwD3qFst493YlWCYAK0j3QfliBI48GF4Na1mKhcNlCOr67B4+Kc/ch0h3vhicIWVJpw== X-Received: by 2002:a5d:56ca:: with SMTP id m10mr16279649wrw.313.1581519752073; Wed, 12 Feb 2020 07:02:32 -0800 (PST) Received: from sblaptop.fritz.box (ipbcc1ab4b.dynamic.kabel-deutschland.de. [188.193.171.75]) by smtp.gmail.com with ESMTPSA id g25sm10403770wmh.3.2020.02.12.07.02.30 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 12 Feb 2020 07:02:31 -0800 (PST) From: Andreas Rheinhardt To: ffmpeg-devel@ffmpeg.org Date: Wed, 12 Feb 2020 16:02:21 +0100 Message-Id: <20200212150223.28790-1-andreas.rheinhardt@gmail.com> X-Mailer: git-send-email 2.20.1 MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 1/3] avcodec/avpacket: Always treat dst in av_packet_ref as uninitialized 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" av_packet_ref() mostly treated the destination packet dst as uninitialized, i.e. the destination fields were simply overwritten. But if the source packet was not reference-counted, dst->buf was treated as if it pointed to an already allocated buffer (if != NULL) to be reallocated to the desired size. The documentation did not explicitly state whether the dst will be treated as uninitialized, but it stated that if the source packet is not refcounted, a new buffer in dst will be allocated. This and the fact that the side-data as well as the codepath taken in case src is refcounted always treated the packet as uninitialized means that dst should always be treated as uninitialized for the sake of consistency. And this behaviour has been explicitly documented. Signed-off-by: Andreas Rheinhardt --- libavcodec/avcodec.h | 2 +- libavcodec/avpacket.c | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/libavcodec/avcodec.h b/libavcodec/avcodec.h index dc5807324f..982a545dc6 100644 --- a/libavcodec/avcodec.h +++ b/libavcodec/avcodec.h @@ -4600,7 +4600,7 @@ void av_packet_free_side_data(AVPacket *pkt); * * @see av_packet_unref * - * @param dst Destination packet + * @param dst Destination packet. Will be treated as initially uninitialized. * @param src Source packet * * @return 0 on success, a negative AVERROR on error. diff --git a/libavcodec/avpacket.c b/libavcodec/avpacket.c index 74845efcd2..0d9ddeee07 100644 --- a/libavcodec/avpacket.c +++ b/libavcodec/avpacket.c @@ -614,6 +614,7 @@ int av_packet_ref(AVPacket *dst, const AVPacket *src) return ret; if (!src->buf) { + dst->buf = NULL; ret = packet_alloc(&dst->buf, src->size); if (ret < 0) goto fail; From patchwork Wed Feb 12 15:31:26 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andreas Rheinhardt X-Patchwork-Id: 17761 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 242C344B416 for ; Wed, 12 Feb 2020 17:31:46 +0200 (EET) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id E81C468AD7A; Wed, 12 Feb 2020 17:31:45 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-wr1-f66.google.com (mail-wr1-f66.google.com [209.85.221.66]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id EEE72689F6B for ; Wed, 12 Feb 2020 17:31:38 +0200 (EET) Received: by mail-wr1-f66.google.com with SMTP id r11so2864426wrq.10 for ; Wed, 12 Feb 2020 07:31:38 -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=7tRA2vyLfIqlH3VS44xH8eFNeyUHcrxPPKyLKm4nU9U=; b=kvbE16wrv3O32G8+2ELK9FZjAkUitf66VQ/KUdjSwBvgWgF8iFDKc0AsQWGc6QnxLf tpTcQS8TMdTVupBXO0xvxaxVWemWM7rsIYnkT4AoM2niTVR4hq4K9wHOKdY9DKbfs6Rg ECp1pL3dVbkPey2EOmb5IwCqw2M+mU89ICo5+F2u2ZtkbJ2y0wmu4dck7H6DEQzm/b+7 otLHZPTvaq/uegsn0FlnI/h6qFFNIz4Hdq0aQrz0O9+yaUv7ed9NUY45RmP4wTt42Jir rhPVsJDod0NIyygcSXYKbQrcHRCQ6s1f2OLCtIOhZXoTRyEFaBw829mBCYR6PBveGQOc ogag== 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=7tRA2vyLfIqlH3VS44xH8eFNeyUHcrxPPKyLKm4nU9U=; b=iUTNJBS6BLy96KFfV/1Q3e11SYvDweO/kJ2Fk1L3zEPFdFINLWMnFCb9Ev/avglXKN IZ/S83ziwKWaaz4+Z4z8eu/kwcIaSUxNX742NOIP86RQAFwHT3SixRZjiDORgIO0wv33 ijn/rMTRRbLSLePThhyrw0HeZW5EyVsi1oW47gxtGmQY0CKmb/zbrzWZhyLI2i4dAoBI gi/kgdBVr2i0fy9uLP4xJp0nrQkiv67DH6097puXLMfIxCkGstsOI3gCjEFD07vWjrfJ H0uUSE+pA5SIRjcMlckKr4livF7b7kvLVsPrJWwX5EpRaa5qRSM3w6aeNFEeDm3TF3im ZLbQ== X-Gm-Message-State: APjAAAUKo7piD5Cf/c0IyC7WKyH9Frh7xigqsYPzwhZTCjH4ldNLU+gl kr6lOmQ/EvclR8J8qFELM96XOptu X-Google-Smtp-Source: APXvYqyTuSohryzqHLDylmFcSkSTOB5g7hv9dEYY0QWB0BDOEa64WGjXRB+b4AtR5AHmgl8+3dsJZQ== X-Received: by 2002:a05:6000:367:: with SMTP id f7mr15574602wrf.174.1581521498232; Wed, 12 Feb 2020 07:31:38 -0800 (PST) Received: from sblaptop.fritz.box (ipbcc1ab4b.dynamic.kabel-deutschland.de. [188.193.171.75]) by smtp.gmail.com with ESMTPSA id a16sm979459wrt.30.2020.02.12.07.31.37 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 12 Feb 2020 07:31:37 -0800 (PST) From: Andreas Rheinhardt To: ffmpeg-devel@ffmpeg.org Date: Wed, 12 Feb 2020 16:31:26 +0100 Message-Id: <20200212153127.1255-1-andreas.rheinhardt@gmail.com> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20200212150223.28790-1-andreas.rheinhardt@gmail.com> References: <20200212150223.28790-1-andreas.rheinhardt@gmail.com> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 2/3] ffplay, avcodec, avformat: Don't initialize before av_packet_ref() 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" It already initializes the packet. Signed-off-by: Andreas Rheinhardt --- fftools/ffplay.c | 2 +- libavcodec/cuviddec.c | 2 +- libavcodec/qsvdec_h2645.c | 2 +- libavcodec/qsvdec_other.c | 2 +- libavformat/fifo.c | 1 - libavformat/img2enc.c | 8 ++++---- libavformat/tee.c | 1 - 7 files changed, 8 insertions(+), 10 deletions(-) diff --git a/fftools/ffplay.c b/fftools/ffplay.c index fee0619f7c..746e5c0e69 100644 --- a/fftools/ffplay.c +++ b/fftools/ffplay.c @@ -2974,7 +2974,7 @@ static int read_thread(void *arg) } if (is->queue_attachments_req) { if (is->video_st && is->video_st->disposition & AV_DISPOSITION_ATTACHED_PIC) { - AVPacket copy = { 0 }; + AVPacket copy; if ((ret = av_packet_ref(©, &is->video_st->attached_pic)) < 0) goto fail; packet_queue_put(&is->videoq, ©); diff --git a/libavcodec/cuviddec.c b/libavcodec/cuviddec.c index acee78cf2c..8b1659dc2e 100644 --- a/libavcodec/cuviddec.c +++ b/libavcodec/cuviddec.c @@ -387,7 +387,7 @@ static int cuvid_decode_packet(AVCodecContext *avctx, const AVPacket *avpkt) AVCUDADeviceContext *device_hwctx = device_ctx->hwctx; CUcontext dummy, cuda_ctx = device_hwctx->cuda_ctx; CUVIDSOURCEDATAPACKET cupkt; - AVPacket filter_packet = { 0 }; + AVPacket filter_packet; AVPacket filtered_packet = { 0 }; int ret = 0, eret = 0, is_flush = ctx->decoder_flushing; diff --git a/libavcodec/qsvdec_h2645.c b/libavcodec/qsvdec_h2645.c index 730feed20a..02c41883b6 100644 --- a/libavcodec/qsvdec_h2645.c +++ b/libavcodec/qsvdec_h2645.c @@ -125,7 +125,7 @@ static int qsv_decode_frame(AVCodecContext *avctx, void *data, /* buffer the input packet */ if (avpkt->size) { - AVPacket input_ref = { 0 }; + AVPacket input_ref; if (av_fifo_space(s->packet_fifo) < sizeof(input_ref)) { ret = av_fifo_realloc2(s->packet_fifo, diff --git a/libavcodec/qsvdec_other.c b/libavcodec/qsvdec_other.c index ff2834c20b..b4df76739c 100644 --- a/libavcodec/qsvdec_other.c +++ b/libavcodec/qsvdec_other.c @@ -123,7 +123,7 @@ static int qsv_decode_frame(AVCodecContext *avctx, void *data, /* buffer the input packet */ if (avpkt->size) { - AVPacket input_ref = { 0 }; + AVPacket input_ref; if (av_fifo_space(s->packet_fifo) < sizeof(input_ref)) { ret = av_fifo_realloc2(s->packet_fifo, diff --git a/libavformat/fifo.c b/libavformat/fifo.c index 7b37fff6da..d11dc6626c 100644 --- a/libavformat/fifo.c +++ b/libavformat/fifo.c @@ -536,7 +536,6 @@ static int fifo_write_packet(AVFormatContext *avf, AVPacket *pkt) int ret; if (pkt) { - av_init_packet(&msg.pkt); ret = av_packet_ref(&msg.pkt,pkt); if (ret < 0) return ret; diff --git a/libavformat/img2enc.c b/libavformat/img2enc.c index a2786ec6f8..b303d38239 100644 --- a/libavformat/img2enc.c +++ b/libavformat/img2enc.c @@ -78,7 +78,7 @@ static int write_muxed_file(AVFormatContext *s, AVIOContext *pb, AVPacket *pkt) VideoMuxData *img = s->priv_data; AVCodecParameters *par = s->streams[pkt->stream_index]->codecpar; AVStream *st; - AVPacket pkt2 = {0}; + AVPacket pkt2; AVFormatContext *fmt = NULL; int ret; @@ -88,8 +88,8 @@ static int write_muxed_file(AVFormatContext *s, AVIOContext *pb, AVPacket *pkt) return ret; st = avformat_new_stream(fmt, NULL); if (!st) { - avformat_free_context(fmt); - return AVERROR(ENOMEM); + ret = AVERROR(ENOMEM); + goto out; } st->id = pkt->stream_index; @@ -105,8 +105,8 @@ static int write_muxed_file(AVFormatContext *s, AVIOContext *pb, AVPacket *pkt) (ret = av_interleaved_write_frame(fmt, &pkt2)) < 0 || (ret = av_write_trailer(fmt))) {} -out: av_packet_unref(&pkt2); +out: avformat_free_context(fmt); return ret; } diff --git a/libavformat/tee.c b/libavformat/tee.c index 56669d9d8e..f2b11fcb35 100644 --- a/libavformat/tee.c +++ b/libavformat/tee.c @@ -564,7 +564,6 @@ static int tee_write_packet(AVFormatContext *avf, AVPacket *pkt) if (s2 < 0) continue; - memset(&pkt2, 0, sizeof(AVPacket)); if ((ret = av_packet_ref(&pkt2, pkt)) < 0) if (!ret_all) { ret_all = ret; From patchwork Wed Feb 12 15:31:27 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andreas Rheinhardt X-Patchwork-Id: 17762 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 E8F2544B416 for ; Wed, 12 Feb 2020 17:31:46 +0200 (EET) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id D63F568AD6C; Wed, 12 Feb 2020 17:31:46 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-wr1-f68.google.com (mail-wr1-f68.google.com [209.85.221.68]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id CDBA6689F6B for ; Wed, 12 Feb 2020 17:31:39 +0200 (EET) Received: by mail-wr1-f68.google.com with SMTP id t3so2888616wru.7 for ; Wed, 12 Feb 2020 07:31:39 -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=95WcuPYMI4e5l8W+DvDfURUzxvjuTxp+HvEqU3gvSZE=; b=NOlrjlO6wA1dFNe6aEGyAXoztZ2UjUzrozvGEAArgAz39/xXcNjG6SjaKRf7KBPxwG RrG1OgYmENixfT+Ds9lDO97bkvF3cCIbsnJ/LZvLiljXJsBzH7HY9P4u2MPevlylwUL6 a/TlrJWEMXEgfImrIg9/QzKgiwYEUWxNPfHlqFdnufO5Q/GN25IjsPk7oNKbNamRZ7MH TlueDyOo2QI3qzeV4BQkJOdOS70Y+DayHtRK3DfFssVehpcHGiEKMfr///op/ubM4bHv iowX7IXBXjRT7SBd/c9wg27hDLCtocbZ3JH1u6iSoahm+3mFVluPfhkSzCjrd9S2S4U2 iypQ== 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=95WcuPYMI4e5l8W+DvDfURUzxvjuTxp+HvEqU3gvSZE=; b=rz1DOlj5qrrFFZrZG/ajMU/aBGBdlBRBQzhtzVbM5uPs3bA3wpsV12VkbSoH5CsYpR QojOLykuXOrJBKN8M9YD4RWn4+h9fT7tbzta8EerAj+LriiXMJvUdcgNN1rGO0Z2ASFa MN8OYAnhvus29WveWsog2mzrA1KNLMztoDHZ9EYkDiPs1SyxN3KeOEAm5yfgHw37DdIm N9WGK8YUumD2pjixbGHmKWAuIO3OHZzu5Yc82Qqznxgme3/RtPMTw7PuWtcvyMN3xF8t HerPaoChAcnmk+9MwASb+Oe4zGSqQ4bulDlLU/zKblR1KSaQXGUv2KFRWyn3sla0ZxPh kZcw== X-Gm-Message-State: APjAAAXw9NLnp02f8KddMw5zmTX20Y/3O3Wr7Z4588Ake+hWTj8vvIkO mLfn2ckxsDxi9yKGzzqLWruyt+ZR X-Google-Smtp-Source: APXvYqwpVoF/avEdb4l9Pk1wBnJhY2YtoKJvBJ7Ji6F5z3RE8fi4QvXIOuwyjMSRkSBVzNrwrjMhqw== X-Received: by 2002:a5d:4709:: with SMTP id y9mr15816113wrq.412.1581521499126; Wed, 12 Feb 2020 07:31:39 -0800 (PST) Received: from sblaptop.fritz.box (ipbcc1ab4b.dynamic.kabel-deutschland.de. [188.193.171.75]) by smtp.gmail.com with ESMTPSA id a16sm979459wrt.30.2020.02.12.07.31.38 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 12 Feb 2020 07:31:38 -0800 (PST) From: Andreas Rheinhardt To: ffmpeg-devel@ffmpeg.org Date: Wed, 12 Feb 2020 16:31:27 +0100 Message-Id: <20200212153127.1255-2-andreas.rheinhardt@gmail.com> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20200212150223.28790-1-andreas.rheinhardt@gmail.com> References: <20200212150223.28790-1-andreas.rheinhardt@gmail.com> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 3/3] avcodec/avpacket: Don't write into non-writable buffer 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" The data of an AVPacket may be a part of the data of an AVBufferRef; Therefore av_grow_packet() doesn't reallocate if the available space in the actual buffer is sufficient for the enlargement. But given that it also zeroes the padding it also needs to make sure that the buffer is actually writable; this commit implements this. Signed-off-by: Andreas Rheinhardt --- libavcodec/avpacket.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/libavcodec/avpacket.c b/libavcodec/avpacket.c index 0d9ddeee07..a7b0b6bd5d 100644 --- a/libavcodec/avpacket.c +++ b/libavcodec/avpacket.c @@ -127,7 +127,8 @@ int av_grow_packet(AVPacket *pkt, int grow_by) return AVERROR(ENOMEM); } - if (new_size + data_offset > pkt->buf->size) { + if (new_size + data_offset > pkt->buf->size || + !av_buffer_is_writable(pkt->buf)) { int ret = av_buffer_realloc(&pkt->buf, new_size + data_offset); if (ret < 0) { pkt->data = old_data;