From patchwork Wed Sep 8 20:14:34 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Martin Reboredo X-Patchwork-Id: 30080 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6602:2a4a:0:0:0:0 with SMTP id k10csp759882iov; Wed, 8 Sep 2021 13:15:28 -0700 (PDT) X-Google-Smtp-Source: ABdhPJzAXpciIYp84UFO0dIMfMYSZSPKEymLv4M/HXEEJU40qoqfdljB2zwuIQBuoIVbkieKgY+S X-Received: by 2002:a50:ed06:: with SMTP id j6mr70774eds.148.1631132128249; Wed, 08 Sep 2021 13:15:28 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1631132128; cv=none; d=google.com; s=arc-20160816; b=zShWmzNZwPoWTgWzrZ6m42eRu3MAP6kRZM7edxMqkKbnG0wrU6AQXKdNHs7NwiRM+M o5kA6bFiNOshMR0c+NN2YjQzH8XlFs0wPCmuwCe4uRDmO5xY00GYNeX0ob6a+Jkt4rkC dGkdSAojvUcbvNKEq6nRsBXsPFTZJ4axkxwPBO/PV7aw1+MLHYR1JLgniyPidbYp2Glv +Mq2CRk0G94FCcixXQrHzm/9HQnfxsNRoCIN439QEp4512b6x/T2DRCk814uFxGRki2U RDfn19o+IxQNbHtzZLTl31X66twsOBCYYOfph3G9DYLAsGUb9XHvJalMf2B8XFDFlraf Xd+w== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:content-transfer-encoding:reply-to:list-subscribe :list-help:list-post:list-archive:list-unsubscribe:list-id :precedence:subject:mime-version:references:in-reply-to:message-id :date:to:from:dkim-signature:delivered-to; bh=nTWNAIYMyMms6WSvgjziUP3X8UVkFm8kOp1YcXeIIAk=; b=Zk6x5gBRj+zynsU7X6aLFpqTd0WAd0c2hi7H8U8QDv61xQa5OHhNGTkHPGG2AveEWK vhWeRuQb682Dihq983gsBJPthPjA0AMmiwYllJbjLaq3cDSGG54NufjKAzMNNjcUgGbi WUuZAUGbCkfdhjAHNc/MYTrrOBuVzlOoItUHmHSC1CnFmE88O4RnbEocm/x7w837u2X0 iIVXN2rpxo/Ip/xfmkOUDu+HeONh9bDKQ2wo/AZIAyWtflQ//AUXunp+w+Ovv5U9ufr+ Bln/7JFeQv6QgYc5KcivXE8MAGwvu4TQn3+h3RsVTl5cZBX1+UZloQrjMXzTFgyTCK+s BJ2w== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@gmail.com header.s=20210112 header.b="jfd/Qsr/"; spf=pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) smtp.mailfrom=ffmpeg-devel-bounces@ffmpeg.org; dmarc=fail (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id c9si44031ejj.296.2021.09.08.13.15.04; Wed, 08 Sep 2021 13:15:28 -0700 (PDT) Received-SPF: pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) client-ip=79.124.17.100; Authentication-Results: mx.google.com; dkim=neutral (body hash did not verify) header.i=@gmail.com header.s=20210112 header.b="jfd/Qsr/"; spf=pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) smtp.mailfrom=ffmpeg-devel-bounces@ffmpeg.org; dmarc=fail (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 5331F68A6A1; Wed, 8 Sep 2021 23:14:50 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-qk1-f178.google.com (mail-qk1-f178.google.com [209.85.222.178]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 3A51C689B7F for ; Wed, 8 Sep 2021 23:14:42 +0300 (EEST) Received: by mail-qk1-f178.google.com with SMTP id bk29so3960059qkb.8 for ; Wed, 08 Sep 2021 13:14:42 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=from:to:subject:date:message-id:in-reply-to:references:mime-version :content-transfer-encoding; bh=p/zR5k45Z1cljUs7P1pz8EIpvlAIyMdBfZ1asn8Y3wA=; b=jfd/Qsr/iAYOMJT8iMA62iQMJ6tJN1hNRUjgvycVS0PpMxtbqbi7u9t7FldJU5FVg6 1H/gwfq5F6YtPcl0347AvQ/3jOmnecW54L5NImnaNWQ4FJsWFPa9uvqq7RVowV8BuKbr Hqg4bg7TFXMwu5XFMj8Thp8bN7Sgc2HY2Wwpr1oKkC/pMFzvlLsO7OwwCnoVCdaeaOVp Tf0lz9HDyK3K0hH1tuojHJ0YNcV8MT8m1gBJmwWL8uZ6q3wBzxyPXV5cM/qL12Ly1Pwy VsaWpAlZCC6Mz+CdNqdEuRQymPfMhzE66RTsutN8BvDrxeFLEQrx6wQllOO8j7xGRhkT hKPQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=p/zR5k45Z1cljUs7P1pz8EIpvlAIyMdBfZ1asn8Y3wA=; b=YTb9rJrIHOHpZlQTXEQwwdVzNd15EU9GzldZyuMrROiLoesrxCCj8aW7K6d9m8G5Sk +PPlwlDoqn+22bnPkdxzaqSU2p00hbZ5jn0t99R/1l0dyu26sZVG4sqZ/oW5S++rROc4 bQ9sImosazIgCEsJPJAzhDYqmVbP4An1wPI/ret1l6QSgAvzkbd+w5CpB8Ei9qU20d6W GPPmqlZN51q0eKPwBSkdd/8ge0W2JYCYsl4CDEyqNR+0mF4S8yAMyOex6KWgN+l1EH+o o/TBngmrEazyxKlD51tK2fQ5IVkf+RazdB5iRGjdEQa6SY38Dv1lM70CIwc/ZENrTv8m 02yg== X-Gm-Message-State: AOAM533H3dG9f6koq/kZIF+1Inc4gMox42y60EwMKM5cuH00raGMGdwo pcRhaYxwVxhsWh9eq3VMvZe2tvETzIU= X-Received: by 2002:a37:624f:: with SMTP id w76mr5189022qkb.284.1631132080883; Wed, 08 Sep 2021 13:14:40 -0700 (PDT) Received: from localhost.localdomain (static.218.11.itcsa.net. [190.15.218.11]) by smtp.gmail.com with ESMTPSA id s18sm122275qkj.87.2021.09.08.13.14.39 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 08 Sep 2021 13:14:40 -0700 (PDT) From: Martin Reboredo To: ffmpeg-devel@ffmpeg.org Date: Wed, 8 Sep 2021 17:14:34 -0300 Message-Id: <20210908201434.3658940-2-yakoyoku@gmail.com> X-Mailer: git-send-email 2.32.0 In-Reply-To: <20210908201434.3658940-1-yakoyoku@gmail.com> References: <20210908201434.3658940-1-yakoyoku@gmail.com> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH v2 2/2] avformat/webpenc: better detection of anim chunks 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 Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" X-TUID: yBwver72posU Receiving RIFF chunks as `av_packet`s from `webpdec.c` in `webpenc.c` it wasn't doing proper animated frame detection/enumeration. Check for `ANIM`/`ANMF` chunks to see if the package is an animated WebP packet and for the `ANMF`/`ALPH`/`VP8 `/`VP8L` chunks if it's an actual frame. Signed-off-by: Martin Reboredo --- libavformat/webpenc.c | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/libavformat/webpenc.c b/libavformat/webpenc.c index 9599fe7b85..50bee91910 100644 --- a/libavformat/webpenc.c +++ b/libavformat/webpenc.c @@ -55,13 +55,18 @@ static int is_animated_webp_packet(AVPacket *pkt) { int skip = 0; unsigned flags = 0; + int fourcc = AV_RL32(pkt->data); if (pkt->size < 4) return AVERROR_INVALIDDATA; - if (AV_RL32(pkt->data) == AV_RL32("RIFF")) + if (fourcc == AV_RL32("RIFF")) skip = 12; + else if (fourcc == AV_RL32("ANIM")) + return 1; + else if (fourcc == AV_RL32("ANMF")) + return 1; // Safe to do this as a valid WebP bitstream is >=30 bytes. - if (pkt->size < skip + 4) + if (pkt->size < skip + 4 && pkt->size != 12) return AVERROR_INVALIDDATA; if (AV_RL32(pkt->data + skip) == AV_RL32("VP8X")) { flags |= pkt->data[skip + 4 + 4]; @@ -143,6 +148,7 @@ static int flush(AVFormatContext *s, int trailer, int64_t pts) static int webp_write_packet(AVFormatContext *s, AVPacket *pkt) { WebpContext *w = s->priv_data; + int fourcc = AV_RL32(pkt->data); int ret; if (!pkt->size) @@ -161,7 +167,9 @@ static int webp_write_packet(AVFormatContext *s, AVPacket *pkt) return ret; av_packet_ref(&w->last_pkt, pkt); } - ++w->frame_count; + if (fourcc == AV_RL32("ANMF") || fourcc == AV_RL32("ALPH") || + fourcc == AV_RL32("VP8 ") || fourcc == AV_RL32("VP8L")) + ++w->frame_count; return 0; }