From patchwork Tue Jun 20 14:40:34 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: James Almer X-Patchwork-Id: 42247 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a20:be15:b0:121:b37c:e101 with SMTP id ge21csp1441696pzb; Tue, 20 Jun 2023 07:40:55 -0700 (PDT) X-Google-Smtp-Source: ACHHUZ6fAVtXbP+zrA1MsJAsLmMJCSQTFKtdfN4JALad1lGT/BX74wmekgclZAQIY4Vk/tisHMFN X-Received: by 2002:aa7:d849:0:b0:504:b177:3ef3 with SMTP id f9-20020aa7d849000000b00504b1773ef3mr7841574eds.3.1687272055034; Tue, 20 Jun 2023 07:40:55 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1687272055; cv=none; d=google.com; s=arc-20160816; b=G0aYIetNjtpPGzI0syIBkstb5s9IImXe6YIrw2o2L+L3nv9cFnSgg/+aax/lIGgonU 6sqZHPPSPCKi5qwDP3LtLa9lxq72NUJYMsd/W55jBOaOBBfaWPO/i7hQjgz8++JhLWaI fuWZQWa/y2iD+UU8SIjIXCUdlBLq800qb14SMpANweJHj+wBSeffECAiFgeryQlLiryO 5l6xMI+MqHMXW3AqnbTUX55RyGMdprxvvVKu06kZYx61gCt2GDNRVivLO8b2HJErNTrN uwZXu1fKFERuVYicxnjSyUOxaBbOvEcb3Fn4djJTrCArWwOphYPH6UvH2oFK4degBuiq J0ug== 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:message-id:date:to:from :dkim-signature:delivered-to; bh=BTkS/Vr2QchPWvNwUrIxqmj71lIKGRadyn6Y345HNjg=; b=Nx4AetW6u61nqQVSPz5Evpb1IyAbCKY53vvkBHWmoR8bA6mGJqxLz0vsNO0bAFnrCC IVaUBDt+SbEfwbtuQdpH/IabsfzZbC80hVRvNbrKj/UZEnSgmiYlN4l/LFdiVm2KW5Bv tkpWT28A3KLaKHaTmMpEKe2cKHanoDfnaE1u+4MSXGzfrhnVTnzgTGyPzJjWeMjjTu9e 245ZBWWQHjQu3Cn2YTeJUrAxin0y7QOZ3gT/YdUP7fz7tAiHPwIHG58slYWlnQVjDHEt G1KeLx0fYve5/w4eIGkn7YZ6U/MRL6stAcxDZM8vCNlhR1sWKco7VAMNyaF0TCE7bU3C Q1ug== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@gmail.com header.s=20221208 header.b=fd1VfU3v; 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 u19-20020a170906125300b0098896918caasi1208830eja.666.2023.06.20.07.40.54; Tue, 20 Jun 2023 07:40:55 -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=20221208 header.b=fd1VfU3v; 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 B242668C074; Tue, 20 Jun 2023 17:40:51 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-oa1-f47.google.com (mail-oa1-f47.google.com [209.85.160.47]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 38CB868BF4B for ; Tue, 20 Jun 2023 17:40:45 +0300 (EEST) Received: by mail-oa1-f47.google.com with SMTP id 586e51a60fabf-1ab19a88324so1090418fac.1 for ; Tue, 20 Jun 2023 07:40:45 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20221208; t=1687272043; x=1689864043; h=content-transfer-encoding:mime-version:message-id:date:subject:to :from:from:to:cc:subject:date:message-id:reply-to; bh=GqWY22VxfaRYqc8SnreIzWXjnP2jD2TrCmCplq1q0Jo=; b=fd1VfU3vPGIp1zHgD3QEiVW5Q1LIARJMYkJB2zAw9AYOAFsiHiOmyCBmiNkG6TaahF u0rkZDC58q6xy4iGLq12giz0HVAZ5PwU4HnWX3Lv9RNEfZfmwBqTU93Y/WhpUK+us+Jv PVAFTXhIjpSmL3yR//q+EI0XHtxJjaLYTJnWkfKZonhloukFAneNYSMjqKKb3pWT7EyR bp2EHZRO25/xB9snzNiVku2fo/kSW4g+hZDsWDxyztbY4DVlJVT9CXtR7YYbHfS5hXkr 28LliNYGzwNbeuzOCxyB420dEx4DqA3Tk8nYqpNZmr+6PINOC4CgzPlxgiPpUmB3wKfQ 2hOw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1687272043; x=1689864043; h=content-transfer-encoding:mime-version:message-id:date:subject:to :from:x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=GqWY22VxfaRYqc8SnreIzWXjnP2jD2TrCmCplq1q0Jo=; b=LUFti9CfpXTSlPxBoBIJ0KqDERoMc+Gom8LsZoTPdkf5/5j/ZukKNxT6Mu0YJhu9J0 yEYd6ty4sTWDyshLaDS4q0nBq4Z8R2ZeBAptLeByNhcSnSoBeKo6vVblI5c3hjaytkda Ed9B7IWbgedjy2Rsn/cCIxV/VOp+CqwF83MMdWa5SucPvOKQSX59+plkRF6H8/oCSpzz hJDFwhYNdQ85a8KkJ8Nna3YmzWeaXozGkiW2VFuK15nfcUNectEwpnCbDsN0aPustHh2 jO2Gg0FYvnBnMngfcvpaBKqwCnTSgCAgJDqz1AqxzSmjP0m1E6UqPGi10Swb0/6+UGF2 D2/A== X-Gm-Message-State: AC+VfDyyMvd2aVYsujsQj1ZRaPtQ4ybvpFMA0aprMo6MWnL53COKipIi VdKqjr6mC7CFSpkC3x2o/OhkNntLHF0= X-Received: by 2002:a05:6870:8181:b0:1aa:3563:7676 with SMTP id k1-20020a056870818100b001aa35637676mr2567892oae.4.1687272043341; Tue, 20 Jun 2023 07:40:43 -0700 (PDT) Received: from localhost.localdomain (host197.190-225-105.telecom.net.ar. [190.225.105.197]) by smtp.gmail.com with ESMTPSA id nl13-20020a056871458d00b001a69e7efd13sm1417838oab.5.2023.06.20.07.40.42 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 20 Jun 2023 07:40:42 -0700 (PDT) From: James Almer To: ffmpeg-devel@ffmpeg.org Date: Tue, 20 Jun 2023 11:40:34 -0300 Message-ID: <20230620144042.9629-1-jamrial@gmail.com> X-Mailer: git-send-email 2.41.0 MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 1/9] avformat/evcdec: ensure there are enough bytes to seekback 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: oLCIKlV+gKMd Signed-off-by: James Almer --- libavformat/evcdec.c | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/libavformat/evcdec.c b/libavformat/evcdec.c index 890babd3cb..9c4969e78f 100644 --- a/libavformat/evcdec.c +++ b/libavformat/evcdec.c @@ -30,6 +30,7 @@ #include "rawdec.h" #include "avformat.h" +#include "avio_internal.h" #include "internal.h" @@ -192,8 +193,12 @@ static int evc_read_packet(AVFormatContext *s, AVPacket *pkt) } while(!au_end_found) { - uint8_t buf[EVC_NALU_LENGTH_PREFIX_SIZE]; + + ret = ffio_ensure_seekback(s->pb, EVC_NALU_LENGTH_PREFIX_SIZE); + if (ret < 0) + return ret; + ret = avio_read(s->pb, (unsigned char *)&buf, EVC_NALU_LENGTH_PREFIX_SIZE); if (ret < 0) { av_packet_unref(pkt); From patchwork Tue Jun 20 14:40:35 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: James Almer X-Patchwork-Id: 42248 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a20:be15:b0:121:b37c:e101 with SMTP id ge21csp1441790pzb; Tue, 20 Jun 2023 07:41:03 -0700 (PDT) X-Google-Smtp-Source: ACHHUZ5ubXHm2PjhDP53cDtq6+asJtyVlo4GqolDHdZNxmk5AGCPa3udykslusnCjQwQDJMlZ5n3 X-Received: by 2002:a19:710b:0:b0:4f6:2a02:fc1a with SMTP id m11-20020a19710b000000b004f62a02fc1amr6933756lfc.17.1687272063532; Tue, 20 Jun 2023 07:41:03 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1687272063; cv=none; d=google.com; s=arc-20160816; b=SHC1eo0/DNHXfqavmdL1J8Ti3xdNgwcG9HjDLtHWSRekYqPEBW5A782uw7KV/IFuVV L3tCSkXLJClVAdiv3J8S5L+HYZUpuls0VX0Ti2VBw/aHtYMto/h9U2VRI2hW2u/ViB9W ZBi7gneZ44/JE0H+jBhSuSUKZNtLgHCfwEgTpYuq+ucFM2IrPa/XLluuSd2JWBIDN4ml 10kHygXMWWqFZMz/KYTGUBJwrHU/rDOF0A8OCQLeXxSQhr8OCU0rrpqpJW0/DARl7gkE 9Ojed/CIkESQMhIEIHcT892SYE77YG595ZIuE4e65LmqTmSIZFLHW9CyLSo9TzDeVeLg kS0g== 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=w1cYpCLCK0wrWKdSRxAU1qb7Gja5rjW2BeTRcWhpaa8=; b=GnrdIkIF/af1Bfpip3yaTZUc4pmbTXLMNhL4nPZ59ikJo9KlB/kNhgmXSLKjxZ+wmm KjTwaRK2InxzP/iTM4120IbOh3ir2zzI8JGLL7iXocbueKKwyb1lvNxpUl/+wXMiNEkV A8+jJoSr3me4MCvwsQhNr9mYWl1qKFVYcuWanl6mNycRXNQr0+u2A7XG5KOcBucvwW/M z5/XZW+nGSDUBh+l7oiqDQKpZDa/NFaptiWMlJm+CsfiqFjBIyN81AgWnEi7C2QE885F 3EqzhTmTFVLKRYi2ZoD2c4Kk/wAX6xU3gLiPCpeID9riAeNG9KNAnU/miN7d9LmtDbOy u2PA== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@gmail.com header.s=20221208 header.b=D7ScE8S2; 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 d13-20020aa7d5cd000000b0051a2dfc8c43si1200507eds.547.2023.06.20.07.41.03; Tue, 20 Jun 2023 07:41:03 -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=20221208 header.b=D7ScE8S2; 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 9BDB868C159; Tue, 20 Jun 2023 17:40:52 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-oa1-f47.google.com (mail-oa1-f47.google.com [209.85.160.47]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 6EE2668C074 for ; Tue, 20 Jun 2023 17:40:46 +0300 (EEST) Received: by mail-oa1-f47.google.com with SMTP id 586e51a60fabf-1a9a2724a62so4308858fac.2 for ; Tue, 20 Jun 2023 07:40:46 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20221208; t=1687272045; x=1689864045; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:from:to:cc:subject:date:message-id :reply-to; bh=MAgAO3SChxYdAJy695y2hEJS0ndqqGZpw7Nt6AWvpVg=; b=D7ScE8S2rdhmVV+muHzf/EveH8vB1wznassctar36oTTeFvW02uYuOlc/gbwxW69H6 hWSwS0b5h9Y461yeNWO036upI8QADzLfIVgO98rZAodHhQAU66FCkim/lj+ydJFmDTqW 5Ic11PVI1QJtGsJ1/eV1Tjkm2nplX4YjoI7RWEikRFDdIQi0Y4IJ/Ni/kLJw/TQRu4n0 z8QvqmuODuKhI/JtR8lzJdd9Jzl3uJAzNa/JFI2HjROwuScL2O5Wd45ybO7mvP+4Zdkt nVSDhb3jYL9kMp8j/hu7rmG9DO+n21whz9Xhf1tjbLR66f2i7r2HsVc7Izh/qyKG3yqh Y2+w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1687272045; x=1689864045; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=MAgAO3SChxYdAJy695y2hEJS0ndqqGZpw7Nt6AWvpVg=; b=BSXOSLkl65phq+josVyqv/FuN7L1PJeiK0mT8XCERDx9QaHnZR8Oy8f26uk/O8n/+z iV+2Pqr0EL9FKFhFU45U6EUQolMTwL3SEmgCmJQKlA2lCKsvSa1iD7JcsWuYN83aX+kr XVW9iCASyEd9pVeAXZt5MamlcVd2lOFU8IrIzjj7NB+01c2WimgYqJty2da4tMZP4DXy DGVR562OctFbLlQBk4y/ZJjm3Af3zc2LAVYda9HSt5BBGQJ+Z18VTJRRsFuSBNTbQcUK abhogStPjhFZToztuOZUATJMDME0Bp6Z4uAAnOMbfTKRjkKfgRURp4xO2DpuRrvYCtyG zO7Q== X-Gm-Message-State: AC+VfDxeS4C0xyBpqueY+5W2YOVHipWsp193RmdX5WSThGx20IpeoKkT 8AhyQFt3aJxBdN2wy/3XKFOlMpwwX5I= X-Received: by 2002:a05:6870:ad09:b0:1a6:7eb8:2334 with SMTP id nt9-20020a056870ad0900b001a67eb82334mr8693695oab.47.1687272044564; Tue, 20 Jun 2023 07:40:44 -0700 (PDT) Received: from localhost.localdomain (host197.190-225-105.telecom.net.ar. [190.225.105.197]) by smtp.gmail.com with ESMTPSA id nl13-20020a056871458d00b001a69e7efd13sm1417838oab.5.2023.06.20.07.40.43 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 20 Jun 2023 07:40:44 -0700 (PDT) From: James Almer To: ffmpeg-devel@ffmpeg.org Date: Tue, 20 Jun 2023 11:40:35 -0300 Message-ID: <20230620144042.9629-2-jamrial@gmail.com> X-Mailer: git-send-email 2.41.0 In-Reply-To: <20230620144042.9629-1-jamrial@gmail.com> References: <20230620144042.9629-1-jamrial@gmail.com> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 2/9] avformat/evcdec: remove unnecessary av_packet_unref() calls 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: NY1oilP4cyzF And return proper error codes. Signed-off-by: James Almer --- libavformat/evcdec.c | 17 +++++------------ 1 file changed, 5 insertions(+), 12 deletions(-) diff --git a/libavformat/evcdec.c b/libavformat/evcdec.c index 9c4969e78f..68f3a91e53 100644 --- a/libavformat/evcdec.c +++ b/libavformat/evcdec.c @@ -186,11 +186,8 @@ static int evc_read_packet(AVFormatContext *s, AVPacket *pkt) EVCDemuxContext *const c = s->priv_data; - int eof = avio_feof (s->pb); - if(eof) { - av_packet_unref(pkt); + if (avio_feof(s->pb)) return AVERROR_EOF; - } while(!au_end_found) { uint8_t buf[EVC_NALU_LENGTH_PREFIX_SIZE]; @@ -200,16 +197,12 @@ static int evc_read_packet(AVFormatContext *s, AVPacket *pkt) return ret; ret = avio_read(s->pb, (unsigned char *)&buf, EVC_NALU_LENGTH_PREFIX_SIZE); - if (ret < 0) { - av_packet_unref(pkt); + if (ret < 0) return ret; - } nalu_size = read_nal_unit_length((const uint8_t *)&buf, EVC_NALU_LENGTH_PREFIX_SIZE); - if(nalu_size <= 0) { - av_packet_unref(pkt); - return -1; - } + if (nalu_size <= 0) + return AVERROR_INVALIDDATA; avio_seek(s->pb, -EVC_NALU_LENGTH_PREFIX_SIZE, SEEK_CUR); @@ -217,7 +210,7 @@ static int evc_read_packet(AVFormatContext *s, AVPacket *pkt) if (ret < 0) return ret; if (ret != (nalu_size + EVC_NALU_LENGTH_PREFIX_SIZE)) - return AVERROR(EIO); + return AVERROR_INVALIDDATA; ret = av_bsf_send_packet(c->bsf, pkt); if (ret < 0) { From patchwork Tue Jun 20 14:40:36 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: James Almer X-Patchwork-Id: 42249 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a20:be15:b0:121:b37c:e101 with SMTP id ge21csp1441864pzb; Tue, 20 Jun 2023 07:41:12 -0700 (PDT) X-Google-Smtp-Source: ACHHUZ6T++P36NnBHDMFWUH/Mg8UYSu0pP2KZTYWbG4PkKP9+Ks/BRrbp+3vcBKT6vX5IoGtFZIB X-Received: by 2002:a17:906:eecd:b0:973:da59:7c91 with SMTP id wu13-20020a170906eecd00b00973da597c91mr11799653ejb.51.1687272072624; Tue, 20 Jun 2023 07:41:12 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1687272072; cv=none; d=google.com; s=arc-20160816; b=vjc2FTTABCFPnIJk8XSxndpHLVsWX/xyYFxeZOteVQJlpYU03VDcz03ru7AO5Ephcx y5sPoIwOYa+Mfu86iFY31xXOf1qzqMtrVjSFhahPUSweglyO2lkI0hIzSDZEhu6eq2+F cssJPmz8zYs5LCXtqwDHjBHbDsgccwnVvVz/RyOOwCH0xJ24bBEzKa/a4SM740UMFF3Y dAPW5HJne0gj0VUaiyu0i7g1cuWgc87AO1gt/mPE0voveKGUKWmIQnpPvp/tSjxWwkQM bC5bk8bkc38K+jc/SfaolduOi9otIV1GuFyQ4A83xal0kkp4I00HnWntRZi7zzKjYz3Q m+oQ== 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=SiAAZ1ObMjryxLG5lc9X4N2RTfZqXczcxYzpiRNZGwE=; b=FjUZcTDxu6ZJAIKzdCn1NRDdWk0J5bjlukrAsfJlD0ugAQR2OVWxDyecVkzzAc5+iE yiznImVF2K0qMAkTrqC7b9hGIU+Spk+Y/YYlpAg7pTn5RdSGAPfGjB9kymCT70dIgtLC LoaOkSuZQyGZy5/OzhyhqYtf2As01YzNo7Z3XTfYLatuv7ijdRSSziN/ilbkzhDRLk3d wtqjPxUhx//hB5rYas1Zbf7U86nCGEEE0IYXItOMdQVv+F13PYlPFDI2JBAln1Wcuk6d yQ4NLEXA/MHeOGGaMgBlVMflSVj9WPs7YRXUm+6MZHCyboN4T0lfmkp8u10SJ8eQjyAC OaZg== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@gmail.com header.s=20221208 header.b=Jj0MCBUn; 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 i17-20020a17090685d100b009877f058f0bsi1185126ejy.99.2023.06.20.07.41.12; Tue, 20 Jun 2023 07:41:12 -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=20221208 header.b=Jj0MCBUn; 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 7FBF568C176; Tue, 20 Jun 2023 17:40:54 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-oa1-f44.google.com (mail-oa1-f44.google.com [209.85.160.44]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 79C5F68C159 for ; Tue, 20 Jun 2023 17:40:47 +0300 (EEST) Received: by mail-oa1-f44.google.com with SMTP id 586e51a60fabf-1a98a7fdf3bso3202726fac.1 for ; Tue, 20 Jun 2023 07:40:47 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20221208; t=1687272046; x=1689864046; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:from:to:cc:subject:date:message-id :reply-to; bh=pbj7hZ4HT+lScQdn0SInjSfIlJwOLMDZCX/8+CgpJq0=; b=Jj0MCBUnjQQDEDmzoKKA6qhy5y0eBrE94oVfs+Dydqv+icRWkebZfGoSBnDqkGMaXK jBM/RiuzEttLAMw4aKO+vL/VeiuJA2/SMsPyoZ2F9QsSaY52qObqrUVEnvnsnw9I5qHF qr3xkrXgO1dPMgUxLDlsi4ARuIJ8CIQy5x+P3+l/QMHKD5h4Ba1M1KVtKUqRn+8eus2Q hRlaPrNMLOpkm6yfb1Wgpz7bWNsFWvyB1H9CH5FDLan53ipeJQeVS/VJosN9L5OMpNjx PnUgXz5WJkmyUi/sFVvKf9WS9eKM6sEU0pVvXELjZ594LaHQeR7VgTDnixb8SvKhva8P 8wTg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1687272046; x=1689864046; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=pbj7hZ4HT+lScQdn0SInjSfIlJwOLMDZCX/8+CgpJq0=; b=CDUa8UftDUbcKufJ95jfP51/vrztVguSi2DPoRBANyY0x6YUdhl0qQwTNnx1bL/JvX dr4OalRC7EudLUTqVUKaFSP2w3urRmETXLAY5k0b+7TfA0JU2y0L8uWHYR7YWsXkVSXN jVsEpz6kP09js0iFpYNkblaga1g4rMzyVs89zShylMXK5NWPH24Of7FCEEsEPJk+2aNG p3vPts1WER5+lDa23mvl1xUxXerZo7mjhKw7z9P0OPoSeoWctwwPrcJ89EnnZFfznUo4 1bdUFJUaq4143mbfaY80xQe8K9r+HlWPCKeDEAADHyLqIGXwZNELGduDtg0aVNn20+PS 0snA== X-Gm-Message-State: AC+VfDxer2ef4FHmy2Z8hdmbdBFdFaGQ7AOb3rt19IWaaIh3I5qzLmlg BmQ1ZFI8gYH4bssuzkIEGht0cUqi++s= X-Received: by 2002:a05:6870:a2c4:b0:1a6:b022:252c with SMTP id w4-20020a056870a2c400b001a6b022252cmr5561595oak.3.1687272045865; Tue, 20 Jun 2023 07:40:45 -0700 (PDT) Received: from localhost.localdomain (host197.190-225-105.telecom.net.ar. [190.225.105.197]) by smtp.gmail.com with ESMTPSA id nl13-20020a056871458d00b001a69e7efd13sm1417838oab.5.2023.06.20.07.40.44 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 20 Jun 2023 07:40:45 -0700 (PDT) From: James Almer To: ffmpeg-devel@ffmpeg.org Date: Tue, 20 Jun 2023 11:40:36 -0300 Message-ID: <20230620144042.9629-3-jamrial@gmail.com> X-Mailer: git-send-email 2.41.0 In-Reply-To: <20230620144042.9629-1-jamrial@gmail.com> References: <20230620144042.9629-1-jamrial@gmail.com> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 3/9] avformat/evcdec: flush the bsf on EOF 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: vc8LmFE+Vfl/ Signed-off-by: James Almer --- libavformat/evcdec.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/libavformat/evcdec.c b/libavformat/evcdec.c index 68f3a91e53..842258d229 100644 --- a/libavformat/evcdec.c +++ b/libavformat/evcdec.c @@ -183,15 +183,14 @@ static int evc_read_packet(AVFormatContext *s, AVPacket *pkt) int ret; int32_t nalu_size; int au_end_found = 0; - EVCDemuxContext *const c = s->priv_data; - if (avio_feof(s->pb)) - return AVERROR_EOF; - while(!au_end_found) { uint8_t buf[EVC_NALU_LENGTH_PREFIX_SIZE]; + if (avio_feof(s->pb)) + goto end; + ret = ffio_ensure_seekback(s->pb, EVC_NALU_LENGTH_PREFIX_SIZE); if (ret < 0) return ret; @@ -212,6 +211,7 @@ static int evc_read_packet(AVFormatContext *s, AVPacket *pkt) if (ret != (nalu_size + EVC_NALU_LENGTH_PREFIX_SIZE)) return AVERROR_INVALIDDATA; +end: ret = av_bsf_send_packet(c->bsf, pkt); if (ret < 0) { av_log(s, AV_LOG_ERROR, "Failed to send packet to " From patchwork Tue Jun 20 14:40:37 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: James Almer X-Patchwork-Id: 42251 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a20:be15:b0:121:b37c:e101 with SMTP id ge21csp1442054pzb; Tue, 20 Jun 2023 07:41:33 -0700 (PDT) X-Google-Smtp-Source: ACHHUZ5W1DdCEARkwQF0ihj6x9Cfu/qPOI157yXWJosPCDnREpkTww7W+T3v1UBsUdYDb9jp5MoT X-Received: by 2002:a17:906:ef03:b0:974:183a:54b6 with SMTP id f3-20020a170906ef0300b00974183a54b6mr11323095ejs.33.1687272092912; Tue, 20 Jun 2023 07:41:32 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1687272092; cv=none; d=google.com; s=arc-20160816; b=CdvS6puJsChvmE6G7bqNA/r7RNWxNIlJ/KGE2tuMB44SpQKEi90fB9SW5RrUoGMrBE zxckNQyJwWIJ7tsauO3AoL+qWwb2BY2h6yTpNRXg8wWg+GAxmt+oI0j1b5g+1HQt4IFh NgiIGwTEuoKgOlbhdWROBQsrMoGowjrUV+he1rbAy3ZpOboDKZECUO+BadZFCRIRNqit NWKQ5y/vI6gvcPe7QQ/COewiB6oVP6LHY5NcLzCH9VeDb5P6jDLp9x7I4OXsmwCi5eGe 9gjHXuxnwu5IkXcO/KaEbOfwhKxsCRN4jMYAFQyHZdqOODRAg2TA0H6Ttrkf4g8wPgAH jnYg== 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=Bh3/xD9ohlPCEEBOm7i4ZUsTrbAhKKJ7mJMzNpwIfmg=; b=k6mD+PgVXtC5KQMQ4FF1KCCVFIFXssMFacouX8zwwfWW1NoM2eCGZ0G2pQx+jdvG3B 2yFnZUf+IqmF8ovgud9/tNmKjFtzL9OdazjOpZ4O1jOUSsokjNjK8p9m91eodi+oIMeT 2mURMPhcuHgBnf/SeACjC/ucMTM8FmV5vq3g9QNXHBdgu1+1ZUA1prAqDOZ3UE/BYxmV XjU1zYYkhlWV5jwHPk/aHKBiD2rrU6PsLrRW+syOOv/7RZYMFcyJP3VCuPppSv/I6TN6 C8BIeKPKW99JsrdN/PH2d5TGpStgXI745kHvkC7JRZWrknFXKtCaM8T8JYMQdoVoUnoB mIIQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@gmail.com header.s=20221208 header.b=okgVYu1t; 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 q10-20020a1709063d4a00b00977ead30c92si1301723ejf.559.2023.06.20.07.41.20; Tue, 20 Jun 2023 07:41:32 -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=20221208 header.b=okgVYu1t; 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 7867068C18E; Tue, 20 Jun 2023 17:40:55 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-ot1-f46.google.com (mail-ot1-f46.google.com [209.85.210.46]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id D45B568C157 for ; Tue, 20 Jun 2023 17:40:48 +0300 (EEST) Received: by mail-ot1-f46.google.com with SMTP id 46e09a7af769-6b469507e4bso2267497a34.3 for ; Tue, 20 Jun 2023 07:40:48 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20221208; t=1687272047; x=1689864047; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:from:to:cc:subject:date:message-id :reply-to; bh=VGHl8+k1zq24F+Z0GiHQCLKGG1c4+KoXC+bj7d5ruUc=; b=okgVYu1tGxZGfZhzsWgDl18EFxBlFC5FL17VOcIdZaVbRo3a60TktwkhKppenwfUQZ AzSYEimnU4H/JuF97ebzFSAUJE1cxTxpL/tnS7glaqFRwuBvtx92WIXzKL8poBoHjD4A QlHOHAjGkMoDQxvAB43gLmef6oiIxP1HJCgbjqfwjAYbh9EM0fTihulf53tiWJZ9ofT/ FOY1ZSrOn53Xug4OnDA0iEgbMg+hjWuCQ18KbVp//31l7ncLQtZaC380DE5wA0o6CuXO vFNGulPbmMf+CuLRoAzNmaw7nNK5H6HVklh4UUq/B15Om15fBlHEG0Oem+vB/Mc7aPCu +EGA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1687272047; x=1689864047; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=VGHl8+k1zq24F+Z0GiHQCLKGG1c4+KoXC+bj7d5ruUc=; b=cHDOWwKf8peTkIHFSZxU4ZPa0tdnISnpPg32MzuYAORVYLvZ7jltxR6DBNOs6/SM9e YQopIjCxllzzBx1MVGZ4y93oIaFoIg6JaKhq6RVe0zlwWEGpxlx3gYvMw39cYSTPKbwO trGGrm220J6/Nnq7R+MvdfdkRxnj3bpwDJhmmYjxi3Tv05WBmna3Agp/uEOigO8hpBYb 7tK/rnPippUROQpoV2E4CdcpCb5ctc0bjUOX+XciDbKlXoEwNxeGsBaQDb0kz9nUP6W5 O9qZF1fPy4oa7epUWCGn9Bqj9apwhpBaV8Z3W6f6OGYlxbpeioX66NVohHMkRpOarABa 8zNA== X-Gm-Message-State: AC+VfDzIaKRYiumnoL9BdI/DFluEAxQjnAyqyTqmCfBRO9OIJTprweHk QZ8UWGnWKnP/fr3pEL7Z5KytsjKxAcQ= X-Received: by 2002:a05:6870:9554:b0:19f:8566:c210 with SMTP id v20-20020a056870955400b0019f8566c210mr7291105oal.37.1687272047114; Tue, 20 Jun 2023 07:40:47 -0700 (PDT) Received: from localhost.localdomain (host197.190-225-105.telecom.net.ar. [190.225.105.197]) by smtp.gmail.com with ESMTPSA id nl13-20020a056871458d00b001a69e7efd13sm1417838oab.5.2023.06.20.07.40.46 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 20 Jun 2023 07:40:46 -0700 (PDT) From: James Almer To: ffmpeg-devel@ffmpeg.org Date: Tue, 20 Jun 2023 11:40:37 -0300 Message-ID: <20230620144042.9629-4-jamrial@gmail.com> X-Mailer: git-send-email 2.41.0 In-Reply-To: <20230620144042.9629-1-jamrial@gmail.com> References: <20230620144042.9629-1-jamrial@gmail.com> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 4/9] avformat/evcdec: use an unsigned type for nalu_size 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: 6Y9pAHy/IYcN But ensure the value returned by evc_read_nal_unit_length() fits in an int. Should prevent integer overflows later in the code. Signed-off-by: James Almer --- libavformat/evcdec.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/libavformat/evcdec.c b/libavformat/evcdec.c index 842258d229..ef743028ae 100644 --- a/libavformat/evcdec.c +++ b/libavformat/evcdec.c @@ -181,7 +181,7 @@ fail: static int evc_read_packet(AVFormatContext *s, AVPacket *pkt) { int ret; - int32_t nalu_size; + uint32_t nalu_size; int au_end_found = 0; EVCDemuxContext *const c = s->priv_data; @@ -200,7 +200,7 @@ static int evc_read_packet(AVFormatContext *s, AVPacket *pkt) return ret; nalu_size = read_nal_unit_length((const uint8_t *)&buf, EVC_NALU_LENGTH_PREFIX_SIZE); - if (nalu_size <= 0) + if (!nalu_size || nalu_size > INT_MAX) return AVERROR_INVALIDDATA; avio_seek(s->pb, -EVC_NALU_LENGTH_PREFIX_SIZE, SEEK_CUR); From patchwork Tue Jun 20 14:40:38 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: James Almer X-Patchwork-Id: 42250 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a20:be15:b0:121:b37c:e101 with SMTP id ge21csp1442021pzb; Tue, 20 Jun 2023 07:41:29 -0700 (PDT) X-Google-Smtp-Source: ACHHUZ5CeE5yju1sYyw/mTBg9osVs1X+L7bA1FwX9MkgsxCKeKy8a2tC5ZsiYGDUGA8adiL3UZGO X-Received: by 2002:a17:907:96a5:b0:988:76ed:e55e with SMTP id hd37-20020a17090796a500b0098876ede55emr6975508ejc.13.1687272089435; Tue, 20 Jun 2023 07:41:29 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1687272089; cv=none; d=google.com; s=arc-20160816; b=r2vZKUUuzUs5iGe52T5RGIc43J3C1sfSUyf9hYRRrExaxbxSH2m/GHpaSRivRLH7LH pNsBLrkX4t3ohdVulGEs5NMhc+1o5EU/VsX0kP74istBijlFqfb0SGhAEyM4r11DZfVi 4L2yOpTQb8nUABJxlNKSKy45GzKftKLG80oGdvJ+ZPva0BOv+nceBMtTkny2yGLNAkL1 AnEwUnAnWPKx6QtnZODbvRKqohwNqz2y5e+gArROrG947ROkpEnG6zPgf0v4d/htBZOA 2H0IPk+4AHq2HTlqMVVjEMt+cnIFsDXJIB8UvR6kpnNXbo7fyihHmPS5krHfNIVrwKCY Ds5A== 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=tDooByTx5ka9g9USv0Wl+jCCwjnJo6r+wjPgwkfvWR0=; b=EwPRr/cU69J5GkOar4ZedImuxz0R3LTOw+7QlD6+COk4CytBLzIKYPOtsMw0eDgjXe 3chZaZsS2Ih8EMgN7c5agUxCNgitq/HIZ3tSLohCJXJwBTfWTAC6CK1HfhmaPBOBSaNX tCp2ekfAi6edDuBU7MnHfHUic0EGW2t2MtdqUsFirOMixr8jOPJZfsk73dyzhm5Lgz19 FU36MU9jYuuWjPTSyctPMQtGRvlOy+VfrMz3LdAGwwJe1x9G6YF3FoJehjhcwipYwBJ4 oHRY7v82fxqXRRJPdcgYRbNbNMfwjIH6RQXLuuYhNJB4zDgl63HsV33K9MQOW33lJ5bu HA5w== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@gmail.com header.s=20221208 header.b=lUEQeIZs; 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 xa13-20020a170907b9cd00b0096f8ec464a3si1323369ejc.323.2023.06.20.07.41.29; Tue, 20 Jun 2023 07:41:29 -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=20221208 header.b=lUEQeIZs; 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 69EE368C1B1; Tue, 20 Jun 2023 17:40:58 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-oa1-f44.google.com (mail-oa1-f44.google.com [209.85.160.44]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 8B96168C196 for ; Tue, 20 Jun 2023 17:40:50 +0300 (EEST) Received: by mail-oa1-f44.google.com with SMTP id 586e51a60fabf-1acdfbe1c78so1118192fac.2 for ; Tue, 20 Jun 2023 07:40:50 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20221208; t=1687272049; x=1689864049; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:from:to:cc:subject:date:message-id :reply-to; bh=nz7pxqIlzDLmF5fXINw6Bf+r/A9St5+ZGTTrxkRe9Ks=; b=lUEQeIZsYG25KmtwfieTW1H5J8Gds/hr2B/iPACHtXhjzVFVDbikcKbSL5dAyc0PyN n2ecpnOKIypSrwR0vMu0mTCMEy+SEZ2Y6ypwE2nBJoQsfdPxqIIFppslCvWR7TtOFIM6 5j+Xvp4xu4kMuizm2OT+iHFhye0mabOlNSaPKnnrbLYiuC/cx1geDa3sUFzXlVrDZOA+ pu7Rmip3NF+k+K2JV/o34ja7vQsk2etNKC82XDXWQvdptQBFitNnKB8CBDIINkmZcy5O HpqJWcxUdpnWWijJVaGeZ98jDt8NSBcgpHB8zOmnYSAOaYcBObg8nyAIF87YWDFbLD2t hTAQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1687272049; x=1689864049; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=nz7pxqIlzDLmF5fXINw6Bf+r/A9St5+ZGTTrxkRe9Ks=; b=e0BV/BTM56HP7NZL1kCPOh5lFUys3x6swKsL6lMx0AVSUZmEhTs4qSU37xcxBWBkmE NkJqHE+PGETJzvzLn3WfVnmmX60Z3gz4URr32A+YFBVpG5KujreEJGEoLU1nRfwN6Fjc 6y0cRNXyB3v1u8Zws44/82N4aRKbZhATIv5XB27gQCbLkpZxTfhhfCVgweMt+RkG6t/O tW93zqvWf/Mhbh8MP6v2YoHM9QQx+kGosw/8xVTu06hzokBtxiVULpnXC+D62jqmScBp f+2TPeTB+BZgObAbxCHHEUS+neXePXq5XsNntoYUAbwRzEE8W95nsYq/BClAa+kEUlhj Xx+Q== X-Gm-Message-State: AC+VfDw36XXqZiFPwWWiVF2XHmoMg3iHvRargWgQWPdfNRblbeyRrOlj zwe0lD2GtsypXZjHkPJrfSmnBJ4AyWA= X-Received: by 2002:a05:6870:d88b:b0:1a6:cab3:640 with SMTP id dv11-20020a056870d88b00b001a6cab30640mr7776658oab.3.1687272048382; Tue, 20 Jun 2023 07:40:48 -0700 (PDT) Received: from localhost.localdomain (host197.190-225-105.telecom.net.ar. [190.225.105.197]) by smtp.gmail.com with ESMTPSA id nl13-20020a056871458d00b001a69e7efd13sm1417838oab.5.2023.06.20.07.40.47 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 20 Jun 2023 07:40:48 -0700 (PDT) From: James Almer To: ffmpeg-devel@ffmpeg.org Date: Tue, 20 Jun 2023 11:40:38 -0300 Message-ID: <20230620144042.9629-5-jamrial@gmail.com> X-Mailer: git-send-email 2.41.0 In-Reply-To: <20230620144042.9629-1-jamrial@gmail.com> References: <20230620144042.9629-1-jamrial@gmail.com> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 5/9] avcodec/evc_ps: pass a GetBitContext to the SPS and PPS parsing functions 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: UWbV8uQFtpX0 This is in preparation for the following patch. Signed-off-by: James Almer --- libavcodec/evc_frame_merge_bsf.c | 11 +- libavcodec/evc_parser.c | 11 +- libavcodec/evc_ps.c | 186 +++++++++++++++---------------- libavcodec/evc_ps.h | 5 +- 4 files changed, 109 insertions(+), 104 deletions(-) diff --git a/libavcodec/evc_frame_merge_bsf.c b/libavcodec/evc_frame_merge_bsf.c index 8e7ce9a2ab..bd30a09b15 100644 --- a/libavcodec/evc_frame_merge_bsf.c +++ b/libavcodec/evc_frame_merge_bsf.c @@ -75,6 +75,7 @@ static int evc_frame_merge_filter(AVBSFContext *bsf, AVPacket *out) EVCFMergeContext *ctx = bsf->priv_data; AVPacket *in = ctx->in; uint8_t *buffer, *nalu = NULL; + GetBitContext gb; enum EVCNALUnitType nalu_type; int tid, nalu_size = 0; int au_end_found = 0; @@ -121,14 +122,20 @@ static int evc_frame_merge_filter(AVBSFContext *bsf, AVPacket *out) switch (nalu_type) { case EVC_SPS_NUT: - err = ff_evc_parse_sps(&ctx->ps, nalu, nalu_size); + err = init_get_bits8(&gb, nalu, nalu_size); + if (err < 0) + return err; + err = ff_evc_parse_sps(&gb, &ctx->ps); if (err < 0) { av_log(bsf, AV_LOG_ERROR, "SPS parsing error\n"); goto end; } break; case EVC_PPS_NUT: - err = ff_evc_parse_pps(&ctx->ps, nalu, nalu_size); + err = init_get_bits8(&gb, nalu, nalu_size); + if (err < 0) + return err; + err = ff_evc_parse_pps(&gb, &ctx->ps); if (err < 0) { av_log(bsf, AV_LOG_ERROR, "PPS parsing error\n"); goto end; diff --git a/libavcodec/evc_parser.c b/libavcodec/evc_parser.c index 5c8fcc5970..8dd6b5fda7 100644 --- a/libavcodec/evc_parser.c +++ b/libavcodec/evc_parser.c @@ -62,6 +62,7 @@ static int parse_nal_unit(AVCodecParserContext *s, AVCodecContext *avctx, const uint8_t *buf, int buf_size) { EVCParserContext *ctx = s->priv_data; + GetBitContext gb; int nalu_type, tid; int ret; @@ -89,14 +90,20 @@ static int parse_nal_unit(AVCodecParserContext *s, AVCodecContext *avctx, switch (nalu_type) { case EVC_SPS_NUT: - ret = ff_evc_parse_sps(&ctx->ps, buf, buf_size); + ret = init_get_bits8(&gb, buf, buf_size); + if (ret < 0) + return ret; + ret = ff_evc_parse_sps(&gb, &ctx->ps); if (ret < 0) { av_log(avctx, AV_LOG_ERROR, "SPS parsing error\n"); return ret; } break; case EVC_PPS_NUT: - ret = ff_evc_parse_pps(&ctx->ps, buf, buf_size); + ret = init_get_bits8(&gb, buf, buf_size); + if (ret < 0) + return ret; + ret = ff_evc_parse_pps(&gb, &ctx->ps); if (ret < 0) { av_log(avctx, AV_LOG_ERROR, "PPS parsing error\n"); return ret; diff --git a/libavcodec/evc_ps.c b/libavcodec/evc_ps.c index ed39af104e..156f76554a 100644 --- a/libavcodec/evc_ps.c +++ b/libavcodec/evc_ps.c @@ -132,18 +132,13 @@ static int vui_parameters(GetBitContext *gb, VUIParameters *vui) } // @see ISO_IEC_23094-1 (7.3.2.1 SPS RBSP syntax) -int ff_evc_parse_sps(EVCParamSets *ps, const uint8_t *bs, int bs_size) +int ff_evc_parse_sps(GetBitContext *gb, EVCParamSets *ps) { - GetBitContext gb; EVCParserSPS *sps; int sps_seq_parameter_set_id; int ret; - ret = init_get_bits8(&gb, bs, bs_size); - if (ret < 0) - return ret; - - sps_seq_parameter_set_id = get_ue_golomb(&gb); + sps_seq_parameter_set_id = get_ue_golomb(gb); if (sps_seq_parameter_set_id >= EVC_MAX_SPS_COUNT) return AVERROR_INVALIDDATA; @@ -158,74 +153,74 @@ int ff_evc_parse_sps(EVCParamSets *ps, const uint8_t *bs, int bs_size) // the Baseline profile is indicated by profile_idc eqal to 0 // the Main profile is indicated by profile_idc eqal to 1 - sps->profile_idc = get_bits(&gb, 8); + sps->profile_idc = get_bits(gb, 8); - sps->level_idc = get_bits(&gb, 8); + sps->level_idc = get_bits(gb, 8); - skip_bits_long(&gb, 32); /* skip toolset_idc_h */ - skip_bits_long(&gb, 32); /* skip toolset_idc_l */ + skip_bits_long(gb, 32); /* skip toolset_idc_h */ + skip_bits_long(gb, 32); /* skip toolset_idc_l */ // 0 - monochrome // 1 - 4:2:0 // 2 - 4:2:2 // 3 - 4:4:4 - sps->chroma_format_idc = get_ue_golomb(&gb); + sps->chroma_format_idc = get_ue_golomb(gb); - sps->pic_width_in_luma_samples = get_ue_golomb(&gb); - sps->pic_height_in_luma_samples = get_ue_golomb(&gb); + sps->pic_width_in_luma_samples = get_ue_golomb(gb); + sps->pic_height_in_luma_samples = get_ue_golomb(gb); - sps->bit_depth_luma_minus8 = get_ue_golomb(&gb); - sps->bit_depth_chroma_minus8 = get_ue_golomb(&gb); + sps->bit_depth_luma_minus8 = get_ue_golomb(gb); + sps->bit_depth_chroma_minus8 = get_ue_golomb(gb); - sps->sps_btt_flag = get_bits1(&gb); + sps->sps_btt_flag = get_bits1(gb); if (sps->sps_btt_flag) { - sps->log2_ctu_size_minus5 = get_ue_golomb(&gb); - sps->log2_min_cb_size_minus2 = get_ue_golomb(&gb); - sps->log2_diff_ctu_max_14_cb_size = get_ue_golomb(&gb); - sps->log2_diff_ctu_max_tt_cb_size = get_ue_golomb(&gb); - sps->log2_diff_min_cb_min_tt_cb_size_minus2 = get_ue_golomb(&gb); + sps->log2_ctu_size_minus5 = get_ue_golomb(gb); + sps->log2_min_cb_size_minus2 = get_ue_golomb(gb); + sps->log2_diff_ctu_max_14_cb_size = get_ue_golomb(gb); + sps->log2_diff_ctu_max_tt_cb_size = get_ue_golomb(gb); + sps->log2_diff_min_cb_min_tt_cb_size_minus2 = get_ue_golomb(gb); } - sps->sps_suco_flag = get_bits1(&gb); + sps->sps_suco_flag = get_bits1(gb); if (sps->sps_suco_flag) { - sps->log2_diff_ctu_size_max_suco_cb_size = get_ue_golomb(&gb); - sps->log2_diff_max_suco_min_suco_cb_size = get_ue_golomb(&gb); + sps->log2_diff_ctu_size_max_suco_cb_size = get_ue_golomb(gb); + sps->log2_diff_max_suco_min_suco_cb_size = get_ue_golomb(gb); } - sps->sps_admvp_flag = get_bits1(&gb); + sps->sps_admvp_flag = get_bits1(gb); if (sps->sps_admvp_flag) { - sps->sps_affine_flag = get_bits1(&gb); - sps->sps_amvr_flag = get_bits1(&gb); - sps->sps_dmvr_flag = get_bits1(&gb); - sps->sps_mmvd_flag = get_bits1(&gb); - sps->sps_hmvp_flag = get_bits1(&gb); + sps->sps_affine_flag = get_bits1(gb); + sps->sps_amvr_flag = get_bits1(gb); + sps->sps_dmvr_flag = get_bits1(gb); + sps->sps_mmvd_flag = get_bits1(gb); + sps->sps_hmvp_flag = get_bits1(gb); } - sps->sps_eipd_flag = get_bits1(&gb); + sps->sps_eipd_flag = get_bits1(gb); if (sps->sps_eipd_flag) { - sps->sps_ibc_flag = get_bits1(&gb); + sps->sps_ibc_flag = get_bits1(gb); if (sps->sps_ibc_flag) - sps->log2_max_ibc_cand_size_minus2 = get_ue_golomb(&gb); + sps->log2_max_ibc_cand_size_minus2 = get_ue_golomb(gb); } - sps->sps_cm_init_flag = get_bits1(&gb); + sps->sps_cm_init_flag = get_bits1(gb); if (sps->sps_cm_init_flag) - sps->sps_adcc_flag = get_bits1(&gb); + sps->sps_adcc_flag = get_bits1(gb); - sps->sps_iqt_flag = get_bits1(&gb); + sps->sps_iqt_flag = get_bits1(gb); if (sps->sps_iqt_flag) - sps->sps_ats_flag = get_bits1(&gb); + sps->sps_ats_flag = get_bits1(gb); - sps->sps_addb_flag = get_bits1(&gb); - sps->sps_alf_flag = get_bits1(&gb); - sps->sps_htdf_flag = get_bits1(&gb); - sps->sps_rpl_flag = get_bits1(&gb); - sps->sps_pocs_flag = get_bits1(&gb); - sps->sps_dquant_flag = get_bits1(&gb); - sps->sps_dra_flag = get_bits1(&gb); + sps->sps_addb_flag = get_bits1(gb); + sps->sps_alf_flag = get_bits1(gb); + sps->sps_htdf_flag = get_bits1(gb); + sps->sps_rpl_flag = get_bits1(gb); + sps->sps_pocs_flag = get_bits1(gb); + sps->sps_dquant_flag = get_bits1(gb); + sps->sps_dra_flag = get_bits1(gb); if (sps->sps_pocs_flag) { - sps->log2_max_pic_order_cnt_lsb_minus4 = get_ue_golomb(&gb); + sps->log2_max_pic_order_cnt_lsb_minus4 = get_ue_golomb(gb); if (sps->log2_max_pic_order_cnt_lsb_minus4 > 12U) { ret = AVERROR_INVALIDDATA; goto fail; @@ -233,65 +228,65 @@ int ff_evc_parse_sps(EVCParamSets *ps, const uint8_t *bs, int bs_size) } if (!sps->sps_pocs_flag || !sps->sps_rpl_flag) { - sps->log2_sub_gop_length = get_ue_golomb(&gb); + sps->log2_sub_gop_length = get_ue_golomb(gb); if (sps->log2_sub_gop_length > 5U) { ret = AVERROR_INVALIDDATA; goto fail; } if (sps->log2_sub_gop_length == 0) - sps->log2_ref_pic_gap_length = get_ue_golomb(&gb); + sps->log2_ref_pic_gap_length = get_ue_golomb(gb); } if (!sps->sps_rpl_flag) - sps->max_num_tid0_ref_pics = get_ue_golomb(&gb); + sps->max_num_tid0_ref_pics = get_ue_golomb(gb); else { - sps->sps_max_dec_pic_buffering_minus1 = get_ue_golomb(&gb); - sps->long_term_ref_pic_flag = get_bits1(&gb); - sps->rpl1_same_as_rpl0_flag = get_bits1(&gb); - sps->num_ref_pic_list_in_sps[0] = get_ue_golomb(&gb); + sps->sps_max_dec_pic_buffering_minus1 = get_ue_golomb(gb); + sps->long_term_ref_pic_flag = get_bits1(gb); + sps->rpl1_same_as_rpl0_flag = get_bits1(gb); + sps->num_ref_pic_list_in_sps[0] = get_ue_golomb(gb); for (int i = 0; i < sps->num_ref_pic_list_in_sps[0]; ++i) - ref_pic_list_struct(&gb, &sps->rpls[0][i]); + ref_pic_list_struct(gb, &sps->rpls[0][i]); if (!sps->rpl1_same_as_rpl0_flag) { - sps->num_ref_pic_list_in_sps[1] = get_ue_golomb(&gb); + sps->num_ref_pic_list_in_sps[1] = get_ue_golomb(gb); for (int i = 0; i < sps->num_ref_pic_list_in_sps[1]; ++i) - ref_pic_list_struct(&gb, &sps->rpls[1][i]); + ref_pic_list_struct(gb, &sps->rpls[1][i]); } } - sps->picture_cropping_flag = get_bits1(&gb); + sps->picture_cropping_flag = get_bits1(gb); if (sps->picture_cropping_flag) { - sps->picture_crop_left_offset = get_ue_golomb(&gb); - sps->picture_crop_right_offset = get_ue_golomb(&gb); - sps->picture_crop_top_offset = get_ue_golomb(&gb); - sps->picture_crop_bottom_offset = get_ue_golomb(&gb); + sps->picture_crop_left_offset = get_ue_golomb(gb); + sps->picture_crop_right_offset = get_ue_golomb(gb); + sps->picture_crop_top_offset = get_ue_golomb(gb); + sps->picture_crop_bottom_offset = get_ue_golomb(gb); } if (sps->chroma_format_idc != 0) { - sps->chroma_qp_table_struct.chroma_qp_table_present_flag = get_bits1(&gb); + sps->chroma_qp_table_struct.chroma_qp_table_present_flag = get_bits1(gb); if (sps->chroma_qp_table_struct.chroma_qp_table_present_flag) { - sps->chroma_qp_table_struct.same_qp_table_for_chroma = get_bits1(&gb); - sps->chroma_qp_table_struct.global_offset_flag = get_bits1(&gb); + sps->chroma_qp_table_struct.same_qp_table_for_chroma = get_bits1(gb); + sps->chroma_qp_table_struct.global_offset_flag = get_bits1(gb); for (int i = 0; i < (sps->chroma_qp_table_struct.same_qp_table_for_chroma ? 1 : 2); i++) { - sps->chroma_qp_table_struct.num_points_in_qp_table_minus1[i] = get_ue_golomb(&gb); + sps->chroma_qp_table_struct.num_points_in_qp_table_minus1[i] = get_ue_golomb(gb); if (sps->chroma_qp_table_struct.num_points_in_qp_table_minus1[i] >= EVC_MAX_QP_TABLE_SIZE) { ret = AVERROR_INVALIDDATA; goto fail; } for (int j = 0; j <= sps->chroma_qp_table_struct.num_points_in_qp_table_minus1[i]; j++) { - sps->chroma_qp_table_struct.delta_qp_in_val_minus1[i][j] = get_bits(&gb, 6); - sps->chroma_qp_table_struct.delta_qp_out_val[i][j] = get_se_golomb(&gb); + sps->chroma_qp_table_struct.delta_qp_in_val_minus1[i][j] = get_bits(gb, 6); + sps->chroma_qp_table_struct.delta_qp_out_val[i][j] = get_se_golomb(gb); } } } } - sps->vui_parameters_present_flag = get_bits1(&gb); + sps->vui_parameters_present_flag = get_bits1(gb); if (sps->vui_parameters_present_flag) - vui_parameters(&gb, &(sps->vui_parameters)); + vui_parameters(gb, &(sps->vui_parameters)); // @note // If necessary, add the missing fields to the EVCParserSPS structure @@ -313,18 +308,13 @@ fail: // If it will be needed, parse_sps function could be extended to handle VUI parameters parsing // to initialize fields of the AVCodecContex i.e. color_primaries, color_trc,color_range // -int ff_evc_parse_pps(EVCParamSets *ps, const uint8_t *bs, int bs_size) +int ff_evc_parse_pps(GetBitContext *gb, EVCParamSets *ps) { - GetBitContext gb; EVCParserPPS *pps; int pps_pic_parameter_set_id; int ret; - ret = init_get_bits8(&gb, bs, bs_size); - if (ret < 0) - return ret; - - pps_pic_parameter_set_id = get_ue_golomb(&gb); + pps_pic_parameter_set_id = get_ue_golomb(gb); if (pps_pic_parameter_set_id > EVC_MAX_PPS_COUNT) return AVERROR_INVALIDDATA; @@ -336,65 +326,65 @@ int ff_evc_parse_pps(EVCParamSets *ps, const uint8_t *bs, int bs_size) pps->pps_pic_parameter_set_id = pps_pic_parameter_set_id; - pps->pps_seq_parameter_set_id = get_ue_golomb(&gb); + pps->pps_seq_parameter_set_id = get_ue_golomb(gb); if (pps->pps_seq_parameter_set_id >= EVC_MAX_SPS_COUNT) { ret = AVERROR_INVALIDDATA; goto fail; } - pps->num_ref_idx_default_active_minus1[0] = get_ue_golomb(&gb); - pps->num_ref_idx_default_active_minus1[1] = get_ue_golomb(&gb); - pps->additional_lt_poc_lsb_len = get_ue_golomb(&gb); - pps->rpl1_idx_present_flag = get_bits1(&gb); - pps->single_tile_in_pic_flag = get_bits1(&gb); + pps->num_ref_idx_default_active_minus1[0] = get_ue_golomb(gb); + pps->num_ref_idx_default_active_minus1[1] = get_ue_golomb(gb); + pps->additional_lt_poc_lsb_len = get_ue_golomb(gb); + pps->rpl1_idx_present_flag = get_bits1(gb); + pps->single_tile_in_pic_flag = get_bits1(gb); if (!pps->single_tile_in_pic_flag) { - pps->num_tile_columns_minus1 = get_ue_golomb(&gb); - pps->num_tile_rows_minus1 = get_ue_golomb(&gb); + pps->num_tile_columns_minus1 = get_ue_golomb(gb); + pps->num_tile_rows_minus1 = get_ue_golomb(gb); if (pps->num_tile_columns_minus1 >= EVC_MAX_TILE_COLUMNS || pps->num_tile_rows_minus1 >= EVC_MAX_TILE_ROWS) { ret = AVERROR_INVALIDDATA; goto fail; } - pps->uniform_tile_spacing_flag = get_bits1(&gb); + pps->uniform_tile_spacing_flag = get_bits1(gb); if (!pps->uniform_tile_spacing_flag) { for (int i = 0; i < pps->num_tile_columns_minus1; i++) - pps->tile_column_width_minus1[i] = get_ue_golomb(&gb); + pps->tile_column_width_minus1[i] = get_ue_golomb(gb); for (int i = 0; i < pps->num_tile_rows_minus1; i++) - pps->tile_row_height_minus1[i] = get_ue_golomb(&gb); + pps->tile_row_height_minus1[i] = get_ue_golomb(gb); } - pps->loop_filter_across_tiles_enabled_flag = get_bits1(&gb); - pps->tile_offset_len_minus1 = get_ue_golomb(&gb); + pps->loop_filter_across_tiles_enabled_flag = get_bits1(gb); + pps->tile_offset_len_minus1 = get_ue_golomb(gb); } - pps->tile_id_len_minus1 = get_ue_golomb(&gb); + pps->tile_id_len_minus1 = get_ue_golomb(gb); if (pps->tile_id_len_minus1 > 15U) { ret = AVERROR_INVALIDDATA; goto fail; } - pps->explicit_tile_id_flag = get_bits1(&gb); + pps->explicit_tile_id_flag = get_bits1(gb); if (pps->explicit_tile_id_flag) { for (int i = 0; i <= pps->num_tile_rows_minus1; i++) { for (int j = 0; j <= pps->num_tile_columns_minus1; j++) - pps->tile_id_val[i][j] = get_bits(&gb, pps->tile_id_len_minus1 + 1); + pps->tile_id_val[i][j] = get_bits(gb, pps->tile_id_len_minus1 + 1); } } pps->pic_dra_enabled_flag = 0; - pps->pic_dra_enabled_flag = get_bits1(&gb); + pps->pic_dra_enabled_flag = get_bits1(gb); if (pps->pic_dra_enabled_flag) - pps->pic_dra_aps_id = get_bits(&gb, 5); + pps->pic_dra_aps_id = get_bits(gb, 5); - pps->arbitrary_slice_present_flag = get_bits1(&gb); - pps->constrained_intra_pred_flag = get_bits1(&gb); - pps->cu_qp_delta_enabled_flag = get_bits1(&gb); + pps->arbitrary_slice_present_flag = get_bits1(gb); + pps->constrained_intra_pred_flag = get_bits1(gb); + pps->cu_qp_delta_enabled_flag = get_bits1(gb); if (pps->cu_qp_delta_enabled_flag) - pps->log2_cu_qp_delta_area_minus6 = get_ue_golomb(&gb); + pps->log2_cu_qp_delta_area_minus6 = get_ue_golomb(gb); av_freep(&ps->pps[pps_pic_parameter_set_id]); ps->pps[pps_pic_parameter_set_id] = pps; diff --git a/libavcodec/evc_ps.h b/libavcodec/evc_ps.h index c7ed2af37b..5aaa30de20 100644 --- a/libavcodec/evc_ps.h +++ b/libavcodec/evc_ps.h @@ -27,6 +27,7 @@ #include #include "evc.h" +#include "get_bits.h" #define EVC_MAX_QP_TABLE_SIZE 58 #define NUM_CPB 32 @@ -218,10 +219,10 @@ typedef struct EVCParamSets { } EVCParamSets; // @see ISO_IEC_23094-1 (7.3.2.1 SPS RBSP syntax) -int ff_evc_parse_sps(EVCParamSets *ps, const uint8_t *bs, int bs_size); +int ff_evc_parse_sps(GetBitContext *gb, EVCParamSets *ps); // @see ISO_IEC_23094-1 (7.3.2.2 SPS RBSP syntax) -int ff_evc_parse_pps(EVCParamSets *ps, const uint8_t *bs, int bs_size); +int ff_evc_parse_pps(GetBitContext *gb, EVCParamSets *ps); void ff_evc_ps_free(EVCParamSets *ps); From patchwork Tue Jun 20 14:40:39 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: James Almer X-Patchwork-Id: 42252 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a20:be15:b0:121:b37c:e101 with SMTP id ge21csp1442106pzb; Tue, 20 Jun 2023 07:41:38 -0700 (PDT) X-Google-Smtp-Source: ACHHUZ4M/s1x2SPdaq6dnNbfJv3EDg1SyU+NyEczF+ZM7cITmVzWwZ66uL/9lnkugs1NzFGXSXDn X-Received: by 2002:aa7:d815:0:b0:51a:53e8:f576 with SMTP id v21-20020aa7d815000000b0051a53e8f576mr5091078edq.1.1687272098221; Tue, 20 Jun 2023 07:41:38 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1687272098; cv=none; d=google.com; s=arc-20160816; b=osTlx+lQ6vAAHFQOS+M2pb5lYN7yNYdePqZf1fBnG7V65qmP0cNf8Uv3Wont497qll nZ+EStw9b+ZEVAf7m2NHoBqnhFDP2bjaxZbH/Q41/TCZqTiUXmB7UgXVgA7Q/e360iS5 Vh4V/Vdt82U319bwF2KDgtJRaqC5z7/fPn8m7UNryKF0eggXzSRMMZzRR3Os5Oh9nhOh dqD7pd2AOIWfz5GklLNOM42w/ieY08D/1HgodVfeqOfotpuQVI2uTpDTQSQzZMNeQoRa v2EydiWUJ+d3clnaxlzvFTesfRBVJ6jv4n5wpllBGzRTJpSdontwIp32PmkNDEOeHgcX MN1A== 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=KR4v53gbQMfNqusJM3TZs0rvq/VXQtzrSqGbc2BIccI=; b=0wH/ic2T3hzkWHJKRU8Z233Qey8BapBZ4n8/Kw8C1pzAhrOpnEGo2LiK+U4geUmG7t hL6e96DFibVIZsQln9+spnhKAPR8HHvX9ALxoqLEcviGM52ikaKoLvr2fikCLV0gfa0A RMBXs3zIFa0aHwpY6pc8d43o0TdqmYSQYb14/qg0B8BMnb49mOJ/p4L9X1Vz4cKW5WY/ 7tDgiINgcAOASEff8MR7BzHezjRa4LShad+1qji3UjsQJ8Z1fPSEEdE4ZY9ImsZnxqKf ZgcKTV6JQNK0eW77DgqL+W6PWUWn+4ffRiHBq7gygCLMJVA0mrjbWmnCYKt/YRjy/Cgf 1eXg== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@gmail.com header.s=20221208 header.b=QfBcpjRw; 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 s25-20020a056402165900b00514b1f2da27si1156449edx.222.2023.06.20.07.41.37; Tue, 20 Jun 2023 07:41:38 -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=20221208 header.b=QfBcpjRw; 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 71BF568C156; Tue, 20 Jun 2023 17:40:59 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-oa1-f52.google.com (mail-oa1-f52.google.com [209.85.160.52]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 8740668C10E for ; Tue, 20 Jun 2023 17:40:51 +0300 (EEST) Received: by mail-oa1-f52.google.com with SMTP id 586e51a60fabf-1a98a7fde3fso4506336fac.3 for ; Tue, 20 Jun 2023 07:40:51 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20221208; t=1687272050; x=1689864050; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:from:to:cc:subject:date:message-id :reply-to; bh=ykyRcIvO2R+5ZRSAIPZgFyh1U8DHQ6iBSLROhOa4OCs=; b=QfBcpjRwVj0dt1G5ruiYvXbBXzpEzrt51jdX8yoFpn3KKbKgxw38kp+yeh3y7pnEpx WfgaqZ4S4om0GZDn0HBX15Ny5ZqI1s8Dwzh8Uu7llbin6N5kzo+ocla719Qmwloxb3Da 6IVt3ftRkFrsumMYfofXFBVuAhKGh23rd+eC+0qdIbQj7tH7235pC604mgZ3Lm+K5Gt5 jxZWA65G4zD2qwBKGmG41paWqsHU4RUgRKEnQE+az0awlK9J20ssMqXAd2s17OVLT8EF WSNP0Pd4+NA5fTGrAtGpcqt8GX7R4ZzOXRFUFAHQUdhJRso02Bq87B5Sk1by/N5q42YV wrew== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1687272050; x=1689864050; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=ykyRcIvO2R+5ZRSAIPZgFyh1U8DHQ6iBSLROhOa4OCs=; b=N9V+lmrCEW6dXL0hgymw81I3Vt3JdELFjKM7nUwrAXhBqOhcZ2cZxtMftwAzsaDwZ6 e9cr7Tui/Gb1HsvS1PcIFVuAppgMv/Xjxthzq1Yx2P3skyyrn8w+NfOKPkbuSUJBJFVY 9fKzkdL7CmKiB/9u1kY4rXapOrPmB9THEmoBoaOtZz73WvcDDSmujgEdBRGnMWbwQVhU B7Jmp12LJOX19iKdI6ssJPO0hpjdaM/P5nkMO71L29+7/YK/MnZL9KaumVeA9cM1RJxW bo95rYS1JHnkpKYhQP7n6pkpxi73k6Ucg5mk9z9/Z9motGm7RRsMDIdXzr0WDsfOGKh0 J5Iw== X-Gm-Message-State: AC+VfDxWnB5042/Tx+GuMNnQ6hjrgpjRPjkpS4uxSJPrIIOJFFQqIcik 5nBQoj/7QQMZXtjWCZaRtbFI9/WM4jc= X-Received: by 2002:a05:6871:c18a:b0:19f:6af1:87f8 with SMTP id yr10-20020a056871c18a00b0019f6af187f8mr8210885oab.41.1687272049729; Tue, 20 Jun 2023 07:40:49 -0700 (PDT) Received: from localhost.localdomain (host197.190-225-105.telecom.net.ar. [190.225.105.197]) by smtp.gmail.com with ESMTPSA id nl13-20020a056871458d00b001a69e7efd13sm1417838oab.5.2023.06.20.07.40.48 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 20 Jun 2023 07:40:49 -0700 (PDT) From: James Almer To: ffmpeg-devel@ffmpeg.org Date: Tue, 20 Jun 2023 11:40:39 -0300 Message-ID: <20230620144042.9629-6-jamrial@gmail.com> X-Mailer: git-send-email 2.41.0 In-Reply-To: <20230620144042.9629-1-jamrial@gmail.com> References: <20230620144042.9629-1-jamrial@gmail.com> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 6/9] avcodec/evc_parse: pass a GetBitContext to the slice header parsing function 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: fvatUQ78KNUX Signed-off-by: James Almer --- libavcodec/evc_frame_merge_bsf.c | 6 +++- libavcodec/evc_parse.c | 52 ++++++++++++++------------------ libavcodec/evc_parse.h | 4 +-- libavcodec/evc_parser.c | 6 +++- 4 files changed, 35 insertions(+), 33 deletions(-) diff --git a/libavcodec/evc_frame_merge_bsf.c b/libavcodec/evc_frame_merge_bsf.c index bd30a09b15..3904170ebd 100644 --- a/libavcodec/evc_frame_merge_bsf.c +++ b/libavcodec/evc_frame_merge_bsf.c @@ -145,7 +145,11 @@ static int evc_frame_merge_filter(AVBSFContext *bsf, AVPacket *out) case EVC_NOIDR_NUT: { EVCParserSliceHeader sh; - err = ff_evc_parse_slice_header(&sh, &ctx->ps, nalu_type, nalu, nalu_size); + err = init_get_bits8(&gb, nalu, nalu_size); + if (err < 0) + return err; + + err = ff_evc_parse_slice_header(&gb, &sh, &ctx->ps, nalu_type); if (err < 0) { av_log(bsf, AV_LOG_ERROR, "Slice header parsing error\n"); goto end; diff --git a/libavcodec/evc_parse.c b/libavcodec/evc_parse.c index 0c35e40b47..dee48e947b 100644 --- a/libavcodec/evc_parse.c +++ b/libavcodec/evc_parse.c @@ -44,21 +44,15 @@ int ff_evc_get_temporal_id(const uint8_t *bits, int bits_size, void *logctx) } // @see ISO_IEC_23094-1 (7.3.2.6 Slice layer RBSP syntax) -int ff_evc_parse_slice_header(EVCParserSliceHeader *sh, const EVCParamSets *ps, - enum EVCNALUnitType nalu_type, const uint8_t *bs, int bs_size) +int ff_evc_parse_slice_header(GetBitContext *gb, EVCParserSliceHeader *sh, + const EVCParamSets *ps, enum EVCNALUnitType nalu_type) { - GetBitContext gb; const EVCParserPPS *pps; const EVCParserSPS *sps; - int num_tiles_in_slice = 0; int slice_pic_parameter_set_id; - int ret; - - if ((ret = init_get_bits8(&gb, bs, bs_size)) < 0) - return ret; - slice_pic_parameter_set_id = get_ue_golomb(&gb); + slice_pic_parameter_set_id = get_ue_golomb(gb); if (slice_pic_parameter_set_id < 0 || slice_pic_parameter_set_id >= EVC_MAX_PPS_COUNT) return AVERROR_INVALIDDATA; @@ -75,47 +69,47 @@ int ff_evc_parse_slice_header(EVCParserSliceHeader *sh, const EVCParamSets *ps, sh->slice_pic_parameter_set_id = slice_pic_parameter_set_id; if (!pps->single_tile_in_pic_flag) { - sh->single_tile_in_slice_flag = get_bits1(&gb); - sh->first_tile_id = get_bits(&gb, pps->tile_id_len_minus1 + 1); + sh->single_tile_in_slice_flag = get_bits1(gb); + sh->first_tile_id = get_bits(gb, pps->tile_id_len_minus1 + 1); } else sh->single_tile_in_slice_flag = 1; if (!sh->single_tile_in_slice_flag) { if (pps->arbitrary_slice_present_flag) - sh->arbitrary_slice_flag = get_bits1(&gb); + sh->arbitrary_slice_flag = get_bits1(gb); if (!sh->arbitrary_slice_flag) - sh->last_tile_id = get_bits(&gb, pps->tile_id_len_minus1 + 1); + sh->last_tile_id = get_bits(gb, pps->tile_id_len_minus1 + 1); else { - sh->num_remaining_tiles_in_slice_minus1 = get_ue_golomb(&gb); + sh->num_remaining_tiles_in_slice_minus1 = get_ue_golomb(gb); num_tiles_in_slice = sh->num_remaining_tiles_in_slice_minus1 + 2; for (int i = 0; i < num_tiles_in_slice - 1; ++i) - sh->delta_tile_id_minus1[i] = get_ue_golomb(&gb); + sh->delta_tile_id_minus1[i] = get_ue_golomb(gb); } } - sh->slice_type = get_ue_golomb(&gb); + sh->slice_type = get_ue_golomb(gb); if (nalu_type == EVC_IDR_NUT) - sh->no_output_of_prior_pics_flag = get_bits1(&gb); + sh->no_output_of_prior_pics_flag = get_bits1(gb); if (sps->sps_mmvd_flag && ((sh->slice_type == EVC_SLICE_TYPE_B) || (sh->slice_type == EVC_SLICE_TYPE_P))) - sh->mmvd_group_enable_flag = get_bits1(&gb); + sh->mmvd_group_enable_flag = get_bits1(gb); else sh->mmvd_group_enable_flag = 0; if (sps->sps_alf_flag) { int ChromaArrayType = sps->chroma_format_idc; - sh->slice_alf_enabled_flag = get_bits1(&gb); + sh->slice_alf_enabled_flag = get_bits1(gb); if (sh->slice_alf_enabled_flag) { - sh->slice_alf_luma_aps_id = get_bits(&gb, 5); - sh->slice_alf_map_flag = get_bits1(&gb); - sh->slice_alf_chroma_idc = get_bits(&gb, 2); + sh->slice_alf_luma_aps_id = get_bits(gb, 5); + sh->slice_alf_map_flag = get_bits1(gb); + sh->slice_alf_chroma_idc = get_bits(gb, 2); if ((ChromaArrayType == 1 || ChromaArrayType == 2) && sh->slice_alf_chroma_idc > 0) - sh->slice_alf_chroma_aps_id = get_bits(&gb, 5); + sh->slice_alf_chroma_aps_id = get_bits(gb, 5); } if (ChromaArrayType == 3) { int sliceChromaAlfEnabledFlag = 0; @@ -136,23 +130,23 @@ int ff_evc_parse_slice_header(EVCParserSliceHeader *sh, const EVCParamSets *ps, } if (!sh->slice_alf_enabled_flag) - sh->slice_alf_chroma_idc = get_bits(&gb, 2); + sh->slice_alf_chroma_idc = get_bits(gb, 2); if (sliceChromaAlfEnabledFlag) { - sh->slice_alf_chroma_aps_id = get_bits(&gb, 5); - sh->slice_alf_chroma_map_flag = get_bits1(&gb); + sh->slice_alf_chroma_aps_id = get_bits(gb, 5); + sh->slice_alf_chroma_map_flag = get_bits1(gb); } if (sliceChroma2AlfEnabledFlag) { - sh->slice_alf_chroma2_aps_id = get_bits(&gb, 5); - sh->slice_alf_chroma2_map_flag = get_bits1(&gb); + sh->slice_alf_chroma2_aps_id = get_bits(gb, 5); + sh->slice_alf_chroma2_map_flag = get_bits1(gb); } } } if (nalu_type != EVC_IDR_NUT) { if (sps->sps_pocs_flag) - sh->slice_pic_order_cnt_lsb = get_bits(&gb, sps->log2_max_pic_order_cnt_lsb_minus4 + 4); + sh->slice_pic_order_cnt_lsb = get_bits(gb, sps->log2_max_pic_order_cnt_lsb_minus4 + 4); } // @note diff --git a/libavcodec/evc_parse.h b/libavcodec/evc_parse.h index a1fbbc643d..322f52c928 100644 --- a/libavcodec/evc_parse.h +++ b/libavcodec/evc_parse.h @@ -117,8 +117,8 @@ static inline uint32_t evc_read_nal_unit_length(const uint8_t *bits, int bits_si // nuh_temporal_id specifies a temporal identifier for the NAL unit int ff_evc_get_temporal_id(const uint8_t *bits, int bits_size, void *logctx); -int ff_evc_parse_slice_header(EVCParserSliceHeader *sh, const EVCParamSets *ps, - enum EVCNALUnitType nalu_type, const uint8_t *buf, int buf_size); +int ff_evc_parse_slice_header(GetBitContext *gb, EVCParserSliceHeader *sh, + const EVCParamSets *ps, enum EVCNALUnitType nalu_type); // POC (picture order count of the current picture) derivation // @see ISO/IEC 23094-1:2020(E) 8.3.1 Decoding process for picture order count diff --git a/libavcodec/evc_parser.c b/libavcodec/evc_parser.c index 8dd6b5fda7..ae399ef8cc 100644 --- a/libavcodec/evc_parser.c +++ b/libavcodec/evc_parser.c @@ -116,7 +116,11 @@ static int parse_nal_unit(AVCodecParserContext *s, AVCodecContext *avctx, EVCParserSliceHeader sh; int bit_depth; - ret = ff_evc_parse_slice_header(&sh, &ctx->ps, nalu_type, buf, buf_size); + ret = init_get_bits8(&gb, buf, buf_size); + if (ret < 0) + return ret; + + ret = ff_evc_parse_slice_header(&gb, &sh, &ctx->ps, nalu_type); if (ret < 0) { av_log(avctx, AV_LOG_ERROR, "Slice header parsing error\n"); return ret; From patchwork Tue Jun 20 14:40:40 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: James Almer X-Patchwork-Id: 42253 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a20:be15:b0:121:b37c:e101 with SMTP id ge21csp1442212pzb; Tue, 20 Jun 2023 07:41:49 -0700 (PDT) X-Google-Smtp-Source: ACHHUZ7sP7hHrZ3q8YyNTjDfd9BZcWEll8RLu9AB4mNDFAb8buXySs6RycuCqC3pKeMO98zDc8QN X-Received: by 2002:a2e:838b:0:b0:2b4:6f70:c390 with SMTP id x11-20020a2e838b000000b002b46f70c390mr4245851ljg.15.1687272109272; Tue, 20 Jun 2023 07:41:49 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1687272109; cv=none; d=google.com; s=arc-20160816; b=Yt+7wVMukubnEP6Oanlx1oLjCPByrZ90pKN3fcX2vZf2b267v8kck6LLTST+z5zVU+ kqcNkomgrjTDD+vkJkAO2ObemSh+eEal7KVD0LKJnSYkhvljRtFTxboTRiZb8CSjrjm/ NvV59ZjykF/OXVrh7UVd9ZBoRgdIiLqkuHZWH4V4BuMHCu/CUYrNmNw3K6Z7BoSOXw/8 BPlhkSi5Op0LYHhi1HpBQVf6FyRBFiDFFfg8VlepT3/REAWTglTBRtvuN8JWUxBmr5c3 e+CllY8i+TK44NWtJejfYVqtYrpz4tGTnYFQSAifpGXP0gFQhCCr50UCPiYVTo8NVDYZ +KxQ== 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=Qwwi2Dk49bs2FgtSff1ejl0Zi/AKiK3zZZ3Y85HIeVo=; b=TVqPbfAp56KW8Pd4ngBR6o6v5133ckGFRIF0U3qKuJYJ19mT0HVoeXErg00IvXftdD qDGKektXUmKxto0HUo7aQMdPUQcxJrZO7eJOL0ccWBmpyI6Gw59ikyXDqmaPjwc/FFqF 5G9gO7lCHcgnzlJ0Ks+o0ti6hPhsCNamZiXQ78MTF0Xf6TljQJjxrWqN4APUAbiLN9LW V884FgIL3OCU8tGKVW8b0KsMX87YaPru9WKbwaaQ8/ta4kMPFiHo45RekeY9ETrs/ePA KOVmTRUDtOmBh4c30vOBaCWtUb9sSTs2WufrzomUaJzbrtIKkFEHbf+qoWgM9HO97W8t 400A== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@gmail.com header.s=20221208 header.b=KI1HcXbq; 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 lo15-20020a170906fa0f00b009889deab56esi1205019ejb.129.2023.06.20.07.41.46; Tue, 20 Jun 2023 07:41:49 -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=20221208 header.b=KI1HcXbq; 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 6C78D68C1D4; Tue, 20 Jun 2023 17:41:00 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-oa1-f45.google.com (mail-oa1-f45.google.com [209.85.160.45]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id DCF8C68C10E for ; Tue, 20 Jun 2023 17:40:52 +0300 (EEST) Received: by mail-oa1-f45.google.com with SMTP id 586e51a60fabf-1a98cf01151so4741618fac.2 for ; Tue, 20 Jun 2023 07:40:52 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20221208; t=1687272051; x=1689864051; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:from:to:cc:subject:date:message-id :reply-to; bh=cu79aQshYjcqRbhaAkzNAzthXHWK9BEjfDiM9sGP2dg=; b=KI1HcXbqtyYPxrt8V8VOHiGDkuB51xJFnQ+zjVTocoN/tlqyDYUgWPJGeCw98HBGlT d5HqmAMEekO5ofZYYw8RhFrek5KOnE9Cz3XOr9q8qjugMOHI4WgROslSqTd/Lj08khG2 d+JHpaKL3lk/fQiJIUasLQGKFQGamE1dkrSIBsib8Z724U8XZsrWIVOiHUUUaLH9voSg Fo8104L3p+h1we/zg5SyIpU3j9hRWhjx1mPjPSs+/AvgiJfMFe+VhD1vn2q6rW8Uarvv AT4mcmNfcXTb7IRGQuFo3SRSpg7/hZKPhhZxTr5pN+xWaSMleZMCntzowBpueSbDhmBJ VFZA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1687272051; x=1689864051; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=cu79aQshYjcqRbhaAkzNAzthXHWK9BEjfDiM9sGP2dg=; b=iecj466CTGsCP9kx120SdOYM6u0jEmqDESE4FEKR1bcb2tlxH/PFqlXtyLVoxkX/7o a7kfgoYMvFTN9nqT8AME+4Z8sbe1FNI13V237qpSIkkq/U9QjAm0F2lQqedBN2efGWzX IjAozDMe73uVDfFYb1j8bi+dJa9h44SD2KNTHz6diUcr8SHwKLHF2qYIenBZyEZIFGoe +E3ChHtks3i9M0XmGpijEmrvvgoPQQIRn1HBnlFzTVu9yG781P/XJZoN934V0q3fsp+B OL+IoNtrvq+VdaP0cW4h/vd+KL60fYWF6uv6NiLUfk8fBv32i0lklE9/2fe0VGjrnvrd AwIg== X-Gm-Message-State: AC+VfDz6Kf015R9OgObGeIRhdgMfEOz3WafNm5Jjmni7cNMctc4E0YOJ Ww5y/otQf8W4o3y9Ovcz5u4o8wZe3BA= X-Received: by 2002:a05:6870:3895:b0:1a6:8173:e1a4 with SMTP id y21-20020a056870389500b001a68173e1a4mr8802871oan.44.1687272051177; Tue, 20 Jun 2023 07:40:51 -0700 (PDT) Received: from localhost.localdomain (host197.190-225-105.telecom.net.ar. [190.225.105.197]) by smtp.gmail.com with ESMTPSA id nl13-20020a056871458d00b001a69e7efd13sm1417838oab.5.2023.06.20.07.40.50 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 20 Jun 2023 07:40:50 -0700 (PDT) From: James Almer To: ffmpeg-devel@ffmpeg.org Date: Tue, 20 Jun 2023 11:40:40 -0300 Message-ID: <20230620144042.9629-7-jamrial@gmail.com> X-Mailer: git-send-email 2.41.0 In-Reply-To: <20230620144042.9629-1-jamrial@gmail.com> References: <20230620144042.9629-1-jamrial@gmail.com> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 7/9] avcodec/evc_frame_merge: use a GetBitContext to parse entire NALUs 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: 6nTdEvlGS6mR Signed-off-by: James Almer --- libavcodec/evc_frame_merge_bsf.c | 48 +++++++++++--------------------- 1 file changed, 17 insertions(+), 31 deletions(-) diff --git a/libavcodec/evc_frame_merge_bsf.c b/libavcodec/evc_frame_merge_bsf.c index 3904170ebd..a9b44f4d10 100644 --- a/libavcodec/evc_frame_merge_bsf.c +++ b/libavcodec/evc_frame_merge_bsf.c @@ -74,57 +74,50 @@ static int evc_frame_merge_filter(AVBSFContext *bsf, AVPacket *out) { EVCFMergeContext *ctx = bsf->priv_data; AVPacket *in = ctx->in; - uint8_t *buffer, *nalu = NULL; + uint8_t *buffer; GetBitContext gb; enum EVCNALUnitType nalu_type; - int tid, nalu_size = 0; - int au_end_found = 0; + uint32_t nalu_size; + int tid, au_end_found = 0; int err; err = ff_bsf_get_packet_ref(bsf, in); if (err < 0) return err; - nalu_size = evc_read_nal_unit_length(in->data, EVC_NALU_LENGTH_PREFIX_SIZE, bsf); - if (nalu_size <= 0) { - err = AVERROR_INVALIDDATA; - goto end; - } - - nalu = in->data + EVC_NALU_LENGTH_PREFIX_SIZE; - nalu_size = in->size - EVC_NALU_LENGTH_PREFIX_SIZE; - // NAL unit parsing needed to determine if end of AU was found - if (nalu_size <= 0) { + nalu_size = evc_read_nal_unit_length(in->data, EVC_NALU_LENGTH_PREFIX_SIZE, bsf); + if (!nalu_size || nalu_size > INT_MAX) { av_log(bsf, AV_LOG_ERROR, "Invalid NAL unit size: (%d)\n", nalu_size); err = AVERROR_INVALIDDATA; goto end; } + err = init_get_bits8(&gb, in->data + EVC_NALU_LENGTH_PREFIX_SIZE, nalu_size); + if (err < 0) + return err; + // @see ISO_IEC_23094-1_2020, 7.4.2.2 NAL unit header semantic (Table 4 - NAL unit type codes and NAL unit type classes) // @see enum EVCNALUnitType in evc.h - nalu_type = evc_get_nalu_type(nalu, nalu_size, bsf); - if (nalu_type < EVC_NOIDR_NUT || nalu_type > EVC_UNSPEC_NUT62) { - av_log(bsf, AV_LOG_ERROR, "Invalid NAL unit type: (%d)\n", nalu_type); + if (get_bits1(&gb)) {// forbidden_zero_bit + av_log(bsf, AV_LOG_ERROR, "Invalid NAL unit header\n"); err = AVERROR_INVALIDDATA; goto end; } - tid = ff_evc_get_temporal_id(nalu, nalu_size, bsf); - if (tid < 0) { - av_log(bsf, AV_LOG_ERROR, "Invalid temporial id: (%d)\n", tid); + nalu_type = get_bits(&gb, 6) - 1; + if (nalu_type < EVC_NOIDR_NUT || nalu_type > EVC_UNSPEC_NUT62) { + av_log(bsf, AV_LOG_ERROR, "Invalid NAL unit type: (%d)\n", nalu_type); err = AVERROR_INVALIDDATA; goto end; } - nalu += EVC_NALU_HEADER_SIZE; - nalu_size -= EVC_NALU_HEADER_SIZE; + tid = get_bits(&gb, 3); + skip_bits(&gb, 5); // nuh_reserved_zero_5bits + skip_bits1(&gb); // nuh_extension_flag switch (nalu_type) { case EVC_SPS_NUT: - err = init_get_bits8(&gb, nalu, nalu_size); - if (err < 0) - return err; err = ff_evc_parse_sps(&gb, &ctx->ps); if (err < 0) { av_log(bsf, AV_LOG_ERROR, "SPS parsing error\n"); @@ -132,9 +125,6 @@ static int evc_frame_merge_filter(AVBSFContext *bsf, AVPacket *out) } break; case EVC_PPS_NUT: - err = init_get_bits8(&gb, nalu, nalu_size); - if (err < 0) - return err; err = ff_evc_parse_pps(&gb, &ctx->ps); if (err < 0) { av_log(bsf, AV_LOG_ERROR, "PPS parsing error\n"); @@ -145,10 +135,6 @@ static int evc_frame_merge_filter(AVBSFContext *bsf, AVPacket *out) case EVC_NOIDR_NUT: { EVCParserSliceHeader sh; - err = init_get_bits8(&gb, nalu, nalu_size); - if (err < 0) - return err; - err = ff_evc_parse_slice_header(&gb, &sh, &ctx->ps, nalu_type); if (err < 0) { av_log(bsf, AV_LOG_ERROR, "Slice header parsing error\n"); From patchwork Tue Jun 20 14:40:41 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: James Almer X-Patchwork-Id: 42254 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a20:be15:b0:121:b37c:e101 with SMTP id ge21csp1442276pzb; Tue, 20 Jun 2023 07:41:56 -0700 (PDT) X-Google-Smtp-Source: ACHHUZ6OB0n6rX1AkvX2XXIf+ZzkmmmJZjWTYra+awvNWptaT2ZBo8ZMd9/RVgfT1dyNYK1kDdZs X-Received: by 2002:aa7:c55a:0:b0:51a:4d8d:e4db with SMTP id s26-20020aa7c55a000000b0051a4d8de4dbmr5815531edr.23.1687272115697; Tue, 20 Jun 2023 07:41:55 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1687272115; cv=none; d=google.com; s=arc-20160816; b=kbtPN1sZxZgGhjbLT+QVgMoOItDqtfwu5UCk/4g1u8ua1EIiGt6nlxskdXPaLmSw8R bvbvhBuG6vK14gL05r8V83onOCeXwt0FvqoiFrdgWDsQnuyCaAOCggsUo/8TEHF1zF7p Jl/xEP1p3G484sbvzLMknV47Ddgal+8rXmxcZb1HJ5MGteXIfXx+5wf/EdfAXD40jPaW Pgp82AkSEX6EAuTqWV0HlpcYzOBGuEfJK8WTRxxLgDlv5quWmrTkBmiYJGA47CPvu7Zq xEQCxW6lk0nE6D3d96xNn2LSgwEj0z9+RioA6qyegq1vAUsj9eQ4V+BRh98xCI0ffJg+ m4Kw== 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=WdodJa30uZx/qLe0egv1SrPN5re5Dxh/ujCwPV15U4Y=; b=XV7Vt2v/3tzMwYg4Iwrz3u1ZuH82cKI7RErRDm6dC7sieKTtVSFua8Aeyfd/IMJ7Ih 7jow7pN+C12nrAxH5WZhKRBxerKVW/YC1Lxu3Tle88kKolq8SWJjURYg1RbAJmsKYxDv J9ZRqpul5EQNgl927IJ+PQx2DLdV7ugr7f+7zgC1wgzwS1+VFGhcWwIyQSpnAumZdRSb iUXQB1Dd+XfAIlDybh+jmhfUm4lEqGwOb3vds8S4Ejj2+O/Mk1LRCSmZR8bc8riSwREJ eGwV+itFvMOtxqPdepISso6SvzTDP1NeH+Fh25JEByIwDphlSh9HL+5YiUyV+o0BNUdE Exxg== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@gmail.com header.s=20221208 header.b="LZ/4MLbr"; 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 bf20-20020a0564021a5400b0051a327d1940si1225834edb.89.2023.06.20.07.41.55; Tue, 20 Jun 2023 07:41:55 -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=20221208 header.b="LZ/4MLbr"; 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 668DC68C1E7; Tue, 20 Jun 2023 17:41:01 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-oa1-f52.google.com (mail-oa1-f52.google.com [209.85.160.52]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 25E1D68C1AF for ; Tue, 20 Jun 2023 17:40:54 +0300 (EEST) Received: by mail-oa1-f52.google.com with SMTP id 586e51a60fabf-1a9a2724a62so4308977fac.2 for ; Tue, 20 Jun 2023 07:40:54 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20221208; t=1687272052; x=1689864052; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:from:to:cc:subject:date:message-id :reply-to; bh=aGsPe3kVWT90iNM/jX35HiOIz9ZOr44lB2fy7AHRicY=; b=LZ/4MLbrbiZ42z/xoJ23MsTK0v9WE4F6Vo1mcxKtcTugLHCfSbHevEofM6RT8/60VJ uGmigqhk7p9J49pYVBB3EizK4a0AEgyFcHx4yOAt/ADwrsA3gQBft4YKXBPLTBd+/UAM 2v4tQyFFAc1ZDQ96yN++ymnKUsEasU+FYBfAZ6SKZOsycEvjUbsS6CLFR3ZIHP5dm9m4 nAoiPb9Y2xxNTHSgdMT7uOJDAim9hqbQ28GKtAX0aUcc8/4pdXANxoUXRrzovLxUvGNA P9qzoAVZPk4Qm3bKHvVJOwjCzvdmeOd/epxWiFS/8lK14ajjJqOTCuOXPB5v1U1Z23ID ZqPQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1687272052; x=1689864052; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=aGsPe3kVWT90iNM/jX35HiOIz9ZOr44lB2fy7AHRicY=; b=lz+2oHQF8yfAvoytprYORildmfUU2fsWKCbi+ZVuDUxfZT1WjnO2GHTXX4dFUwaIdE bw8jQF46OrGIbNbjoytVApVqRDJrveGIo9aDimgI+eNGXFLUB6CVbwhDqSJEdO+kZXoe LJlTMYvzKtZK4p5hyrv4FUokJf0CvLH5yCksxYkdiaIY+n/wWu/48gyKSydkDuuImQcA Bb5mLpWjUSQ4zvqd++2UsdLCTFPfpr/n45o8Xjt8sIsUxy8elHkxUYSVenMYVavucOxd NK1fOkoKqaIzOe+rDxPNX206j5Fd9vQwHBIMYG7Bn8IIhIrTSqIAZtNowMzSrY1umkpF mShg== X-Gm-Message-State: AC+VfDzVXfpNEyEfBYVf42jP+KNRd84ODAA5RtU4mO8yihrwmLL7p1fr EvyY5WAHvQ/EbjH9dOhiqu5rXxYAfUo= X-Received: by 2002:a05:6871:6ba6:b0:19a:1331:f6df with SMTP id zh38-20020a0568716ba600b0019a1331f6dfmr6344967oab.45.1687272052434; Tue, 20 Jun 2023 07:40:52 -0700 (PDT) Received: from localhost.localdomain (host197.190-225-105.telecom.net.ar. [190.225.105.197]) by smtp.gmail.com with ESMTPSA id nl13-20020a056871458d00b001a69e7efd13sm1417838oab.5.2023.06.20.07.40.51 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 20 Jun 2023 07:40:52 -0700 (PDT) From: James Almer To: ffmpeg-devel@ffmpeg.org Date: Tue, 20 Jun 2023 11:40:41 -0300 Message-ID: <20230620144042.9629-8-jamrial@gmail.com> X-Mailer: git-send-email 2.41.0 In-Reply-To: <20230620144042.9629-1-jamrial@gmail.com> References: <20230620144042.9629-1-jamrial@gmail.com> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 8/9] avcodec/evc_parser: use a GetBitContext to parse entire NALUs 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: UYFfyFNdU2tC Signed-off-by: James Almer --- libavcodec/evc_parse.c | 22 ---------------------- libavcodec/evc_parse.h | 22 ---------------------- libavcodec/evc_parser.c | 30 ++++++++++++------------------ 3 files changed, 12 insertions(+), 62 deletions(-) diff --git a/libavcodec/evc_parse.c b/libavcodec/evc_parse.c index dee48e947b..eff4b7bc38 100644 --- a/libavcodec/evc_parse.c +++ b/libavcodec/evc_parse.c @@ -21,28 +21,6 @@ #include "evc.h" #include "evc_parse.h" -// nuh_temporal_id specifies a temporal identifier for the NAL unit -int ff_evc_get_temporal_id(const uint8_t *bits, int bits_size, void *logctx) -{ - int temporal_id = 0; - uint16_t t = 0; - - if (bits_size < EVC_NALU_HEADER_SIZE) { - av_log(logctx, AV_LOG_ERROR, "Can't read NAL unit header\n"); - return 0; - } - - // forbidden_zero_bit - if ((bits[0] & 0x80) != 0) - return -1; - - t = AV_RB16(bits); - - temporal_id = (t >> 6) & 0x0007; - - return temporal_id; -} - // @see ISO_IEC_23094-1 (7.3.2.6 Slice layer RBSP syntax) int ff_evc_parse_slice_header(GetBitContext *gb, EVCParserSliceHeader *sh, const EVCParamSets *ps, enum EVCNALUnitType nalu_type) diff --git a/libavcodec/evc_parse.h b/libavcodec/evc_parse.h index 322f52c928..0f142976f5 100644 --- a/libavcodec/evc_parse.h +++ b/libavcodec/evc_parse.h @@ -81,25 +81,6 @@ typedef struct EVCParserPoc { int DocOffset; // the decoding order count of the previous picture } EVCParserPoc; -static inline int evc_get_nalu_type(const uint8_t *bits, int bits_size, void *logctx) -{ - int unit_type_plus1 = 0; - - if (bits_size >= EVC_NALU_HEADER_SIZE) { - unsigned char *p = (unsigned char *)bits; - // forbidden_zero_bit - if ((p[0] & 0x80) != 0) { - av_log(logctx, AV_LOG_ERROR, "Invalid NAL unit header\n"); - return -1; - } - - // nal_unit_type - unit_type_plus1 = (p[0] >> 1) & 0x3F; - } - - return unit_type_plus1 - 1; -} - static inline uint32_t evc_read_nal_unit_length(const uint8_t *bits, int bits_size, void *logctx) { uint32_t nalu_len = 0; @@ -114,9 +95,6 @@ static inline uint32_t evc_read_nal_unit_length(const uint8_t *bits, int bits_si return nalu_len; } -// nuh_temporal_id specifies a temporal identifier for the NAL unit -int ff_evc_get_temporal_id(const uint8_t *bits, int bits_size, void *logctx); - int ff_evc_parse_slice_header(GetBitContext *gb, EVCParserSliceHeader *sh, const EVCParamSets *ps, enum EVCNALUnitType nalu_type); diff --git a/libavcodec/evc_parser.c b/libavcodec/evc_parser.c index ae399ef8cc..76790d8111 100644 --- a/libavcodec/evc_parser.c +++ b/libavcodec/evc_parser.c @@ -71,28 +71,29 @@ static int parse_nal_unit(AVCodecParserContext *s, AVCodecContext *avctx, return AVERROR_INVALIDDATA; } + ret = init_get_bits8(&gb, buf, buf_size); + if (ret < 0) + return ret; + // @see ISO_IEC_23094-1_2020, 7.4.2.2 NAL unit header semantic (Table 4 - NAL unit type codes and NAL unit type classes) // @see enum EVCNALUnitType in evc.h - nalu_type = evc_get_nalu_type(buf, buf_size, avctx); - if (nalu_type < EVC_NOIDR_NUT || nalu_type > EVC_UNSPEC_NUT62) { - av_log(avctx, AV_LOG_ERROR, "Invalid NAL unit type: (%d)\n", nalu_type); + if (get_bits1(&gb)) {// forbidden_zero_bit + av_log(avctx, AV_LOG_ERROR, "Invalid NAL unit header\n"); return AVERROR_INVALIDDATA; } - tid = ff_evc_get_temporal_id(buf, buf_size, avctx); - if (tid < 0) { - av_log(avctx, AV_LOG_ERROR, "Invalid temporial id: (%d)\n", tid); + nalu_type = get_bits(&gb, 6) - 1; + if (nalu_type < EVC_NOIDR_NUT || nalu_type > EVC_UNSPEC_NUT62) { + av_log(avctx, AV_LOG_ERROR, "Invalid NAL unit type: (%d)\n", nalu_type); return AVERROR_INVALIDDATA; } - buf += EVC_NALU_HEADER_SIZE; - buf_size -= EVC_NALU_HEADER_SIZE; + tid = get_bits(&gb, 3); + skip_bits(&gb, 5); // nuh_reserved_zero_5bits + skip_bits1(&gb); // nuh_extension_flag switch (nalu_type) { case EVC_SPS_NUT: - ret = init_get_bits8(&gb, buf, buf_size); - if (ret < 0) - return ret; ret = ff_evc_parse_sps(&gb, &ctx->ps); if (ret < 0) { av_log(avctx, AV_LOG_ERROR, "SPS parsing error\n"); @@ -100,9 +101,6 @@ static int parse_nal_unit(AVCodecParserContext *s, AVCodecContext *avctx, } break; case EVC_PPS_NUT: - ret = init_get_bits8(&gb, buf, buf_size); - if (ret < 0) - return ret; ret = ff_evc_parse_pps(&gb, &ctx->ps); if (ret < 0) { av_log(avctx, AV_LOG_ERROR, "PPS parsing error\n"); @@ -116,10 +114,6 @@ static int parse_nal_unit(AVCodecParserContext *s, AVCodecContext *avctx, EVCParserSliceHeader sh; int bit_depth; - ret = init_get_bits8(&gb, buf, buf_size); - if (ret < 0) - return ret; - ret = ff_evc_parse_slice_header(&gb, &sh, &ctx->ps, nalu_type); if (ret < 0) { av_log(avctx, AV_LOG_ERROR, "Slice header parsing error\n"); From patchwork Tue Jun 20 14:40:42 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: James Almer X-Patchwork-Id: 42255 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a20:be15:b0:121:b37c:e101 with SMTP id ge21csp1442376pzb; Tue, 20 Jun 2023 07:42:06 -0700 (PDT) X-Google-Smtp-Source: ACHHUZ6TvVEyNJB8xmlhbLAEXCLX6nwArMHWOIEi6VymK70MFtbJ/qUZ+SeCGxU8ZVKcdBGfN0rR X-Received: by 2002:a2e:9189:0:b0:2b4:75b7:edda with SMTP id f9-20020a2e9189000000b002b475b7eddamr3926825ljg.24.1687272126389; Tue, 20 Jun 2023 07:42:06 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1687272126; cv=none; d=google.com; s=arc-20160816; b=sysk03XGNqtU5cFlF+FFcOPEVHjjxe8ILHCo52HOTSR6B3VANztXXj/V8KMYQzRYs0 UXGWB+bcDJJhvDxT7DH1sHCPMbjqO87/WvnSaLSkN0o2RW9+Mrv8DiHUnUMTDJgayO1L MDb4ihi5/ntSL28DPr2FIhhaH20F4JurAHLXEO9ym8hGWnqSpjcIW5ttttb+/5xJPL86 R7VunQPdG5WM+PWdol2+GUmf1qj3Oj8m3NSe+KVwaibtLzIiqNpSf7rMqCm7j6lcvtgN +U4nmOpMuDVDWC6aH3DeOVt2RAFZNHNTg39RtkRf+g+fkT0C4JBVmjqrNV2XYg/xdVJi UpVg== 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=yS3dtfyc3q6BXZ2UhpaHjeyIrkfJsrhFH94OE/VrreU=; b=HtqDMK7D4ePraTiQ80v4+HT/usFA6b8IEhBcW2JZyMwhYctIXprWMFbjgDCXAaQzDv sVmRlg8lxm6TtllMUaOC2F74HxkCvjoGbM8ZaaF7h5qzOG/nso38P684N/fqtLSz9DgA aKCl0ouxneCWRgltf5LjuAjvgSZBNJQwpxkIVP8zz6h2DVSoUmGgV0VTan/kbAn4EUGO V4cBM1umHR+IJSvCSNec4Hzq4Z+crNzNkdud5GMH/kP+NPxSSD8X7JgJoUuJ2lySOHW8 A3I39hn0pV3ZfNINS5ZWe3XCftNqmXemZ3oag5w4F5+rmSfGCgdfSm5RQrIW4wsm1tYm 4rNg== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@gmail.com header.s=20221208 header.b=mOkgZ3hr; 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 f2-20020a50ee82000000b0051a4b31542csi1243897edr.80.2023.06.20.07.42.05; Tue, 20 Jun 2023 07:42:06 -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=20221208 header.b=mOkgZ3hr; 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 4F9EE68C1D5; Tue, 20 Jun 2023 17:41:02 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-oa1-f44.google.com (mail-oa1-f44.google.com [209.85.160.44]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 6DDE568C1D5 for ; Tue, 20 Jun 2023 17:40:55 +0300 (EEST) Received: by mail-oa1-f44.google.com with SMTP id 586e51a60fabf-1aa291b3fc9so2090490fac.0 for ; Tue, 20 Jun 2023 07:40:55 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20221208; t=1687272054; x=1689864054; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:from:to:cc:subject:date:message-id :reply-to; bh=P5wTNuJOiiwOXSYM9lGpBVCBpHLjeuYSyw3kORAISuI=; b=mOkgZ3hreDbqt3D90q0tlRxWXZ/8xiNJ013J57P8HGlm+piruquxqShdiqVZ2tx/Ut Kda2tu2ffgzRw0IJS5WyQBJxuetrY0bpMyhPvV9BaoaqK5K3HkLvAPvv16O/eZOMldbj eIUKrH2cmLK9a6nfGyCJI86GqccCHu40P1PzF5B80M2eG5KgA6S6nBDDzDANch41x405 PKLnEW3UIU9uaM1KEGOohjtHfILwbS45tIDkLKYuff1vfrCotIWZA6htslNUE/HooHix ieuJuJKL6ijxf6BfYKXQH5yNDF7QIfgLjORjwukMu+A4hlu64AKeMY9LIAWwCodvJMAd 22FA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1687272054; x=1689864054; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=P5wTNuJOiiwOXSYM9lGpBVCBpHLjeuYSyw3kORAISuI=; b=bM2xbGMZfLkVGCT3fYyxyhkRHS6xOZCMV7zVRG0io18601onFuB+ewX0xPLrWtHp7T Qa4Po/FLn4ImYKfGBj8da2VXXAWsT3z7YaNOJYp+MhfsW/QUQN7o/sZ1aL05Fn/j458y 2n4SQjNMwZJxn+vmIANA6e/ffFa6NRfzUT0IiucyU7ePsBIaVE051/LZykOa2nZpZ/X+ 9JOEMDSO/fP5kPUNsfacZctNpfvZ6w5YikU33vx7GQNmCbLpNGkU/2+6Xl/AmFbJ/34s IEMji/HJLvWHJ7NBI7Dqcq5a5f69mJRTnhXjLoJBAvGrEU4hHaZMMtAK+/bq+o1iDzOL bqiQ== X-Gm-Message-State: AC+VfDz6luw25dXNW0z2s7w8l4ptbuzPkITdGba2fhondoz2IqGH5IKE SYaHcl+DGBbY1H/Hllw0ouCSf5QEFWg= X-Received: by 2002:a05:6870:e292:b0:1a9:d5c9:4e58 with SMTP id v18-20020a056870e29200b001a9d5c94e58mr9624565oad.29.1687272053753; Tue, 20 Jun 2023 07:40:53 -0700 (PDT) Received: from localhost.localdomain (host197.190-225-105.telecom.net.ar. [190.225.105.197]) by smtp.gmail.com with ESMTPSA id nl13-20020a056871458d00b001a69e7efd13sm1417838oab.5.2023.06.20.07.40.52 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 20 Jun 2023 07:40:53 -0700 (PDT) From: James Almer To: ffmpeg-devel@ffmpeg.org Date: Tue, 20 Jun 2023 11:40:42 -0300 Message-ID: <20230620144042.9629-9-jamrial@gmail.com> X-Mailer: git-send-email 2.41.0 In-Reply-To: <20230620144042.9629-1-jamrial@gmail.com> References: <20230620144042.9629-1-jamrial@gmail.com> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 9/9] avformat/evc: move NALU length and type parsing functions to a header 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: pDB1CWRz1yuM Signed-off-by: James Almer --- libavformat/evc.c | 5 ++--- libavformat/evc.h | 30 ++++++++++++++++++++++++++++++ libavformat/evcdec.c | 44 ++++---------------------------------------- 3 files changed, 36 insertions(+), 43 deletions(-) diff --git a/libavformat/evc.c b/libavformat/evc.c index 421ff84cb7..f6e53aa6cf 100644 --- a/libavformat/evc.c +++ b/libavformat/evc.c @@ -23,7 +23,6 @@ #include "libavcodec/get_bits.h" #include "libavcodec/golomb.h" #include "libavcodec/evc.h" -#include "libavcodec/evc_parse.h" #include "avformat.h" #include "avio.h" #include "evc.h" @@ -361,7 +360,7 @@ int ff_isom_write_evcc(AVIOContext *pb, const uint8_t *data, evcc_init(&evcc); while (bytes_to_read > EVC_NALU_LENGTH_PREFIX_SIZE) { - nalu_size = evc_read_nal_unit_length(data, EVC_NALU_LENGTH_PREFIX_SIZE, pb); + nalu_size = evc_read_nal_unit_length(data, EVC_NALU_LENGTH_PREFIX_SIZE); if (nalu_size == 0) break; data += EVC_NALU_LENGTH_PREFIX_SIZE; @@ -369,7 +368,7 @@ int ff_isom_write_evcc(AVIOContext *pb, const uint8_t *data, if (bytes_to_read < nalu_size) break; - nalu_type = evc_get_nalu_type(data, bytes_to_read, pb); + nalu_type = evc_get_nalu_type(data, bytes_to_read); if (nalu_type < EVC_NOIDR_NUT || nalu_type > EVC_UNSPEC_NUT62) { ret = AVERROR_INVALIDDATA; goto end; diff --git a/libavformat/evc.h b/libavformat/evc.h index db56275fd8..46b27f7df7 100644 --- a/libavformat/evc.h +++ b/libavformat/evc.h @@ -24,9 +24,39 @@ #include #include "libavutil/rational.h" +#include "libavcodec/evc.h" #include "avio.h" +static inline int evc_get_nalu_type(const uint8_t *bits, int bits_size) +{ + int unit_type_plus1 = 0; + if (bits_size >= EVC_NALU_HEADER_SIZE) { + unsigned char *p = (unsigned char *)bits; + // forbidden_zero_bit + if ((p[0] & 0x80) != 0) // Cannot get bitstream information. Malformed bitstream. + return -1; + + // nal_unit_type + unit_type_plus1 = (p[0] >> 1) & 0x3F; + } + + return unit_type_plus1 - 1; +} + +static inline uint32_t evc_read_nal_unit_length(const uint8_t *bits, int bits_size) +{ + uint32_t nalu_len = 0; + + if (bits_size >= EVC_NALU_LENGTH_PREFIX_SIZE) { + unsigned char *p = (unsigned char *)bits; + + for (int i = 0; i < EVC_NALU_LENGTH_PREFIX_SIZE; i++) + nalu_len = (nalu_len << 8) | p[i]; + } + + return nalu_len; +} /** * Writes EVC sample metadata to the provided AVIOContext. diff --git a/libavformat/evcdec.c b/libavformat/evcdec.c index ef743028ae..73aab6c52f 100644 --- a/libavformat/evcdec.c +++ b/libavformat/evcdec.c @@ -31,6 +31,7 @@ #include "rawdec.h" #include "avformat.h" #include "avio_internal.h" +#include "evc.h" #include "internal.h" @@ -59,43 +60,6 @@ static const AVClass evc_demuxer_class = { .version = LIBAVUTIL_VERSION_INT, }; -static int get_nalu_type(const uint8_t *bits, int bits_size) -{ - int unit_type_plus1 = 0; - - if (bits_size >= EVC_NALU_HEADER_SIZE) { - unsigned char *p = (unsigned char *)bits; - // forbidden_zero_bit - if ((p[0] & 0x80) != 0) // Cannot get bitstream information. Malformed bitstream. - return -1; - - // nal_unit_type - unit_type_plus1 = (p[0] >> 1) & 0x3F; - } - - return unit_type_plus1 - 1; -} - -static uint32_t read_nal_unit_length(const uint8_t *bits, int bits_size) -{ - uint32_t nalu_len = 0; - - if (bits_size >= EVC_NALU_LENGTH_PREFIX_SIZE) { - - int t = 0; - unsigned char *p = (unsigned char *)bits; - - for (int i = 0; i < EVC_NALU_LENGTH_PREFIX_SIZE; i++) - t = (t << 8) | p[i]; - - nalu_len = t; - if (nalu_len == 0) // Invalid bitstream size - return 0; - } - - return nalu_len; -} - static int annexb_probe(const AVProbeData *p) { int nalu_type; @@ -106,7 +70,7 @@ static int annexb_probe(const AVProbeData *p) while (bytes_to_read > EVC_NALU_LENGTH_PREFIX_SIZE) { - nalu_size = read_nal_unit_length(bits, EVC_NALU_LENGTH_PREFIX_SIZE); + nalu_size = evc_read_nal_unit_length(bits, EVC_NALU_LENGTH_PREFIX_SIZE); if (nalu_size == 0) break; bits += EVC_NALU_LENGTH_PREFIX_SIZE; @@ -114,7 +78,7 @@ static int annexb_probe(const AVProbeData *p) if(bytes_to_read < nalu_size) break; - nalu_type = get_nalu_type(bits, bytes_to_read); + nalu_type = evc_get_nalu_type(bits, bytes_to_read); if (nalu_type == EVC_SPS_NUT) got_sps++; @@ -199,7 +163,7 @@ static int evc_read_packet(AVFormatContext *s, AVPacket *pkt) if (ret < 0) return ret; - nalu_size = read_nal_unit_length((const uint8_t *)&buf, EVC_NALU_LENGTH_PREFIX_SIZE); + nalu_size = evc_read_nal_unit_length((const uint8_t *)&buf, EVC_NALU_LENGTH_PREFIX_SIZE); if (!nalu_size || nalu_size > INT_MAX) return AVERROR_INVALIDDATA;