From patchwork Wed Jun 24 13:46:57 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andreas Rheinhardt X-Patchwork-Id: 20584 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 5800344BAE7 for ; Wed, 24 Jun 2020 16:55:00 +0300 (EEST) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 372F568B655; Wed, 24 Jun 2020 16:55:00 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-lf1-f66.google.com (mail-lf1-f66.google.com [209.85.167.66]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 6066368B63A for ; Wed, 24 Jun 2020 16:54:53 +0300 (EEST) Received: by mail-lf1-f66.google.com with SMTP id o4so1321436lfi.7 for ; Wed, 24 Jun 2020 06:54:53 -0700 (PDT) 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=P7IXR+w1TJy51+pOoysx/EiAXHUxpYGogx5QqTPAlT8=; b=hYpQf9DN/hUvuC1xzHDx6EY3W7irv1hHgguN4R0Tg1ZARn96zFpHsvTCyEwXwvyjM4 04xLC3s+MY3oJ6qSYmIK/2pA3743EDYXZuEDTmMmfNaXZxp1lBXyUS/Xjerx6X4yZL4e laShmn5/lYhFBcyZUQIQSniLdXUvwxdVoHRpWrfxkDaBIx5+FNParfY11JzCaBy9a6to Q4sL91sjNh+o+BhzUUdK63F1L6CDYwAFj90wROjosbbHUhb9ZU/VgAhnwFFM7v8AQXyO kExAVQDOtanUpQtCUDlzbwpRqMiuIiu5N9qxbtONKXn02J3nXVtH8kn000qkye11EGDz DO1Q== 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=P7IXR+w1TJy51+pOoysx/EiAXHUxpYGogx5QqTPAlT8=; b=qnSgFB7N4w38z/4SlK9njv/KqXFl1KVlh/7nr3FAzRWvLfcIPD7kWRDaFcTx2xLKpr yhqMf/7IS9KfQNnG3M0whsdWqs9Zjmu9iImlnijbswruAvEYME2J9j5Q+1Qxs25XNds4 jmP3h6kWgpp1r9t4Rd++qZLCfM9jpD+gyAIPTBp2idyQB7jXT+6NUbkrXDRuonuvT5/T mi/E5mCq8xx1wyalAqg3Y/6NDfMwQ+/KRryEuC/dxrR17j4du7HFQg2n0CNOCf30U7ox NY4FOSzFTnHoRRSuwuooxqkseE7ZbMR9Oe/BZed4XZJLf5c8K37in+/nMwN5DeyPknkO SpsQ== X-Gm-Message-State: AOAM532wnlGA05hcYgVWeyQdWaRS5l8B4JzseKbntHk086UG0ieCqqsr frT+nxxBnD20qqKoiiD7r0WXU5bJ X-Google-Smtp-Source: ABdhPJw6+zaNPxRoADs0ICAxn4qvi4SG7UhhLJ9osQkls0rnFOxgk1hkIpCoL5yQh6+8ecp34a4jTg== X-Received: by 2002:adf:8501:: with SMTP id 1mr34115257wrh.153.1593006433625; Wed, 24 Jun 2020 06:47:13 -0700 (PDT) Received: from sblaptop.fritz.box (ipbcc10296.dynamic.kabel-deutschland.de. [188.193.2.150]) by smtp.gmail.com with ESMTPSA id y25sm8172390wma.19.2020.06.24.06.47.12 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 24 Jun 2020 06:47:13 -0700 (PDT) From: Andreas Rheinhardt To: ffmpeg-devel@ffmpeg.org Date: Wed, 24 Jun 2020 15:46:57 +0200 Message-Id: <20200624134705.14833-1-andreas.rheinhardt@gmail.com> X-Mailer: git-send-email 2.20.1 MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 1/9] avformat/smacker: Don't increase packet counter prematurely 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 Smacker demuxer buffers audio packets before it outputs them, but it increments the counter of buffered packets prematurely: If allocating the audio buffer fails, an error (most likely AVERROR(ENOMEM)) is returned. If the caller decides to call av_read_frame() again, the next call will take the codepath for returning already buffered audio packets and it will fail (because the buffer that ought to be allocated isn't) without decrementing the number of supposedly buffered audio packets (it doesn't matter whether there would be enough memory available in subsequent calls). Depending on the caller's behaviour this is potentially an infinite loop. This commit fixes this by only incrementing the number of buffered audio packets after having successfully read them and unconditionally reducing said number when outputting one of them. It also changes the semantics of the curstream variable: It is now the number of currently buffered audio packets whereas it used to be the index of the last audio stream to be read. (Index refers to the index in the array of buffers, not to the stream index.) Signed-off-by: Andreas Rheinhardt --- libavformat/smacker.c | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/libavformat/smacker.c b/libavformat/smacker.c index 8b1e185817..14dc4ef406 100644 --- a/libavformat/smacker.c +++ b/libavformat/smacker.c @@ -229,7 +229,6 @@ static int smacker_read_header(AVFormatContext *s) return AVERROR(EIO); } - smk->curstream = -1; smk->nextpos = avio_tell(pb); return 0; @@ -249,7 +248,7 @@ static int smacker_read_packet(AVFormatContext *s, AVPacket *pkt) return AVERROR_EOF; /* if we demuxed all streams, pass another frame */ - if(smk->curstream < 0) { + if (smk->curstream <= 0) { avio_seek(s->pb, smk->nextpos, 0); frame_size = smk->frm_size[smk->cur_frame] & (~3); flags = smk->frm_flags[smk->cur_frame]; @@ -301,7 +300,7 @@ static int smacker_read_packet(AVFormatContext *s, AVPacket *pkt) palchange |= 1; } flags >>= 1; - smk->curstream = -1; + smk->curstream = 0; /* if audio chunks are present, put them to stack and retrieve later */ for(i = 0; i < 7; i++) { if(flags & 1) { @@ -315,7 +314,6 @@ static int smacker_read_packet(AVFormatContext *s, AVPacket *pkt) } frame_size -= size; frame_size -= 4; - smk->curstream++; if ((err = av_reallocp(&smk->bufs[smk->curstream], size)) < 0) { smk->buf_sizes[smk->curstream] = 0; return err; @@ -325,6 +323,7 @@ static int smacker_read_packet(AVFormatContext *s, AVPacket *pkt) if(ret != size) return AVERROR(EIO); smk->stream_id[smk->curstream] = smk->indexes[i]; + smk->curstream++; } flags >>= 1; } @@ -345,6 +344,7 @@ static int smacker_read_packet(AVFormatContext *s, AVPacket *pkt) smk->cur_frame++; smk->nextpos = avio_tell(s->pb); } else { + smk->curstream--; if (smk->stream_id[smk->curstream] < 0 || !smk->bufs[smk->curstream]) return AVERROR_INVALIDDATA; if ((ret = av_new_packet(pkt, smk->buf_sizes[smk->curstream])) < 0) @@ -354,7 +354,6 @@ static int smacker_read_packet(AVFormatContext *s, AVPacket *pkt) pkt->stream_index = smk->stream_id[smk->curstream]; pkt->pts = smk->aud_pts[smk->curstream]; smk->aud_pts[smk->curstream] += AV_RL32(pkt->data); - smk->curstream--; } return 0; From patchwork Wed Jun 24 13:46:58 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andreas Rheinhardt X-Patchwork-Id: 20576 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 A031344B3C4 for ; Wed, 24 Jun 2020 16:53:49 +0300 (EEST) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 682A868B5B6; Wed, 24 Jun 2020 16:53:49 +0300 (EEST) 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 87C7268A41E for ; Wed, 24 Jun 2020 16:53:43 +0300 (EEST) Received: by mail-wr1-f66.google.com with SMTP id v3so2403462wrc.1 for ; Wed, 24 Jun 2020 06:53:43 -0700 (PDT) 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=lhAeUX+GBuUhSdjBRfUw+CJad7DSch91utqZHxy75+I=; b=DAbXFg70Zb+VEnma+BtPLuwN08MsrIzMt1D3G/gG8W2JhhK9bEAaPhtIGSfxlnCWWW zMgZlIHqTCBfurgpUzn1hfbxlpIurPjTqdqtwWkOkH+g3xKI8slb+Fn9o0JfeqGsg40k PYloK0+9kmDvWCuX73HzEbkTgK8GpEVxZv9OXKid8YhL80nRu9fTm+bUsVPvhf6TZiwO 6CVYFRp32aWf3d8J9V6LEwpFJny2vlnF1o7D80FQ5FYhulq+hoTsuBIrGl7qtY22ymnH hqrLleOny9BxPAAf94LtB1zOZ1uaBeS6G1x3O6H9lcbmkn7azthsQkw634fvIAxgdiYs nTFQ== 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=lhAeUX+GBuUhSdjBRfUw+CJad7DSch91utqZHxy75+I=; b=Mj8QuuddrBy03A9LLHddHjNI4MdVUpzanceopdfpCpnkvMpJ45dtERg+FbpsVFLniy DAKwiMUI/mZMyPrlRIGPp0SWaGK3B/sCCPrKrnAuVpuTI4DqroedGvBPhLABh9NAR5Vd nMX9UpBQa/G+08Plex8hKxup1l22ejH/2HJADh+QYZqqAd966EC2IvvmsKcelfr3rJGc MbvhS4K0wm39kd9O17hkmmRx+AeX7FxkomVw9JgcIN7gcESspBA9+kNTZmcYuW5lpZu8 35EXZnnf0ZWZXPw/03kM6IRmhymJhE6EsbaDBucsNNuHzWxtMlC5sghb3DobNe0O3L/f YQ7Q== X-Gm-Message-State: AOAM530j9dwz8Z0lPB0jYi3gVDNcpuh6usCGEa7ltiCfb3DTNI5rxNTO JJ+RvV7kZ3JM5D86PQgYF+yRIGcz X-Google-Smtp-Source: ABdhPJwdmbuK28F5O3YA+N4f29cCzGhazZXhXkBjH1phh8J3FPKtaCitXDpbCR8iPwFZYNr6tBjXfA== X-Received: by 2002:adf:e545:: with SMTP id z5mr30357312wrm.89.1593006822395; Wed, 24 Jun 2020 06:53:42 -0700 (PDT) Received: from sblaptop.fritz.box (ipbcc10296.dynamic.kabel-deutschland.de. [188.193.2.150]) by smtp.gmail.com with ESMTPSA id y25sm8172390wma.19.2020.06.24.06.53.41 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 24 Jun 2020 06:53:41 -0700 (PDT) From: Andreas Rheinhardt To: ffmpeg-devel@ffmpeg.org Date: Wed, 24 Jun 2020 15:46:58 +0200 Message-Id: <20200624134705.14833-2-andreas.rheinhardt@gmail.com> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20200624134705.14833-1-andreas.rheinhardt@gmail.com> References: <20200624134705.14833-1-andreas.rheinhardt@gmail.com> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 2/9] avformat/smacker: Avoid potential inifinite loop on error 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" When reading a new frame, the Smacker demuxer seeks to the next frame position where it excepts the next frame; then it (potentially) reads the palette, the audio packets associated with the frame and finally the actual video frame. It is only at the end that the frame counter as well as the position where the next frame is expected get updated. This has a downside: If e.g. invalid data is encountered when reading the palette, the demuxer returns immediately (with an error) and if the caller calls av_read_frame again, the demuxer seeks to the position where it already was, reads the very same palette data again and therefore will return an error again. If the caller calls av_read_frame repeatedly (say, until a packet is received or until EOF), this meight become an infinite loop. This could also happen if e.g. the size of one of the audio frames was invalid or if the frame size was gigantic. This commit changes this by skipping a frame if it turns out to be invalid or an error happens otherwise. This ensures that EOF will be returned eventually in the above scenario. Signed-off-by: Andreas Rheinhardt --- libavformat/smacker.c | 48 ++++++++++++++++++++++++------------------- 1 file changed, 27 insertions(+), 21 deletions(-) diff --git a/libavformat/smacker.c b/libavformat/smacker.c index 14dc4ef406..787c5d8972 100644 --- a/libavformat/smacker.c +++ b/libavformat/smacker.c @@ -57,7 +57,6 @@ typedef struct SmackerContext { int buf_sizes[7]; int stream_id[7]; int curstream; - int64_t nextpos; int64_t aud_pts[7]; } SmackerContext; @@ -229,8 +228,6 @@ static int smacker_read_header(AVFormatContext *s) return AVERROR(EIO); } - smk->nextpos = avio_tell(pb); - return 0; } @@ -238,6 +235,7 @@ static int smacker_read_header(AVFormatContext *s) static int smacker_read_packet(AVFormatContext *s, AVPacket *pkt) { SmackerContext *smk = s->priv_data; + int64_t next_frame_pos; int flags; int ret; int i; @@ -249,8 +247,8 @@ static int smacker_read_packet(AVFormatContext *s, AVPacket *pkt) /* if we demuxed all streams, pass another frame */ if (smk->curstream <= 0) { - avio_seek(s->pb, smk->nextpos, 0); frame_size = smk->frm_size[smk->cur_frame] & (~3); + next_frame_pos = avio_tell(s->pb) + (unsigned)frame_size; flags = smk->frm_flags[smk->cur_frame]; /* handle palette change event */ if(flags & SMACKER_PAL){ @@ -261,8 +259,10 @@ static int smacker_read_packet(AVFormatContext *s, AVPacket *pkt) memcpy(oldpal, pal, 768); size = avio_r8(s->pb); size = size * 4 - 1; - if(size + 1 > frame_size) - return AVERROR_INVALIDDATA; + if (size + 1 > frame_size) { + ret = AVERROR_INVALIDDATA; + goto next_frame; + } frame_size -= size; frame_size--; sz = 0; @@ -279,7 +279,8 @@ static int smacker_read_packet(AVFormatContext *s, AVPacket *pkt) av_log(s, AV_LOG_ERROR, "Invalid palette update, offset=%d length=%d extends beyond palette size\n", off, j); - return AVERROR_INVALIDDATA; + ret = AVERROR_INVALIDDATA; + goto next_frame; } off *= 3; while(j-- && sz < 256) { @@ -305,44 +306,45 @@ static int smacker_read_packet(AVFormatContext *s, AVPacket *pkt) for(i = 0; i < 7; i++) { if(flags & 1) { uint32_t size; - int err; size = avio_rl32(s->pb) - 4; if (!size || size + 4LL > frame_size) { av_log(s, AV_LOG_ERROR, "Invalid audio part size\n"); - return AVERROR_INVALIDDATA; + ret = AVERROR_INVALIDDATA; + goto next_frame; } frame_size -= size; frame_size -= 4; - if ((err = av_reallocp(&smk->bufs[smk->curstream], size)) < 0) { + if ((ret = av_reallocp(&smk->bufs[smk->curstream], size)) < 0) { smk->buf_sizes[smk->curstream] = 0; - return err; + goto next_frame; } smk->buf_sizes[smk->curstream] = size; - ret = avio_read(s->pb, smk->bufs[smk->curstream], size); - if(ret != size) - return AVERROR(EIO); + ret = ffio_read_size(s->pb, smk->bufs[smk->curstream], size); + if (ret < 0) + goto next_frame; smk->stream_id[smk->curstream] = smk->indexes[i]; smk->curstream++; } flags >>= 1; } - if (frame_size < 0 || frame_size >= INT_MAX/2) - return AVERROR_INVALIDDATA; + if (frame_size < 0 || frame_size >= INT_MAX/2) { + ret = AVERROR_INVALIDDATA; + goto next_frame; + } if ((ret = av_new_packet(pkt, frame_size + 769)) < 0) - return ret; + goto next_frame; if(smk->frm_size[smk->cur_frame] & 1) palchange |= 2; pkt->data[0] = palchange; memcpy(pkt->data + 1, smk->pal, 768); - ret = avio_read(s->pb, pkt->data + 769, frame_size); - if(ret != frame_size) - return AVERROR(EIO); + ret = ffio_read_size(s->pb, pkt->data + 769, frame_size); + if (ret < 0) + goto next_frame; pkt->stream_index = smk->videoindex; pkt->pts = smk->cur_frame; pkt->size = ret + 769; smk->cur_frame++; - smk->nextpos = avio_tell(s->pb); } else { smk->curstream--; if (smk->stream_id[smk->curstream] < 0 || !smk->bufs[smk->curstream]) @@ -357,6 +359,10 @@ static int smacker_read_packet(AVFormatContext *s, AVPacket *pkt) } return 0; +next_frame: + avio_seek(s->pb, next_frame_pos, SEEK_SET); + smk->cur_frame++; + return ret; } static int smacker_read_close(AVFormatContext *s) From patchwork Wed Jun 24 13:46:59 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andreas Rheinhardt X-Patchwork-Id: 20577 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 B69A544B3C4 for ; Wed, 24 Jun 2020 16:53:51 +0300 (EEST) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id A13426801E0; Wed, 24 Jun 2020 16:53:51 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-wr1-f65.google.com (mail-wr1-f65.google.com [209.85.221.65]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 728D368B5C8 for ; Wed, 24 Jun 2020 16:53:44 +0300 (EEST) Received: by mail-wr1-f65.google.com with SMTP id o11so2360582wrv.9 for ; Wed, 24 Jun 2020 06:53:44 -0700 (PDT) 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=XjnFVZHrAaW584X5qN4LfjV2jroT102VA7wAipdZ8do=; b=Yru8CNHCVP0PY50zH5iVeVIofS6Cpt7Vk6otbcOuQgjX1W0qZufVme+xOniZkKlHav F1QU5GDum2+Ix4+AcfrLkbgrEX8u6HES/sWosDhankvVWjTT++pBfBUYhhfYYQPoruFC EvK7INaTBoTEUGsu7vFyPu5qAJLOu8n+fla2+5qeJYXiZ0i1fKmoq2jMyZuWJrJehWNJ GlbG6NS3afVHYFNExUSfEmDOu3tSySs/xeq+ze7Rc6baqyPZcowjaej2esfuElhMpAzE Aazt+Buw5xXiXyDi8S0JupNy3i1YMHMjBstM6fJy22YB5CAT2R7f/eQZ0dPU+t/XyJyC QZ+w== 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=XjnFVZHrAaW584X5qN4LfjV2jroT102VA7wAipdZ8do=; b=H4yZUyNLRAZ0qUvqCUB1in2TbOBuz4CwyKgQKAo3WNd1VOjOt2cyvy31pbmdOZP63t z9gUaaaW/5rHdwDeCaJ3LDFX3e+IlBg42jb3XyHowoBslK/O12G1EqLSqJlzBWySFUYw vQOVvoX6EkOGhEgZ3x0NYJt+AO2px+U3MLdhR2Hkf3a8X/eT651vLmX2GAfRWq7u17IZ FwQrFMGeqwE66HmyjwDx0K2XYnTCb+zFc/LVJ8iXQPoD+GJx3hW7bwnCKNIU8sLAFtmO iHneNw+bdyD5WZz4PuAX6JyUQ1sBYb+VDrzcm7ccbA0BLjvPbpwUXYiSfySGzoMo9OUW Tryg== X-Gm-Message-State: AOAM531VZy8JCHKG83TOAzIcDLnT6TzKigH4YGHteaOyLOY8wnTpN6SR sPa2ZXurUrvmkNG5g+zvbOYtr5Ao X-Google-Smtp-Source: ABdhPJyvBsgDpusJXq+Oekmj3GnzorJESSaAzRKDChs+PGFg7WRWsS+NIlPgTvLtnhpCeJGrqDszmQ== X-Received: by 2002:adf:f450:: with SMTP id f16mr31526837wrp.307.1593006823682; Wed, 24 Jun 2020 06:53:43 -0700 (PDT) Received: from sblaptop.fritz.box (ipbcc10296.dynamic.kabel-deutschland.de. [188.193.2.150]) by smtp.gmail.com with ESMTPSA id y25sm8172390wma.19.2020.06.24.06.53.42 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 24 Jun 2020 06:53:42 -0700 (PDT) From: Andreas Rheinhardt To: ffmpeg-devel@ffmpeg.org Date: Wed, 24 Jun 2020 15:46:59 +0200 Message-Id: <20200624134705.14833-3-andreas.rheinhardt@gmail.com> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20200624134705.14833-1-andreas.rheinhardt@gmail.com> References: <20200624134705.14833-1-andreas.rheinhardt@gmail.com> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 3/9] avformat/smacker: Check audio frame size 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 first four bytes of smacker audio are supposed to contain the number of samples, so treat audio frames smaller than that as invalid. Signed-off-by: Andreas Rheinhardt --- libavformat/smacker.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/libavformat/smacker.c b/libavformat/smacker.c index 787c5d8972..c803ecbec9 100644 --- a/libavformat/smacker.c +++ b/libavformat/smacker.c @@ -307,14 +307,14 @@ static int smacker_read_packet(AVFormatContext *s, AVPacket *pkt) if(flags & 1) { uint32_t size; - size = avio_rl32(s->pb) - 4; - if (!size || size + 4LL > frame_size) { + size = avio_rl32(s->pb); + if ((int)size < 8 || size > frame_size) { av_log(s, AV_LOG_ERROR, "Invalid audio part size\n"); ret = AVERROR_INVALIDDATA; goto next_frame; } frame_size -= size; - frame_size -= 4; + size -= 4; if ((ret = av_reallocp(&smk->bufs[smk->curstream], size)) < 0) { smk->buf_sizes[smk->curstream] = 0; goto next_frame; From patchwork Wed Jun 24 13:47:00 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andreas Rheinhardt X-Patchwork-Id: 20578 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 7556E44B3C4 for ; Wed, 24 Jun 2020 16:53:52 +0300 (EEST) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 5F1AA68B601; Wed, 24 Jun 2020 16:53:52 +0300 (EEST) 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 C3F1768B5BF for ; Wed, 24 Jun 2020 16:53:45 +0300 (EEST) Received: by mail-wr1-f68.google.com with SMTP id s10so2341765wrw.12 for ; Wed, 24 Jun 2020 06:53:45 -0700 (PDT) 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=qJi+/PMXp3jn57jOjFHBdYcU0+OJIOHeeHtNj/YzNW0=; b=TTyDn9UIy/tYJ2fsfRGrrJLbZf5TG6hx5ZxnPLwVdnm6iY8pj53PXeeJgyxcSTsYke OVZ0ik6EgXVERfb/ORky1rswEFXfHbjKeRW6rQsLAmEvOiO/Da0rTA0gJ3HMN4zcutpf VnADbgTtFTNsNRHQ7uGUzx2XzFcGxJr3Dm0buJJ4m8KK2iD6X6SOSDGtj5O90VUerBOL wDxZlOm7+bWaYfFjxPqSQe54dWA0F+Ffw/IuIiWPgLcWmiiIt0PLWfJykX+5lkqpLovz NB2ofwzAlSokddvDMATmNBBKVKJtVYfC/iwcFIRBwUXWHAH5TW3L2Rcku/klf2SqT/ye LaXQ== 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=qJi+/PMXp3jn57jOjFHBdYcU0+OJIOHeeHtNj/YzNW0=; b=ImHNAEMgIG3jFUZdiRV8+xl9ImiF2IHV8e+UavmEIHuFxFcBgl6VJ9xAdik7kTD9JA LHGmFsjn0Srus6HBMzLNUI8JqlC33W54xG6zqqmSgXbUQUllZaMBx7zr1a4NWmdf8eeE KfY/gJ8/jBa2f+bq/UwSGZLCXH2Yo0bgD0qj9Ilf5DThoU5aTWrkya4Hg8QiohDzck7N +R5nEtazCGvp6nwL8pqa7bXFkcmocBZSfhIortrl8tTfuaA7inu/z4g1CcI4YB0O9hd7 7hj7WtBd4WxnjJx/NG4NnRYDWkQUnghDfdlheCaj8Jah9iEIJI2O3Q124q3Imsy7S8ih htSQ== X-Gm-Message-State: AOAM531fGw0zH7VB9XmLAioPlKLuOcV+v4IT49yPiDimQEqoa8BLsnm0 VlKWgwt0QAHawyR+FE/yZN198BCY X-Google-Smtp-Source: ABdhPJxo9mpmWAKxKClh8EfM5iJs34QlwBea6XUpbnd8hQnNicq2i+f2O7mTwqXJDB1rZuvp4jUPeg== X-Received: by 2002:a5d:404e:: with SMTP id w14mr28633037wrp.268.1593006824699; Wed, 24 Jun 2020 06:53:44 -0700 (PDT) Received: from sblaptop.fritz.box (ipbcc10296.dynamic.kabel-deutschland.de. [188.193.2.150]) by smtp.gmail.com with ESMTPSA id y25sm8172390wma.19.2020.06.24.06.53.43 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 24 Jun 2020 06:53:44 -0700 (PDT) From: Andreas Rheinhardt To: ffmpeg-devel@ffmpeg.org Date: Wed, 24 Jun 2020 15:47:00 +0200 Message-Id: <20200624134705.14833-4-andreas.rheinhardt@gmail.com> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20200624134705.14833-1-andreas.rheinhardt@gmail.com> References: <20200624134705.14833-1-andreas.rheinhardt@gmail.com> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 4/9] avformat/smacker: Stop caching and copying audio frames 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 layout of a Smacker frame is as follows: For some frames, the beginning of the frame contained a palette for the video stream; then there are potentially several audio frames, followed by the data for the video stream. The Smacker demuxer used to read the palette, then cache every audio frame into a buffer (that gets reallocated to the desired size every time a frame is read into this buffer), then read and return the video frame (together with the palette). The cached audio frames are then returned by copying the data into freshly allocated buffers; if there are none left, the next frame is read. This commit changes this: At the beginning of a frame, the palette is read and cached as now. But audio frames are no longer cached at all; they are returned immediately. This gets rid of copying and also allows to remove the code for the buffer-to-AVStream correspondence. Signed-off-by: Andreas Rheinhardt --- libavformat/smacker.c | 94 ++++++++++++++++++++----------------------- 1 file changed, 43 insertions(+), 51 deletions(-) diff --git a/libavformat/smacker.c b/libavformat/smacker.c index c803ecbec9..4990b7d920 100644 --- a/libavformat/smacker.c +++ b/libavformat/smacker.c @@ -48,14 +48,16 @@ typedef struct SmackerContext { uint32_t *frm_size; uint8_t *frm_flags; /* internal variables */ + int64_t next_frame_pos; int cur_frame; /* current frame for demuxing */ + uint32_t frame_size; + int flags; + int next_audio_index; + int new_palette; uint8_t pal[768]; int indexes[7]; int videoindex; - uint8_t *bufs[7]; - int buf_sizes[7]; - int stream_id[7]; int curstream; int64_t aud_pts[7]; } SmackerContext; @@ -235,21 +237,19 @@ static int smacker_read_header(AVFormatContext *s) static int smacker_read_packet(AVFormatContext *s, AVPacket *pkt) { SmackerContext *smk = s->priv_data; - int64_t next_frame_pos; int flags; int ret; - int i; - int frame_size = 0; - int palchange = 0; if (avio_feof(s->pb) || smk->cur_frame >= smk->frames) return AVERROR_EOF; /* if we demuxed all streams, pass another frame */ - if (smk->curstream <= 0) { - frame_size = smk->frm_size[smk->cur_frame] & (~3); - next_frame_pos = avio_tell(s->pb) + (unsigned)frame_size; + if (!smk->next_audio_index) { + smk->frame_size = smk->frm_size[smk->cur_frame] & (~3); + smk->next_frame_pos = avio_tell(s->pb) + smk->frame_size; + smk->curstream = 0; flags = smk->frm_flags[smk->cur_frame]; + smk->flags = flags >> 1; /* handle palette change event */ if(flags & SMACKER_PAL){ int size, sz, t, off, j, pos; @@ -258,13 +258,12 @@ static int smacker_read_packet(AVFormatContext *s, AVPacket *pkt) memcpy(oldpal, pal, 768); size = avio_r8(s->pb); - size = size * 4 - 1; - if (size + 1 > frame_size) { + size = size * 4; + if (size > smk->frame_size) { ret = AVERROR_INVALIDDATA; goto next_frame; } - frame_size -= size; - frame_size--; + smk->frame_size -= size--; sz = 0; pos = avio_tell(s->pb) + size; while(sz < 256){ @@ -298,69 +297,65 @@ static int smacker_read_packet(AVFormatContext *s, AVPacket *pkt) } } avio_seek(s->pb, pos, 0); - palchange |= 1; + smk->new_palette = 1; } - flags >>= 1; - smk->curstream = 0; - /* if audio chunks are present, put them to stack and retrieve later */ - for(i = 0; i < 7; i++) { - if(flags & 1) { + } + + for (int i = smk->next_audio_index; i < 7; i++) { + if (smk->flags & (1 << i)) { uint32_t size; size = avio_rl32(s->pb); - if ((int)size < 8 || size > frame_size) { + if ((int)size < 8 || size > smk->frame_size) { av_log(s, AV_LOG_ERROR, "Invalid audio part size\n"); ret = AVERROR_INVALIDDATA; goto next_frame; } - frame_size -= size; + smk->frame_size -= size; size -= 4; - if ((ret = av_reallocp(&smk->bufs[smk->curstream], size)) < 0) { - smk->buf_sizes[smk->curstream] = 0; + + if (smk->indexes[i] < 0) { + avio_skip(s->pb, size); + continue; + } + if ((ret = av_get_packet(s->pb, pkt, size)) != size) { + ret = ret < 0 ? ret : AVERROR_INVALIDDATA; goto next_frame; } - smk->buf_sizes[smk->curstream] = size; - ret = ffio_read_size(s->pb, smk->bufs[smk->curstream], size); - if (ret < 0) - goto next_frame; - smk->stream_id[smk->curstream] = smk->indexes[i]; + pkt->stream_index = smk->indexes[i]; + pkt->pts = smk->aud_pts[smk->curstream]; + smk->aud_pts[smk->curstream] += AV_RL32(pkt->data); + smk->next_audio_index = i + 1; smk->curstream++; + return 0; } - flags >>= 1; } - if (frame_size < 0 || frame_size >= INT_MAX/2) { + + if (smk->frame_size >= INT_MAX/2) { ret = AVERROR_INVALIDDATA; goto next_frame; } - if ((ret = av_new_packet(pkt, frame_size + 769)) < 0) + if ((ret = av_new_packet(pkt, smk->frame_size + 769)) < 0) goto next_frame; + flags = smk->new_palette; if(smk->frm_size[smk->cur_frame] & 1) - palchange |= 2; - pkt->data[0] = palchange; + flags |= 2; + pkt->data[0] = flags; memcpy(pkt->data + 1, smk->pal, 768); - ret = ffio_read_size(s->pb, pkt->data + 769, frame_size); + ret = ffio_read_size(s->pb, pkt->data + 769, smk->frame_size); if (ret < 0) goto next_frame; pkt->stream_index = smk->videoindex; pkt->pts = smk->cur_frame; pkt->size = ret + 769; + smk->next_audio_index = 0; + smk->new_palette = 0; smk->cur_frame++; - } else { - smk->curstream--; - if (smk->stream_id[smk->curstream] < 0 || !smk->bufs[smk->curstream]) - return AVERROR_INVALIDDATA; - if ((ret = av_new_packet(pkt, smk->buf_sizes[smk->curstream])) < 0) - return ret; - memcpy(pkt->data, smk->bufs[smk->curstream], smk->buf_sizes[smk->curstream]); - pkt->size = smk->buf_sizes[smk->curstream]; - pkt->stream_index = smk->stream_id[smk->curstream]; - pkt->pts = smk->aud_pts[smk->curstream]; - smk->aud_pts[smk->curstream] += AV_RL32(pkt->data); - } return 0; next_frame: - avio_seek(s->pb, next_frame_pos, SEEK_SET); + avio_seek(s->pb, smk->next_frame_pos, SEEK_SET); + smk->next_audio_index = 0; smk->cur_frame++; return ret; } @@ -368,10 +363,7 @@ next_frame: static int smacker_read_close(AVFormatContext *s) { SmackerContext *smk = s->priv_data; - int i; - for(i = 0; i < 7; i++) - av_freep(&smk->bufs[i]); av_freep(&smk->frm_size); av_freep(&smk->frm_flags); From patchwork Wed Jun 24 13:47:01 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andreas Rheinhardt X-Patchwork-Id: 20581 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 9F34244B3C4 for ; Wed, 24 Jun 2020 16:53:58 +0300 (EEST) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 8C8F868B643; Wed, 24 Jun 2020 16:53:58 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-wm1-f67.google.com (mail-wm1-f67.google.com [209.85.128.67]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id CD71D68B5CC for ; Wed, 24 Jun 2020 16:53:49 +0300 (EEST) Received: by mail-wm1-f67.google.com with SMTP id g75so2398112wme.5 for ; Wed, 24 Jun 2020 06:53:49 -0700 (PDT) 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=b2msGN5z/4GaYtciIha1z2QlagS/aZHgfoBsHUKikPw=; b=LMOtVfXSv+BKhnS8P1U9wh2+WqwThMHfM3Lc4Jk97hlSzq0p+v34jknelxRZ1M3HLw WCil44VQCH9XATpj2R0Ox5Uj63xrb8k2jPSE73H4qxjJFkSyxsItwb/dJoT3Rc3+NYJk cRV9AdOs0IJqmL7Camy5PNdwyR9L7rblfk0/c2PnNZKkccZzgncQwVTZSpvIj9kDZHB9 wSBTGCfL4kdZgwqg7ftH0UJxyYsIdp22FL06ObG6EH2VlhV33t9+gpPlNVm3+gKIkxan MYvKwGDFb2rOG+TjqVFgMw+Tp9wscd1Q4VPn4e3/W8AuGy+wbnM7X68/fZggxSQfAQFM 79gA== 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=b2msGN5z/4GaYtciIha1z2QlagS/aZHgfoBsHUKikPw=; b=ZnCJ2vCXRpG1B+jW9Jg05xt5hrkfAO/7qbihWYY9vDDUtfwk1XNIcX2pPDH0x0XVyC feaM+HVO2P058jVFtXOgCwKVlO/fVHGSUzwEAfD1rHe8AuJ6kYSjMSe6qXWIcYq5fN4Y si2i8Xsef/LG7qy+9UJcqqw09rV18ud42jTdN/HKOi2KptDTyTrXG+NJe+wBEv6sYcCO Me8Ax6TRbDGT63k5/emkFnUxYD3V5hZWI+RsMvtIxxRad2NejR8f17ImbfsgaXOiQywg fKK9tJVfAKyN0IzFIT65DpSEmCa2a7WumP4dhtktO1GuCStCdpKGCgI6FU4aycHJ/Crz tVlA== X-Gm-Message-State: AOAM532Aqt8quRx/nJ+tK10/YEL2bGGhJU5Kvg8zTlt1gBlBHYW0SPOq K3OQwSiUtXvDaxjQag3OyoTcllzX X-Google-Smtp-Source: ABdhPJwcUMgaKxB+zSqqpRx7noOYNmEybC0vLuU7jS7X3VoMDUfyhZtFgezvVkQ0ZPH90+QWlRVDoA== X-Received: by 2002:a1c:2ec7:: with SMTP id u190mr23555697wmu.48.1593006825956; Wed, 24 Jun 2020 06:53:45 -0700 (PDT) Received: from sblaptop.fritz.box (ipbcc10296.dynamic.kabel-deutschland.de. [188.193.2.150]) by smtp.gmail.com with ESMTPSA id y25sm8172390wma.19.2020.06.24.06.53.44 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 24 Jun 2020 06:53:45 -0700 (PDT) From: Andreas Rheinhardt To: ffmpeg-devel@ffmpeg.org Date: Wed, 24 Jun 2020 15:47:01 +0200 Message-Id: <20200624134705.14833-5-andreas.rheinhardt@gmail.com> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20200624134705.14833-1-andreas.rheinhardt@gmail.com> References: <20200624134705.14833-1-andreas.rheinhardt@gmail.com> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 5/9] avformat/smacker: Improve timestamps 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" A Smacker file can contain up to seven audio tracks. Up until now, the pts for the i. audio packet contained in a Smacker frame was simply the end timestamp of the last i. audio packet contained in an earlier Smacker frame. The problem with this is that a Smacker stream need not contain data in every Smacker frame and so the current i. audio packet present may come from a different underlying stream than the last i. audio packet contained in an earlier frame. The sample hypnotix.smk* exhibits this. It has three audio tracks and the first of the three has a longer first packet, so that the audio for the first track is contained in only 235 packets contained in the first 235 Smacker frames; the end timestamp of this track is 166696 (about 7.56s at a timebase of 1/22050); the other two audio tracks both have 253 packets contained in the first 253 Smacker frames. Up until now, the 236th packet of the second track being the first audio packet in the 236th Smacker frame would get the end timestamp of the last first audio packet from the last Smacker frame containing a first audio packet and said last audio packet is the first audio packet from the 235th Smacker frame from the first audio track, so that the timestamp is 166696. In contrast, the 236th packet from the third track (whose packets contain the same number of samples as the packets from the second track) has a timestamp of 156116 (because its timestamp is derived from the end timestamp of the 235th packet of the second audio track). In the end, the second track ended up being 177360/22050 s = 8.044s long; in contrast, the third track was 166780/22050 s = 7.56s long which also coincided with the video. This commit fixes this by not using timestamps from other tracks for a packet's pts. *: https://samples.ffmpeg.org/game-formats/smacker/wetlands/hypnotix.smk Signed-off-by: Andreas Rheinhardt --- libavformat/smacker.c | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/libavformat/smacker.c b/libavformat/smacker.c index 4990b7d920..0138af3d14 100644 --- a/libavformat/smacker.c +++ b/libavformat/smacker.c @@ -58,7 +58,6 @@ typedef struct SmackerContext { uint8_t pal[768]; int indexes[7]; int videoindex; - int curstream; int64_t aud_pts[7]; } SmackerContext; @@ -247,7 +246,6 @@ static int smacker_read_packet(AVFormatContext *s, AVPacket *pkt) if (!smk->next_audio_index) { smk->frame_size = smk->frm_size[smk->cur_frame] & (~3); smk->next_frame_pos = avio_tell(s->pb) + smk->frame_size; - smk->curstream = 0; flags = smk->frm_flags[smk->cur_frame]; smk->flags = flags >> 1; /* handle palette change event */ @@ -323,10 +321,9 @@ static int smacker_read_packet(AVFormatContext *s, AVPacket *pkt) goto next_frame; } pkt->stream_index = smk->indexes[i]; - pkt->pts = smk->aud_pts[smk->curstream]; - smk->aud_pts[smk->curstream] += AV_RL32(pkt->data); + pkt->pts = smk->aud_pts[i]; + smk->aud_pts[i] += AV_RL32(pkt->data); smk->next_audio_index = i + 1; - smk->curstream++; return 0; } } From patchwork Wed Jun 24 13:47:02 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andreas Rheinhardt X-Patchwork-Id: 20579 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 6A2C144B3C4 for ; Wed, 24 Jun 2020 16:53:56 +0300 (EEST) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 54A5A68B615; Wed, 24 Jun 2020 16:53:56 +0300 (EEST) 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 D5A2768B60D for ; Wed, 24 Jun 2020 16:53:47 +0300 (EEST) Received: by mail-wr1-f68.google.com with SMTP id k6so2396433wrn.3 for ; Wed, 24 Jun 2020 06:53:47 -0700 (PDT) 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=1lL/jZlvjxo89Ykea1YDPobnt5e8viOZPvDkBP0aaio=; b=KlYl8fyyRQl6ZNP6fzYH6TNL7aHFDGAwNH3S8nxh3/ogZ6x+q8UEPiAkWWc18QBktZ 8bd85GJLGswoUBeU+9RmxRX0v9iSIUR2tCTFCg7xDi30SOngqUJcwXUu4alg8TrCxPYQ v4iNSIdhnOha6yFYTmMZJE0I2l46Q//TKTOFoI4/uFO7WHZZgWW8DIC5kyaSiWW0vhcP 4sq2uQNamGydADVlwLjTO5MNXWLnatxNNuZy5O5LWuorXuGNbUmCYQxX4UxFfUPj2At9 lK74ubp/gcHgbZkk+oDT1nFgeRxIjYsiY3Ozf4Z+aik2z2scXXWZFetSnmAqRP+ZU/aV DMCQ== 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=1lL/jZlvjxo89Ykea1YDPobnt5e8viOZPvDkBP0aaio=; b=gYQASKfLr3ycQDSddd6YpN1sBQOcWnLHMkQ2LcLoxsvwV6cxqJOJNQAh+uKe4wnrFf 5JFFUG4AaGE62pC6emmaHfw31y2A68UfOP5XoTrzHiCa0osV5KvDorqNTkWjWa54IjE+ imQjl5yS5UdvySc4kOe1u0dvh7Q8RsfxqyRf/gIFGwVGBWZAKuz+ek/HR0mxtzYcn0+U Jh36+Hsa9sNFpJT5RKDeVdYJP1riVmD4SpZP1AhyEXFwAVU/L3aGe5GLwpySCe6iNXqF QJ8mhPi9kG4j/Pd45QJlHu84LKvrbEGSf39+MvqVoSYWu4w/L5J1ZCB5D+ffdZVSqxTT OheA== X-Gm-Message-State: AOAM530uVbOygl1Km3MK1fPhysu6XzXHcJUK4C4hF2XLRMdwss4Xs/mJ u3DfGWPcsTj5c8E7M1FhMehd32wQ X-Google-Smtp-Source: ABdhPJzl46zp2FJGgy+8IYwwR1BrbGZ3uxN+ToCEw7TEC8nPJgtufM3pcNM6fw5oka3Q79YsI+/62Q== X-Received: by 2002:adf:fe4b:: with SMTP id m11mr30645268wrs.36.1593006826995; Wed, 24 Jun 2020 06:53:46 -0700 (PDT) Received: from sblaptop.fritz.box (ipbcc10296.dynamic.kabel-deutschland.de. [188.193.2.150]) by smtp.gmail.com with ESMTPSA id y25sm8172390wma.19.2020.06.24.06.53.46 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 24 Jun 2020 06:53:46 -0700 (PDT) From: Andreas Rheinhardt To: ffmpeg-devel@ffmpeg.org Date: Wed, 24 Jun 2020 15:47:02 +0200 Message-Id: <20200624134705.14833-6-andreas.rheinhardt@gmail.com> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20200624134705.14833-1-andreas.rheinhardt@gmail.com> References: <20200624134705.14833-1-andreas.rheinhardt@gmail.com> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 6/9] avformat/smacker: Don't allocate arrays separately 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" Allocating two arrays with the same number of elements together simplifies freeing them. Signed-off-by: Andreas Rheinhardt --- libavformat/smacker.c | 12 ++++-------- 1 file changed, 4 insertions(+), 8 deletions(-) diff --git a/libavformat/smacker.c b/libavformat/smacker.c index 0138af3d14..2043563fdb 100644 --- a/libavformat/smacker.c +++ b/libavformat/smacker.c @@ -205,13 +205,11 @@ static int smacker_read_header(AVFormatContext *s) avio_rl32(pb); /* padding */ /* setup data */ - smk->frm_size = av_malloc_array(smk->frames, sizeof(*smk->frm_size)); - smk->frm_flags = av_malloc(smk->frames); - if (!smk->frm_size || !smk->frm_flags) { - av_freep(&smk->frm_size); - av_freep(&smk->frm_flags); + smk->frm_size = av_malloc_array(smk->frames, sizeof(*smk->frm_size) + + sizeof(*smk->frm_flags)); + if (!smk->frm_size) return AVERROR(ENOMEM); - } + smk->frm_flags = (void*)(smk->frm_size + smk->frames); /* read frame info */ for (i = 0; i < smk->frames; i++) { @@ -225,7 +223,6 @@ static int smacker_read_header(AVFormatContext *s) ret = avio_read(pb, par->extradata + 16, par->extradata_size - 16); if (ret != par->extradata_size - 16) { av_freep(&smk->frm_size); - av_freep(&smk->frm_flags); return AVERROR(EIO); } @@ -362,7 +359,6 @@ static int smacker_read_close(AVFormatContext *s) SmackerContext *smk = s->priv_data; av_freep(&smk->frm_size); - av_freep(&smk->frm_flags); return 0; } From patchwork Wed Jun 24 13:47:03 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andreas Rheinhardt X-Patchwork-Id: 20580 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 A92F544B3C4 for ; Wed, 24 Jun 2020 16:53:57 +0300 (EEST) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 8CC5768B638; Wed, 24 Jun 2020 16:53:57 +0300 (EEST) 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 417DE68B5CC for ; Wed, 24 Jun 2020 16:53:49 +0300 (EEST) Received: by mail-wr1-f66.google.com with SMTP id o11so2360874wrv.9 for ; Wed, 24 Jun 2020 06:53:49 -0700 (PDT) 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=82D4FpAM1+IIyesbGQ/i5XrU0xXv37dzG1hyS6TcUjE=; b=nAHiC2h+SftMZ/q8VQzJZ+DVuF1n6/vV8TpBtanSgQrjuu2HNDHNQiommskrfbDufC NYMC+HxD1Npi1cD3JD57pRQ1mjqmImcKx0MjgObGPWtPjNe07RR3cJpnRYWdjWuQVrEL Wk6/9fHGbMo1xwuTYGHqcMckZHuH4RgkyI1QNph8/p13vzCkgXaLh+4OG6aL49JQ8a+j EeXsQrh6UROrteHDl9FPN+NsFk31Jzf1yc9R2d4eSK4NKa4ZQlOzjLza9///H0dsTEHv iChWI7XR36tuJCpQPzqNqprXtqdFlGBty+4FjoKEgb5pzIcXbbEPpWSi0BaSGfPmgfZm ZuXg== 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=82D4FpAM1+IIyesbGQ/i5XrU0xXv37dzG1hyS6TcUjE=; b=RnkniNoVKBT/xWh6yWODopkt37G6N++JejP+9zpY+UA+9kG1F5qzEhLsXUHcfwQbcY T6H9kIFLKU8DV8+KYoZWkQtfpANkqqAks45kOM4+joOZplCB5xI89D2KvGAyuIPrBOoh Ih03HmMbsOalvGL0T7r3xkIKQ17Uskow84RrAAKO/pdmykso30MFR4dvZh2e1TtlHwWS aPVPh33U+DukHP5L22Qv1LHogeKCxDCrHbYHmxKMgSRWXxD7GU1rHxUB7PIOXZIC0eXA MvanKG8OK3p15yefT/rkUhCsbKkvWgE3IL1n2hTY5DqqDTUwgUMY7sUq/Io9iRTDyKVZ 4vfQ== X-Gm-Message-State: AOAM530vL/ZfGrzyWO7gZ6WXq1vdfFiNSUuOc1ZOa/V6Qkm4fp/bb8rE feAKk4XsWKXIEYb6F1OXVCx1quyM X-Google-Smtp-Source: ABdhPJwSwFA2aBoR98Rib6fIG13zOHzgQSzDG4xcw7GZ15L0zY/muj3a6yIYgLesBjkCz4V80Nwrdg== X-Received: by 2002:adf:8501:: with SMTP id 1mr34148497wrh.153.1593006828359; Wed, 24 Jun 2020 06:53:48 -0700 (PDT) Received: from sblaptop.fritz.box (ipbcc10296.dynamic.kabel-deutschland.de. [188.193.2.150]) by smtp.gmail.com with ESMTPSA id y25sm8172390wma.19.2020.06.24.06.53.47 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 24 Jun 2020 06:53:47 -0700 (PDT) From: Andreas Rheinhardt To: ffmpeg-devel@ffmpeg.org Date: Wed, 24 Jun 2020 15:47:03 +0200 Message-Id: <20200624134705.14833-7-andreas.rheinhardt@gmail.com> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20200624134705.14833-1-andreas.rheinhardt@gmail.com> References: <20200624134705.14833-1-andreas.rheinhardt@gmail.com> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 7/9] avformat/smacker: Don't read only one byte at a time 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" Instead use ffio_read_size to read data into a buffer. Also check that the desired size was actually successfully read and combine the check with the check for reading the extradata. Signed-off-by: Andreas Rheinhardt --- libavformat/smacker.c | 13 +++++-------- 1 file changed, 5 insertions(+), 8 deletions(-) diff --git a/libavformat/smacker.c b/libavformat/smacker.c index 2043563fdb..201372aee6 100644 --- a/libavformat/smacker.c +++ b/libavformat/smacker.c @@ -215,15 +215,12 @@ static int smacker_read_header(AVFormatContext *s) for (i = 0; i < smk->frames; i++) { smk->frm_size[i] = avio_rl32(pb); } - for (i = 0; i < smk->frames; i++) { - smk->frm_flags[i] = avio_r8(pb); - } - - /* load trees to extradata, they will be unpacked by decoder */ - ret = avio_read(pb, par->extradata + 16, par->extradata_size - 16); - if (ret != par->extradata_size - 16) { + if ((ret = ffio_read_size(pb, smk->frm_flags, smk->frames)) < 0 || + /* load trees to extradata, they will be unpacked by decoder */ + (ret = ffio_read_size(pb, par->extradata + 16, + par->extradata_size - 16)) < 0) { av_freep(&smk->frm_size); - return AVERROR(EIO); + return ret; } return 0; From patchwork Wed Jun 24 13:47:04 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andreas Rheinhardt X-Patchwork-Id: 20582 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 D04F744B3C4 for ; Wed, 24 Jun 2020 16:53:59 +0300 (EEST) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id B5AB268B652; Wed, 24 Jun 2020 16:53:59 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-wm1-f68.google.com (mail-wm1-f68.google.com [209.85.128.68]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 6B6D868B5C6 for ; Wed, 24 Jun 2020 16:53:50 +0300 (EEST) Received: by mail-wm1-f68.google.com with SMTP id o8so2401553wmh.4 for ; Wed, 24 Jun 2020 06:53:50 -0700 (PDT) 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=sxDpyXcItfZ5d7tgBv7cS+orGvxDx20dqd6gAwiDonc=; b=JL3W3B9flZbkI1xeP6l+CDs+92QPoiQ1yWJ4PBe8SAMzgIplbuUHxjcP/riYth23nt K4P6nIaQlSg5IJzjzHmLhJBVVkkxi2g5tVrH9cGYXThlU2e1gKTsyqQwTIZIOpS0QEP+ +svQBqWIydIseDOyeyhNAmVEIVREulyk7D2OikP2kYqsnV0I3ZzROk5Wwj6gyB11mcMN D2+SeaRfxQOyA/Byq1mfOOEW6lnk5kB3jdn0+gJQ31tTUHOQH9Flzazz+uSxRcvrZZlI zT6XCMBWYejhcJyUYwqnkG8JX/1cFbPl15qJbR7+pCGp15bTE/xz0mEIqUe5X2PzEzxX InxA== 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=sxDpyXcItfZ5d7tgBv7cS+orGvxDx20dqd6gAwiDonc=; b=fo4+9K2FcOiTDJi4Ho+8+TKYJaG/nt/pddD3U4+DD/AujXs6RbUZxDosDaNg/E+I3E RIfMLkHuQpqaBn1uzb6+CTbUA/1FYp3RY+lBeCbXmbpObXMxRjPYYdgsee5kAtHKhkMW v746bfcci0sZI6JqH/ImTsga/YM/MYfYNOUsHH79KWRKs9tVGz5Kkbqt1QVEDylZvrBK qj8MVKkazsOS5CuLNREmPA/fqmSfiyN7UwQup8BuY0/S8aBi7QL8FWazPjEaAFzRmUoD ta8nIGV+trgCSKz3thELp0X3J6fY9FNR0LAmY96hbFMq+VRWPXWhi3OjXnW3qvewnvro gTTg== X-Gm-Message-State: AOAM532x+Up00LKyU4NtO8q6jDzgFfia8TApT46f6gOTzrj+TUlfWX0k Hxt+Lu8bD2uohFZOTM58pXQDSirl X-Google-Smtp-Source: ABdhPJxBFRZcQrG/MZ6GHm1OJ3NwQMXMigoGq7SnEIctYtWyGzI5jZQQT5WP8ztmEHPJhL1Zjbcvvg== X-Received: by 2002:a7b:cb4c:: with SMTP id v12mr29608509wmj.43.1593006829538; Wed, 24 Jun 2020 06:53:49 -0700 (PDT) Received: from sblaptop.fritz.box (ipbcc10296.dynamic.kabel-deutschland.de. [188.193.2.150]) by smtp.gmail.com with ESMTPSA id y25sm8172390wma.19.2020.06.24.06.53.48 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 24 Jun 2020 06:53:48 -0700 (PDT) From: Andreas Rheinhardt To: ffmpeg-devel@ffmpeg.org Date: Wed, 24 Jun 2020 15:47:04 +0200 Message-Id: <20200624134705.14833-8-andreas.rheinhardt@gmail.com> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20200624134705.14833-1-andreas.rheinhardt@gmail.com> References: <20200624134705.14833-1-andreas.rheinhardt@gmail.com> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 8/9] avformat/smacker: Use st->priv_data to store array 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 simplifies freeing and allows to completely remove smacker_read_close. Signed-off-by: Andreas Rheinhardt --- libavformat/smacker.c | 16 +++------------- 1 file changed, 3 insertions(+), 13 deletions(-) diff --git a/libavformat/smacker.c b/libavformat/smacker.c index 201372aee6..2e4a499a13 100644 --- a/libavformat/smacker.c +++ b/libavformat/smacker.c @@ -205,10 +205,11 @@ static int smacker_read_header(AVFormatContext *s) avio_rl32(pb); /* padding */ /* setup data */ - smk->frm_size = av_malloc_array(smk->frames, sizeof(*smk->frm_size) + + st->priv_data = av_malloc_array(smk->frames, sizeof(*smk->frm_size) + sizeof(*smk->frm_flags)); - if (!smk->frm_size) + if (!st->priv_data) return AVERROR(ENOMEM); + smk->frm_size = st->priv_data; smk->frm_flags = (void*)(smk->frm_size + smk->frames); /* read frame info */ @@ -219,7 +220,6 @@ static int smacker_read_header(AVFormatContext *s) /* load trees to extradata, they will be unpacked by decoder */ (ret = ffio_read_size(pb, par->extradata + 16, par->extradata_size - 16)) < 0) { - av_freep(&smk->frm_size); return ret; } @@ -351,15 +351,6 @@ next_frame: return ret; } -static int smacker_read_close(AVFormatContext *s) -{ - SmackerContext *smk = s->priv_data; - - av_freep(&smk->frm_size); - - return 0; -} - AVInputFormat ff_smacker_demuxer = { .name = "smk", .long_name = NULL_IF_CONFIG_SMALL("Smacker"), @@ -367,5 +358,4 @@ AVInputFormat ff_smacker_demuxer = { .read_probe = smacker_probe, .read_header = smacker_read_header, .read_packet = smacker_read_packet, - .read_close = smacker_read_close, }; From patchwork Wed Jun 24 13:47:05 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andreas Rheinhardt X-Patchwork-Id: 20583 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 D9D4344B3C4 for ; Wed, 24 Jun 2020 16:54:00 +0300 (EEST) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id C434468B64A; Wed, 24 Jun 2020 16:54:00 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-wm1-f65.google.com (mail-wm1-f65.google.com [209.85.128.65]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 9FC1C68B5CC for ; Wed, 24 Jun 2020 16:53:51 +0300 (EEST) Received: by mail-wm1-f65.google.com with SMTP id a6so4574087wmm.0 for ; Wed, 24 Jun 2020 06:53:51 -0700 (PDT) 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=LP1kmcFH29TADsIZmgcgyFWeL44jM4EyRvPtKjghyNQ=; b=XHO2JeIw9uESL1zWmkcqsvLznIFx5wRfZrq89N7ABCJuGlUFN/+nyBGBzHtOi5GPs3 xMavgvf44DLSEjbyC7OCl7IgkCJw+fydsLWfr716dYgZzeCy5YfEfSyNOfnoK4HMuFPV HzhXP1vxgFDE8FqVAkT23IiQK1YUrcCqB9gvBL3sK0yTVJCC00WxTxVyf3CMi2kEBiFB rU8HT7vIGatkL41my0xMalukDnJW6ntoWtpASW+HobllKhZYeEdAMYuQv4Utk/ZY3GyR F8cGwi5KneyICMPzyJs+Iud5qYaoi91skb+bHMGBYGWYEob2whGfCYQBFlWAnvLKowWl NMcw== 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=LP1kmcFH29TADsIZmgcgyFWeL44jM4EyRvPtKjghyNQ=; b=CbVjbTUKlJB64+LWHxlwMSMoTH9FJ/G6gg51Q+wlT2slbCQcSQsV9dQEQ6lOVBTMio P0cDBaYWfcbequqpANQf2x2Yhqx6+G0eBxLugP7c3d/rsvVJVjRYnnYDKHNj7NLzrbfB 0dGcBRD7Za6HwStj1Fjg11q2GtwI45ZmtMsNaMimRpjdS2JLh1Rh0TfAwFTUn2RNZHqS rFEl9TxK0gUMV8oVS7SRobavEvmiHlV7b1X/lYm2/YTiV6niOX5g34oeErospPMLsyxs Ot0vQzk+lgJFi0ukv6QqkRtyZj3xFypngnRsvRSSwZq7NMki99rGkLvRjBQ2EdQQpmAq A3Ow== X-Gm-Message-State: AOAM530PmpH9zyvPmdeOFfNIATEfFUOc+0S5MjlKoweb7ocYoEZu0uP0 PjbToSBmiqJKFqo7/iB3Z0urkRQu X-Google-Smtp-Source: ABdhPJygJrCUvaGwJmi3I1uiWL5evye+TorKjaLy1OFWX1AK66J7Ow0uQVOGOMtRaxWbVIr11143zw== X-Received: by 2002:a1c:620a:: with SMTP id w10mr10728943wmb.39.1593006830724; Wed, 24 Jun 2020 06:53:50 -0700 (PDT) Received: from sblaptop.fritz.box (ipbcc10296.dynamic.kabel-deutschland.de. [188.193.2.150]) by smtp.gmail.com with ESMTPSA id y25sm8172390wma.19.2020.06.24.06.53.49 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 24 Jun 2020 06:53:49 -0700 (PDT) From: Andreas Rheinhardt To: ffmpeg-devel@ffmpeg.org Date: Wed, 24 Jun 2020 15:47:05 +0200 Message-Id: <20200624134705.14833-9-andreas.rheinhardt@gmail.com> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20200624134705.14833-1-andreas.rheinhardt@gmail.com> References: <20200624134705.14833-1-andreas.rheinhardt@gmail.com> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 9/9] avformat/smacker: Cosmetics 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" Mainly reindentation. Signed-off-by: Andreas Rheinhardt --- libavformat/smacker.c | 60 +++++++++++++++++++++---------------------- 1 file changed, 29 insertions(+), 31 deletions(-) diff --git a/libavformat/smacker.c b/libavformat/smacker.c index 2e4a499a13..0ca5a87b8f 100644 --- a/libavformat/smacker.c +++ b/libavformat/smacker.c @@ -50,14 +50,14 @@ typedef struct SmackerContext { /* internal variables */ int64_t next_frame_pos; int cur_frame; + int videoindex; + int indexes[7]; /* current frame for demuxing */ uint32_t frame_size; int flags; int next_audio_index; int new_palette; uint8_t pal[768]; - int indexes[7]; - int videoindex; int64_t aud_pts[7]; } SmackerContext; @@ -226,7 +226,6 @@ static int smacker_read_header(AVFormatContext *s) return 0; } - static int smacker_read_packet(AVFormatContext *s, AVPacket *pkt) { SmackerContext *smk = s->priv_data; @@ -243,7 +242,7 @@ static int smacker_read_packet(AVFormatContext *s, AVPacket *pkt) flags = smk->frm_flags[smk->cur_frame]; smk->flags = flags >> 1; /* handle palette change event */ - if(flags & SMACKER_PAL){ + if (flags & SMACKER_PAL) { int size, sz, t, off, j, pos; uint8_t *pal = smk->pal; uint8_t oldpal[768]; @@ -258,12 +257,12 @@ static int smacker_read_packet(AVFormatContext *s, AVPacket *pkt) smk->frame_size -= size--; sz = 0; pos = avio_tell(s->pb) + size; - while(sz < 256){ + while (sz < 256) { t = avio_r8(s->pb); - if(t & 0x80){ /* skip palette entries */ - sz += (t & 0x7F) + 1; + if (t & 0x80) { /* skip palette entries */ + sz += (t & 0x7F) + 1; pal += ((t & 0x7F) + 1) * 3; - } else if(t & 0x40){ /* copy with offset */ + } else if (t & 0x40) { /* copy with offset */ off = avio_r8(s->pb); j = (t & 0x3F) + 1; if (off + j > 0x100) { @@ -274,7 +273,7 @@ static int smacker_read_packet(AVFormatContext *s, AVPacket *pkt) goto next_frame; } off *= 3; - while(j-- && sz < 256) { + while (j-- && sz < 256) { *pal++ = oldpal[off + 0]; *pal++ = oldpal[off + 1]; *pal++ = oldpal[off + 2]; @@ -295,16 +294,16 @@ static int smacker_read_packet(AVFormatContext *s, AVPacket *pkt) for (int i = smk->next_audio_index; i < 7; i++) { if (smk->flags & (1 << i)) { - uint32_t size; + uint32_t size; - size = avio_rl32(s->pb); + size = avio_rl32(s->pb); if ((int)size < 8 || size > smk->frame_size) { - av_log(s, AV_LOG_ERROR, "Invalid audio part size\n"); - ret = AVERROR_INVALIDDATA; - goto next_frame; - } + av_log(s, AV_LOG_ERROR, "Invalid audio part size\n"); + ret = AVERROR_INVALIDDATA; + goto next_frame; + } smk->frame_size -= size; - size -= 4; + size -= 4; if (smk->indexes[i] < 0) { avio_skip(s->pb, size); @@ -312,36 +311,35 @@ static int smacker_read_packet(AVFormatContext *s, AVPacket *pkt) } if ((ret = av_get_packet(s->pb, pkt, size)) != size) { ret = ret < 0 ? ret : AVERROR_INVALIDDATA; - goto next_frame; - } + goto next_frame; + } pkt->stream_index = smk->indexes[i]; pkt->pts = smk->aud_pts[i]; smk->aud_pts[i] += AV_RL32(pkt->data); smk->next_audio_index = i + 1; return 0; - } } + } if (smk->frame_size >= INT_MAX/2) { - ret = AVERROR_INVALIDDATA; - goto next_frame; - } + ret = AVERROR_INVALIDDATA; + goto next_frame; + } if ((ret = av_new_packet(pkt, smk->frame_size + 769)) < 0) - goto next_frame; + goto next_frame; flags = smk->new_palette; - if(smk->frm_size[smk->cur_frame] & 1) + if (smk->frm_size[smk->cur_frame] & 1) flags |= 2; pkt->data[0] = flags; - memcpy(pkt->data + 1, smk->pal, 768); + memcpy(pkt->data + 1, smk->pal, 768); ret = ffio_read_size(s->pb, pkt->data + 769, smk->frame_size); - if (ret < 0) - goto next_frame; - pkt->stream_index = smk->videoindex; - pkt->pts = smk->cur_frame; - pkt->size = ret + 769; + if (ret < 0) + goto next_frame; + pkt->stream_index = smk->videoindex; + pkt->pts = smk->cur_frame; smk->next_audio_index = 0; smk->new_palette = 0; - smk->cur_frame++; + smk->cur_frame++; return 0; next_frame: