From patchwork Wed May 17 21:23:38 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Zhao Zhili X-Patchwork-Id: 41696 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a20:ba91:b0:105:feb:71f2 with SMTP id fb17csp1202369pzb; Wed, 17 May 2023 06:24:21 -0700 (PDT) X-Google-Smtp-Source: ACHHUZ5Bf5ywDnvOxT6IOWTO5XnwSSfKkHKwo3Cp2Wgdj4OBVFnPW0q5d68avIc623p1KLaTSmvw X-Received: by 2002:aa7:ce0d:0:b0:50b:df56:8d68 with SMTP id d13-20020aa7ce0d000000b0050bdf568d68mr1904754edv.9.1684329860909; Wed, 17 May 2023 06:24:20 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1684329860; cv=none; d=google.com; s=arc-20160816; b=j6KStzvbKtpXORzcsLCYhdBC9bRNi3lZ2F4TBEvvY1NgXTkLxvkqKItApXdDSoBZuZ n9IVTLCZQBrrxnGKDy/KBHdzq/y4HFcMV40HBx68JR6oIJCaiOwE3kPCTWr17Rgag2sX e0GbmHYjW1hGU6EAXwX1OIace79t7yrlRRyoev9xFa43dvCATN9T4SpXgWvlBNWlCYdL fc9OdeyY85ugdYdIpBFWtAulICuz5FS1jErZSVSQVzV2kjt9FMc2S8LWmUonF2J86+67 NuJZCawUuiUpQSm3eF6yyzfOm3ySqgmk16CCtFVtoUPLUlfVD9RC9VvIRksm84/Cj9Bc 2IZA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:content-transfer-encoding:cc:reply-to :list-subscribe:list-help:list-post:list-archive:list-unsubscribe :list-id:precedence:subject:mime-version:date:to:from:message-id :dkim-signature:delivered-to; bh=OsBIOZ2n4ZIzU8efsxsdo2n3hOcfH/IWpt7kFPby0y4=; b=QQuqdZfZKUg5LxslDy/wZ7na3AZlSmFayjcyjypG9xBLypwJBPCsj0MGkK6nBnzPUV WiQ4fBuacLjmsrlT98+RtWSsIXKBe4K8HS6CXfHwCOaoAHLCJ0tT6s1k0bxOvjnAFcKu vnicK5lXRUqn4XiPwRXFhIRQAsrS29hwQNF7Y3frY3oLy3LbvnUUe21G0RvmAmkWISG7 Pv0ejf7AA9LrP6XRsLW78+lnjBO+FdEByDTg5lC21j2pA153pBrf/zuhMYtsrXmvis81 ZW4YKOeRhp9y6KVneQZEEe6ucepUnSbhGBvcO9zhAKDI3Fx97HYZMBGWcNa4NDLlEPKR DW1A== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@foxmail.com header.s=s201512 header.b=oMtLMo85; 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=NONE dis=NONE) header.from=foxmail.com Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id b16-20020aa7df90000000b0050bc6d73961si15262403edy.129.2023.05.17.06.24.20; Wed, 17 May 2023 06:24:20 -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=@foxmail.com header.s=s201512 header.b=oMtLMo85; 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=NONE dis=NONE) header.from=foxmail.com Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 6833868C0D2; Wed, 17 May 2023 16:23:57 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from out203-205-221-239.mail.qq.com (out203-205-221-239.mail.qq.com [203.205.221.239]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 5686B68BFDE for ; Wed, 17 May 2023 16:23:48 +0300 (EEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=foxmail.com; s=s201512; t=1684329819; bh=GQV5m9PsKDYqmbaERRQbjxyHU3YHLmx6n9qq5yLSCLk=; h=From:To:Cc:Subject:Date; b=oMtLMo85a7k7fVXqGlrQgChi+oK1nJ82dqT+CJwFBoNZxrG2XXGMkXg3ZoLE9z+Z9 G+PZskfpNhnZzUgFZbKGPmzx0swhzJCdPKYOxcjbX+PKS2W4SBj5zjFO7isSVEf7BU tSJVeoBI0OH8RVsUo7vt+XABFIkUJvjzNcpH1KeM= Received: from localhost.localdomain ([119.147.10.197]) by newxmesmtplogicsvrszb6-0.qq.com (NewEsmtp) with SMTP id 5E5A2C20; Wed, 17 May 2023 21:23:37 +0800 X-QQ-mid: xmsmtpt1684329817tv0zwocfn Message-ID: X-QQ-XMAILINFO: Nh9rHd4LJNLEo2wWAubhcYXDiMfZgtIypdWgb/As5BtGXEJJHs+MPk7JOoD+kt U25Thn8+Z3HI7u1U2wLocmGqorxmaK937pEDQW9J3KdMt80Jd7ESXzlo6xEHqKturdHUijpGfQBV i5jWpJ4UB+QPNFgaJHzplzEJ/oL78eAuDrUOnbnGMyrqWpz+uNcecR04m4XAvHni6jDiWDe7/3LC Jpe2XNxDNfi8hK2tUqf9qjI49lEGB1C5jMYBFc2JZsU0autET4IS6mhSZWnCuuJgo2qS/0AYsxvX Ch+NFHZeXcda9S41P/qbQWF/wm0xGoQ4NAx/5KcgCn1t29SPsXbNNwCKCSZbTZ8f5eo8dv2nqddZ ApgUv8cGAmf6cXoqI7Hifp1uO1h8BNha9SzPoPe8wIOhL5KKQQ2XANtmqA+5IZIXWGlw2iA4WO8F DD7wyL+xHMmNtTkqYuonxe70bw869mickvu6fjbe93hfCa8axfYr3Hs9sKBRTh5iwVCRRV9SrBIz IH8cy4Dpkl8ASCBN4A96VLhm3QeJmFm0paMxu3KMbJly1Ve7kI20QKlGXbccwnvjm2m5SSVkBNzh m6+zaXy9XcDOfZyphrFplvZLK+H9qMMSGqlb5vUkriWPjHPSCQaUGopsEOlXB0ZnWb8HgXKKxVA7 /2Pw72dG9hi9XRcYDxE1nZO4XVhLIfbz7Unc8NwYV7atbg0lVsZncbq3nH8juCgvP6o4XBAKNB0o WaY98tdaEttLUdnajwK8Rr4Oryq2VZp/cdBpMv9wc/bBjn6sMjXeHflroUOAuqsoJ+N+jmXgFsZB 1Uj5l+TrbHiboWz/HFDAoAdKMH0MzoFoLcN3Yv8AgZ8nSx36G2ZuSz9b45xZMihGlM1UGivHuL15 oubRvZCVDLUkF8+GGsbdWs3bAeWrCnNAudRJtS/wm2NalbmAYcd5F1rEgraEs7XaD5mWEJDiHYjf OKvPTHz4L+uVBC7rhzf8aXXhLhyEZeT5Ni4yc1XLQ1IjV9JNxgNZWcuSFPN72Z From: Zhao Zhili To: ffmpeg-devel@ffmpeg.org Date: Thu, 18 May 2023 05:23:38 +0800 X-OQ-MSGID: <20230517212343.1874354-1-quinkblack@foxmail.com> X-Mailer: git-send-email 2.25.1 MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 1/6] avcodec/cbs: add API to discard units by AVDiscard 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 Cc: Zhao Zhili Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" X-TUID: 4PmfPfvRB8wF From: Zhao Zhili --- libavcodec/cbs.c | 21 +++++++++++++++++++++ libavcodec/cbs.h | 17 +++++++++++++++++ libavcodec/cbs_internal.h | 6 ++++++ 3 files changed, 44 insertions(+) diff --git a/libavcodec/cbs.c b/libavcodec/cbs.c index 504197e06d..cf5211249b 100644 --- a/libavcodec/cbs.c +++ b/libavcodec/cbs.c @@ -1026,3 +1026,24 @@ int ff_cbs_make_unit_writable(CodedBitstreamContext *ctx, av_buffer_unref(&ref); return 0; } + +void ff_cbs_discard_units(CodedBitstreamContext *ctx, + CodedBitstreamFragment *frag, + enum AVDiscard skip, + int flags) +{ + if (!ctx->codec->discarded_unit) + return; + + for (int i = frag->nb_units - 1; i >= 0; i--) { + if (ctx->codec->discarded_unit(ctx, &frag->units[i], skip)) { + // discard all units + if (!(flags & DISCARD_FLAG_KEEP_NON_VCL)) { + ff_cbs_fragment_free(frag); + return; + } + + ff_cbs_delete_unit(frag, i); + } + } +} diff --git a/libavcodec/cbs.h b/libavcodec/cbs.h index ee21623dac..b4131db5fe 100644 --- a/libavcodec/cbs.h +++ b/libavcodec/cbs.h @@ -26,6 +26,7 @@ #include "codec_id.h" #include "codec_par.h" +#include "defs.h" #include "packet.h" @@ -432,5 +433,21 @@ int ff_cbs_make_unit_refcounted(CodedBitstreamContext *ctx, int ff_cbs_make_unit_writable(CodedBitstreamContext *ctx, CodedBitstreamUnit *unit); +enum CbsDiscardFlags { + DISCARD_FLAG_NONE = 0, + + /** + * keep non-vcl units even if the picture has been dropped. + */ + DISCARD_FLAG_KEEP_NON_VCL = 0x01, +}; + +/** + * Discard units accroding to 'skip'. + */ +void ff_cbs_discard_units(CodedBitstreamContext *ctx, + CodedBitstreamFragment *frag, + enum AVDiscard skip, + int flags); #endif /* AVCODEC_CBS_H */ diff --git a/libavcodec/cbs_internal.h b/libavcodec/cbs_internal.h index e585c77934..077954eee5 100644 --- a/libavcodec/cbs_internal.h +++ b/libavcodec/cbs_internal.h @@ -133,6 +133,12 @@ typedef struct CodedBitstreamType { CodedBitstreamUnit *unit, PutBitContext *pbc); + // Return 1 when the unit should be dropped according to 'skip', + // 0 otherwise. + int (*discarded_unit)(CodedBitstreamContext *ctx, + const CodedBitstreamUnit *unit, + enum AVDiscard skip); + // Read the data from all of frag->units and assemble it into // a bitstream for the whole fragment. int (*assemble_fragment)(CodedBitstreamContext *ctx,