From patchwork Wed May 17 21:23:41 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Zhao Zhili X-Patchwork-Id: 41694 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a20:ba91:b0:105:feb:71f2 with SMTP id fb17csp1202083pzb; Wed, 17 May 2023 06:24:01 -0700 (PDT) X-Google-Smtp-Source: ACHHUZ6/vED1gY+oc6ShOhtBf7Z4KqPJQfMMrUSzmEtuDxEZUWULGaUggqdGdmQcKfxAxfREFduM X-Received: by 2002:aa7:c1cd:0:b0:506:8dba:bd71 with SMTP id d13-20020aa7c1cd000000b005068dbabd71mr2544951edp.27.1684329840777; Wed, 17 May 2023 06:24:00 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1684329840; cv=none; d=google.com; s=arc-20160816; b=cbBFGIxZr+DuEnphZM2XMyFjM0QYZUI4TCeOKnwGX1s6IAIDDfRzZD6/0IY0Hm9OyR azRDOB/dZlMu+Oi0t+6tgnETBRa6H6Ft2OFzHLcgc9tH1Xckea10Jlh9bBCrRefH9tiK wAQznnczdQd8ouKDFep7iBylamDUkTgZD7AyC0f07RIKL8RNWQULEXnEfj9UUo4mb2MF uYkaYxnfKmjXAKtHkdruVotakFhwoacF8goSIM/oZNeUDKtjTJG6QfiAr8TZwLAfCNog QoEK44dI3ib9XQMlykwzOU9finXHCr0imMgG+3TZaLyfwIqJkedIGvRdNfQPKRAxuZKe Ai3Q== 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:references:in-reply-to:date :to:from:message-id:dkim-signature:delivered-to; bh=BX5l223EhRpfNBQO9T0Ppd3yyhQ1vvEtf6s79gqOdRo=; b=K3IG4nFSe3gv3Y6Svie7JMuqBu8uL+dOxcm7AT9QgUH3R+34JCFNR8rpOWKoEugCx/ ReFOyFBuaiID8DQq1DfcNH/ZF75GheUrVinLa+tTG6g06GcCdOFSI8HbTSi8yDNGLSFY gDiPlbVvK/eLvChzoh6oqxAnojzoUEzhAmrLwJQbYHWQKKreb+wob3mEul/N6BvO43yW ugtzGVuo/g8+AQ1g9SO57c3NUOl8eCZe8BL+c6B35n+M9fT5+6rZgWPcj+4v/SsJyly1 lDz62PkUG+QEm4B1AWQngHvCgJoAzFddTaFgrilUcbB+phZmCFcIFU1onZ/GwPuNcYf/ JMPw== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@foxmail.com header.s=s201512 header.b=IgVfuSky; 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 y11-20020aa7c24b000000b00510d79615adsi789972edo.373.2023.05.17.06.24.00; Wed, 17 May 2023 06:24:00 -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=IgVfuSky; 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 B0EB668C084; Wed, 17 May 2023 16:23:55 +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 51C2B68A084 for ; Wed, 17 May 2023 16:23:47 +0300 (EEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=foxmail.com; s=s201512; t=1684329820; bh=TCKwGwB/IXw1xVREfZMsHP1KMCW72bIBjpZXTzgRcmo=; h=From:To:Cc:Subject:Date:In-Reply-To:References; b=IgVfuSkyK+ph1hoHSghy1VuxgnBU2qmCSpHJel2NyRZ3UpQ9UHToT+eXZK5Y5v7hI Pc9LNVaLzn+SzMX9JU272VmJd7dusfghWFM1pf3vnbTGUEnofzTo6CDEMaLr60p4RX JzQ9i0x7n7G6GI98SUJRaW73nr2aXZv0q87BEMFY= 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: xmsmtpt1684329819to8bpbi50 Message-ID: X-QQ-XMAILINFO: M4n1VKkvaIfIvlw4UKp62TRMyC7PpgKZat+wVP4Mn1QUbUuL7eK42w5AqKnTWe jDHHIrCwOq2ZgvTINmL07s/U3VafJgXboxf1fk8hxjdfGHJfoidpr5XjLUXBE+FVRHC4nu8cc1Yb P61xbKLIgdPrl+k80QoZupVbuS3boT7i+YmPo5+IuxmqeprzmPDvxeNOeFGwymkdHDbFrG6VLMyI ZsVaccTf4A9B8a0Oelb6WRN/CvnvYBl0o83ysLtMABhXgZI62atlV7g6kQUQp/qm6dkU7Jjhqs4+ q/tHQ6HIJ1D+1SRdj5Ki1xkiD/Nw580lhPzDAbzMPa2/iHCqMuCbFeKlqKbZLmVz3UigcpEUupVm CeJ99VuOADpMjNWARMzhDWKuJVv61kN1Vf1ZXW2VbWgJKPQ6fzNV3jt8GwoeLB8y1+Z7Ck1DSkDI CT9/Okb79HvagWuxxzpUJGJ8yllUbJqOz++oZgI1/zHUGMv56s7TZMmxDoTroDkjMBCvNodCfwGs 7ySSsm+hzuKjajZDzdsFj1pAir4wX+vpAI+DCubUW8QKwp3y/Wis7ndoDPuC+r/G/o53EnRwzAv5 4ogKIy49XA0OgjJ28+W0BKdMY2LXRezLT8RW7VNU920tzxFMme2YILoJX/XnH+c3P0gjUuhmYXpD Q6P1S2rGPby4lWxE9UPbDOuQmXq7cMvzVjQieNYf1g+3buUMwwMSl0Nf27pmjw/0KTPUZsPvDM4w 40K5n6yd6z1TBl6LduzFttX1Ikzq95D9I+w6AKJjFCXTuid1BPUcmSRBGhmhewG7xr9WTI84KDyT xCQqeBPZh5ObB3vDxtehavExwGBnLUeTIL4HVSO9/DJ/TZbVOxVzM7GCTieO3cHInmwF8aH3Xtdx ZflXRs0WCnb3rhGExU4tlB5ArmomW9LB6PwXCmEInIKZ2ez8EdWwZmhZGHvE4zqRUb4eETlFXtQz 0sfPH8S14lpHCfCY0QCa907U7A9+IaI81OUIH4PfLdlr6aLKxwFA== From: Zhao Zhili To: ffmpeg-devel@ffmpeg.org Date: Thu, 18 May 2023 05:23:41 +0800 X-OQ-MSGID: <20230517212343.1874354-4-quinkblack@foxmail.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20230517212343.1874354-1-quinkblack@foxmail.com> References: <20230517212343.1874354-1-quinkblack@foxmail.com> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 4/6] avcodec/filter_units_bsf: add skip frame support 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: zN1Dbpf1rUvB From: Zhao Zhili --- libavcodec/filter_units_bsf.c | 42 +++++++++++++++++++++++++++++++++-- libavcodec/version.h | 2 +- 2 files changed, 41 insertions(+), 3 deletions(-) diff --git a/libavcodec/filter_units_bsf.c b/libavcodec/filter_units_bsf.c index 38756baf42..e4c2cadbd5 100644 --- a/libavcodec/filter_units_bsf.c +++ b/libavcodec/filter_units_bsf.c @@ -34,6 +34,8 @@ typedef struct FilterUnitsContext { const char *pass_types; const char *remove_types; + enum AVDiscard discard; + int discard_flags; enum { NOOP, @@ -109,7 +111,7 @@ static int filter_units_filter(AVBSFContext *bsf, AVPacket *pkt) if (err < 0) return err; - if (ctx->mode == NOOP) + if (ctx->mode == NOOP && ctx->discard <= AVDISCARD_DEFAULT) return 0; err = ff_cbs_read_packet(ctx->cbc, frag, pkt); @@ -118,6 +120,8 @@ static int filter_units_filter(AVBSFContext *bsf, AVPacket *pkt) goto fail; } + ff_cbs_discard_units(ctx->cbc, frag, ctx->discard, ctx->discard_flags); + if (ctx->mode != NOOP) { for (i = frag->nb_units - 1; i >= 0; i--) { for (j = 0; j < ctx->nb_types; j++) { if (frag->units[i].type == ctx->type_list[j]) @@ -127,6 +131,7 @@ static int filter_units_filter(AVBSFContext *bsf, AVPacket *pkt) : j >= ctx->nb_types) ff_cbs_delete_unit(frag, i); } + } if (frag->nb_units == 0) { // Don't return packets with nothing in them. @@ -175,7 +180,7 @@ static int filter_units_init(AVBSFContext *bsf) av_log(bsf, AV_LOG_ERROR, "Failed to parse remove_types.\n"); return err; } - } else { + } else if (ctx->discard == AVDISCARD_NONE) { return 0; } @@ -183,9 +188,11 @@ static int filter_units_init(AVBSFContext *bsf) if (err < 0) return err; + if (ctx->discard == AVDISCARD_NONE) { // Don't actually decompose anything, we only want the unit data. ctx->cbc->decompose_unit_types = ctx->type_list; ctx->cbc->nb_decompose_unit_types = 0; + } if (bsf->par_in->extradata) { CodedBitstreamFragment *frag = &ctx->fragment; @@ -225,6 +232,37 @@ static const AVOption filter_units_options[] = { OFFSET(remove_types), AV_OPT_TYPE_STRING, { .str = NULL }, .flags = FLAGS }, + { "discard", "Remove the selected frames", + OFFSET(discard), AV_OPT_TYPE_INT, + { .i64 = AVDISCARD_NONE }, INT_MIN, INT_MAX, FLAGS, "discard"}, + { "none" , "discard none", + 0, AV_OPT_TYPE_CONST, + { .i64 = AVDISCARD_NONE }, INT_MIN, INT_MAX, FLAGS, "discard"}, + { "default" , "discard none, but can be changed after dynamically", + 0, AV_OPT_TYPE_CONST, + { .i64 = AVDISCARD_DEFAULT }, INT_MIN, INT_MAX, FLAGS, "discard"}, + { "nonref", "discard all non-reference frames", + 0, AV_OPT_TYPE_CONST, + { .i64 = AVDISCARD_NONREF }, INT_MIN, INT_MAX, FLAGS, "discard"}, + { "bidir", "discard all bidirectional frames", + 0, AV_OPT_TYPE_CONST, + { .i64 = AVDISCARD_BIDIR }, INT_MIN, INT_MAX, FLAGS, "discard"}, + { "nonintra", "discard all frames except I frames", + 0, AV_OPT_TYPE_CONST, + { .i64 = AVDISCARD_NONINTRA }, INT_MIN, INT_MAX, FLAGS, "discard"}, + { "nonkey", "discard all frames except keyframes", + 0, AV_OPT_TYPE_CONST, + { .i64 = AVDISCARD_NONKEY }, INT_MIN, INT_MAX, FLAGS, "discard"}, + { "all", "discard all frames", + 0, AV_OPT_TYPE_CONST, + { .i64 = AVDISCARD_ALL }, INT_MIN, INT_MAX, FLAGS, "discard"}, + + { "discard_flags", "flags to control the discard frame behavior", + OFFSET(discard_flags), AV_OPT_TYPE_FLAGS, + { .i64 = DISCARD_FLAG_NONE }, INT_MIN, INT_MAX, FLAGS, "discard_flags"}, + { "keep_non_vcl", "non-vcl units even if the picture has been dropped", + 0, AV_OPT_TYPE_CONST, + { .i64 = DISCARD_FLAG_KEEP_NON_VCL }, INT_MIN, INT_MAX, FLAGS, "discard_flags"}, { NULL } }; diff --git a/libavcodec/version.h b/libavcodec/version.h index 7531c6c42a..c20072197d 100644 --- a/libavcodec/version.h +++ b/libavcodec/version.h @@ -30,7 +30,7 @@ #include "version_major.h" #define LIBAVCODEC_VERSION_MINOR 14 -#define LIBAVCODEC_VERSION_MICRO 100 +#define LIBAVCODEC_VERSION_MICRO 101 #define LIBAVCODEC_VERSION_INT AV_VERSION_INT(LIBAVCODEC_VERSION_MAJOR, \ LIBAVCODEC_VERSION_MINOR, \