From patchwork Fri Aug 7 21:26:17 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Alexander Strasser X-Patchwork-Id: 21527 Return-Path: X-Original-To: patchwork@ffaux-bg.ffmpeg.org Delivered-To: patchwork@ffaux-bg.ffmpeg.org Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org [79.124.17.100]) by ffaux.localdomain (Postfix) with ESMTP id 8E14C44B952 for ; Sat, 8 Aug 2020 00:26:25 +0300 (EEST) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 5DFD468B31D; Sat, 8 Aug 2020 00:26:25 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mout.gmx.net (mout.gmx.net [212.227.15.18]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 52D0F68B31D for ; Sat, 8 Aug 2020 00:26:19 +0300 (EEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=gmx.net; s=badeba3b8450; t=1596835578; bh=uUXuN38BJm7sIFyTfrINXS9L2nM3K7RgAJTeVMDNNi0=; h=X-UI-Sender-Class:Date:From:To:Subject; b=IwXEN+I3h47+b5FcF4wPu4ssJemLa5MhGCPWc14UU3tu8wEeImfjPTPYSf0/0YIt+ 8lFkuyJJOWB91qDVKBE2rGzkWLAjwn43wWDzuAeVb86CuhpPTk91f99tlWd4OqpLei JkbDGOyXo5nqfR+5crLZngnhnkbb27dlDQAVY84M= X-UI-Sender-Class: 01bb95c1-4bf8-414a-932a-4f6e2808ef9c Received: from akuma.local ([91.12.123.120]) by mail.gmx.com (mrgmx004 [212.227.17.190]) with ESMTPSA (Nemesis) id 1MNbp3-1kOBhB2fRz-00P7h9 for ; Fri, 07 Aug 2020 23:26:18 +0200 Date: Fri, 7 Aug 2020 23:26:17 +0200 From: Alexander Strasser To: ffmpeg-devel@ffmpeg.org Message-ID: <973bce64ee2a1c5a0951604c3ba0d772caf7c05d.1596835157.git.eclipse7@gmx.net> MIME-Version: 1.0 Content-Disposition: inline User-Agent: Mutt/1.9.4 (2018-02-28) X-Provags-ID: V03:K1:DbR7gXYVsLjnxUXJ9AkDioDWAQPcMdHieep5DSl+NxL/n3xdDdj BS0JhiLIMchabN6zkNXChRH4+sg9skgIABHhjRFfBBXwiYtPh02X/QOTmLPF1uFuiRblS+O HrpeCH9j1CXgWyIPiSRtTk0ew/Ql1TyEl9jIbmj2qqBQQs4NP86A6eH9BVwXJ+ip4+OKMNr 7jvG8WRig9bhuTmi/JZMg== X-Spam-Flag: NO X-UI-Out-Filterresults: notjunk:1;V03:K0:Tw+TLX9mxDI=:w4UmmoPIOFmETDM+cR1z3c XWN7XDGMc2ZX4C2SlBC3l4rtyCLBH2QmPuyB9uTdWC2dicLD46aXXdCa5uFbkm+Am5DRGDYH4 RMiTJ/bRFbDdGJ0IYO0BmZS5YBYvtimy/h549aVvLSBiiASHcbElZaUGz2qOOxxQDkGWStI81 kwytj7BWf0KRauz5w5JgNE9vVleYX5k5c+ywefwjdjo3dB21NhadSQ1ExudOzQMrhsz2DiXrv iMpXHOFlFDwXQ64JW5AfYGWe9CuSq/pfzvatSjs3TqTpGxSsqSOq+oprNBbqJeoQBtm7KMWdY 0EYa5BM4EYC8ULpecGY5DaAZlXmAzn8wDT1c/Y6dUuN34/SJ1yxuamXb3ZOmpMehWnOAtk/YN kVF7f8jS4+Oqmr6l8pmFpNX9acyvKl/p9cxKakBoDQezx9ZkgxHIPhz/hfXHZj2e1X+FIRokm YDGFpBaJDZ5+2vACqhCUTMVblGO/gR5W6oh9rId/xFTd5xIpu5Qx7VvGjzQni2cNwpavNjGBQ fcXQXezRliHiQt5b3KpvM1e6oZJ5z7KDRWKjxikpuNmPeEncQBmMx7d7fhPrEIeOD6dC2itcO K6KPIum4pBIM4R0y2lm0exJDhfoGUpOk7AsEvkzuLnUbwuEckSuaEDJidrDXi8FeLO6EOliIZ sz5c3bBle8+cen7UbEccGsEcfKOpFL0WEq0rFBy3W0JSmAOdlf6lv3UQWbFZSFBJwJRiM1kjr wy8t1dq2nDurJ/1H3lsE8S3jKa5l1FL4+lDxbV9Pz9IrsczttnUPDr3a2aLMP4NzBUkb/QcYP IpaYmfavyszznMydwF6+QOTCQX1sx/a1Qu2OOdYnNnt4/tE4XPowTqNiXAexb6P5a1zCiUr5K B3gcMHM0Df9r4FZhcOsLy3qJZgVQpS7OIgJSca28PT60CFHDsB9dSsMoP1o1JMfSqeeG6dL2H os0JYhLFeVKN8kIpwDjhDw9CI9NQ/KChK/T4HuZ5FVUkwywPjX2fYsqK4AB5Yjbe0OAwSPeGg BfQ5RVv+9fF+E0UW90wkO9l0VockNvHFwEpCT/JiQmnk9GhB1igdT4r5GFeaxiyHzTJ1DmFCE vlvHK54dFzqLSUGMySfdbhXF6mFJqwk24lUiSFE3PiRHX/qpWzW+YSOZRjGLnOITxWMb3fw60 53Ob9SyoI0QnaYUYqhvt+4QflBx566/HgFPN64cg2fjS/cpdbJSp5FQ3YOE6Mp122MPxWGsyv czmMtt3dnj1K9KaaD Subject: [FFmpeg-devel] [PATCH 1/2] lavc/snowenc: Expose an option to set the rc_eq expression X-BeenThere: ffmpeg-devel@ffmpeg.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: FFmpeg development discussions and patches List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Reply-To: FFmpeg development discussions and patches Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" Snow uses the ratecontrol module, but does not expose a way to set the rc_eq expression. The default expression, set in the ratecontrol module, will always be used. Make it possible to set rc_eq by adding an AVOption to snowenc. The option definition is mostly a copy from the mpegvideo common options definition of rc_eq (libavcodec/mpegvideo.h), with some minor style adjustments to be closer to the other snowenc option initializer expressions. Signed-off-by: Alexander Strasser --- libavcodec/snowenc.c | 5 +++++ 1 file changed, 5 insertions(+) -- diff --git a/libavcodec/snowenc.c b/libavcodec/snowenc.c index b1cf1426ee..16d2b7c302 100644 --- a/libavcodec/snowenc.c +++ b/libavcodec/snowenc.c @@ -1948,6 +1948,11 @@ static const AVOption options[] = { { "pred", "Spatial decomposition type", OFFSET(pred), AV_OPT_TYPE_INT, { .i64 = 0 }, DWT_97, DWT_53, VE, "pred" }, { "dwt97", NULL, 0, AV_OPT_TYPE_CONST, { .i64 = 0 }, INT_MIN, INT_MAX, VE, "pred" }, { "dwt53", NULL, 0, AV_OPT_TYPE_CONST, { .i64 = 1 }, INT_MIN, INT_MAX, VE, "pred" }, + { "rc_eq", "Set rate control equation. When computing the expression, besides the standard functions " + "defined in the section 'Expression Evaluation', the following functions are available: " + "bits2qp(bits), qp2bits(qp). Also the following constants are available: iTex pTex tex mv " + "fCode iCount mcVar var isI isP isB avgQP qComp avgIITex avgPITex avgPPTex avgBPTex avgTex.", + OFFSET(m.rc_eq), AV_OPT_TYPE_STRING, { .str = NULL }, 0, 0, VE }, { NULL }, }; From patchwork Fri Aug 7 21:26:58 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Alexander Strasser X-Patchwork-Id: 21528 Return-Path: X-Original-To: patchwork@ffaux-bg.ffmpeg.org Delivered-To: patchwork@ffaux-bg.ffmpeg.org Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org [79.124.17.100]) by ffaux.localdomain (Postfix) with ESMTP id 15C4344BA9B for ; Sat, 8 Aug 2020 00:32:16 +0300 (EEST) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id E8FD668B87C; Sat, 8 Aug 2020 00:32:15 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mout.gmx.net (mout.gmx.net [212.227.17.21]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 8616F68B31D for ; Sat, 8 Aug 2020 00:32:09 +0300 (EEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=gmx.net; s=badeba3b8450; t=1596835929; bh=PL+nilIUzYqnJ5YZK4ymsZa2udens1pVQuRu2gybItc=; h=X-UI-Sender-Class:Date:From:To:Subject:References:In-Reply-To; b=eLeH447aEpOf3653ia0dDJYmcXuSXEbLHJjYgTiPs4vm8ldG8gMHdettO13MQtZwB 1WIoeMGLUJfjV3Gu+vo6z/n3X1saWEQH/Q7H8d3FYmMy4rnL7F2nEfFn8QjFNphl6h Ni0H/sFbcJQuSvuhQt6ET+nTQBTPWIF+shGv8dso= X-UI-Sender-Class: 01bb95c1-4bf8-414a-932a-4f6e2808ef9c Received: from akuma.local ([91.12.123.120]) by mail.gmx.com (mrgmx105 [212.227.17.168]) with ESMTPSA (Nemesis) id 1N4hvb-1kl9UJ17O3-011iyI for ; Fri, 07 Aug 2020 23:27:00 +0200 Date: Fri, 7 Aug 2020 23:26:58 +0200 From: Alexander Strasser To: ffmpeg-devel@ffmpeg.org Message-ID: References: <973bce64ee2a1c5a0951604c3ba0d772caf7c05d.1596835157.git.eclipse7@gmx.net> MIME-Version: 1.0 Content-Disposition: inline In-Reply-To: <973bce64ee2a1c5a0951604c3ba0d772caf7c05d.1596835157.git.eclipse7@gmx.net> User-Agent: Mutt/1.9.4 (2018-02-28) X-Provags-ID: V03:K1:xvXFpdKHUDLoTi3VBlmSwSYTlFpsjUZc56KDkuu/ACaq3j0A/Iq TJALw73vTeM9LbHUtQdnwxcn/JC+NadPk1W6YrTkbiO5hzGrf2fnq/gA1vPpKmbq8TSQguo RUwkjd10whrW5MMk8BwmUB6Oc7h93r6qCMymomERrzC9zZRQwpWPlOO7hh3nt+WZ9miLzMC BBlZeZ8NzZdVq7/iaU3+g== X-Spam-Flag: NO X-UI-Out-Filterresults: notjunk:1;V03:K0:ZtbnapyijRs=:alO2/QYYH44OQ7kX8Tfe4S 86GvggKXQDxHwJmMvlKUDbvZExDJTXbbgoxUDshC+KHijc6Sn0WKLsHT5+2qZoaGqyBkrZgtU mSjCr1y9xMjRT6nHWe/UKqlihfWvwwVTFVpjC3owXxHgU61f9qb9OB66yi1lPRCplGJlgGw+M MXPNWC7sRbIlsxbKt9cxLwSzlankLIQ6EA82Tk+4WGg6Vz3BwLPJYlziZtIcZChogCC1Q1P15 v96QHIJ5kprMdB4CiJo0TJZ13atSDyUMPrq8V9o9hyxo77I7FnvLaTlVeeJLxRQiAf30T1izc x5yOT0zvrxmaLucJFcpwe7gSndRSdV2jpE08AzZutXpYXOWRm/qEn0OjmJh9QAUHMGOiWlzrL /+w+aQFQtOg7r6+5nTP8Xy2IMd0py+kiiTTKeYcKW1JfPQuGPTCirsMcY4haArZgVt+dJMaqS +f9JyxIbQawNVaujLGdVl866LxGvi7zF01CpG+Ky/UsxZ/0joLMNmYFEentyJqp8SKyT43bq0 v68hCQZ47rK9rJLcvYHh9oZ8t8sp0XhEqsMk2Cq7K6beFbnTuHN1MumlOqxhSZVKM50Fla5Mh JN8AS6dyCvg2VkZzjBIT50lt8E4wb4okMclgdIVotO4dAOppGMHxfl0Se07XnIq8ZuKR2zexl JtCCUiNjMyRRGg3Gocwr1DCG5eQgGWN1dya7uI722bNg7lIGtXXYAY3wHi9mD8VTNqMbT+kWr PLUXEZT/G/5L5P8PUW0+DF0Pilt+6uYH1GoPmBa9ykrvW+KCdMSLlq5f9B5uzNOXpKnbNyqcv gfmj2+4yt3Sl54FhlzEEoDblXObHJOwaq10yQkjQMdFJfmjpEkkJObVgjFej++bZaO+SDHUWF 1kw07OpdOWj7w5KEjTj6v5vZglDzH2JxNzAk5JpyI9AL9QYCwOjhFxcCOSewRvXFQhHDNRFjx TWiZDVSZx1L4lHp7zA5hO9uQrArV8hkczaMSoks7ZMo8WIbt2LZyVroMQxhLIPh7FCs0McgQc 0NptuqYYyw+BdpS8sx9OE59iGAdZdgeWjrM4n+x81Zuv4mvLRIC8OTyA1Di9H3l6XieL3PebJ ynvI8nGr0ojTc5pwc70LFSwU37fa6QJ+6+ynBIp1GtuCW6ZoPczt8gELj2w+htdrn5rsKwFp5 OH4v5wEagmejl73fAA0zlz6L/l6pThBf4J+4VWJxVfIohSqh9tX3WbzGi/tP0ZfHodd+3CslK lls+XfG65jI9bYaEv Subject: [FFmpeg-devel] [PATCH 2/2] lavc/ratecontrol: Fix error logging for parsing and evaluation of rc_eq X-BeenThere: ffmpeg-devel@ffmpeg.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: FFmpeg development discussions and patches List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Reply-To: FFmpeg development discussions and patches Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" Don't pass a potential NULL pointer to av_log, instead use a default in the rc_eq AVOption definitions. Now the context variable always holds a string; even if it's the default expression. Note this also fixes the evaluation error path, where a similar av_log call references the rc_eq string from the context too. Signed-off-by: Alexander Strasser --- libavcodec/mpegvideo.h | 2 +- libavcodec/ratecontrol.c | 3 +-- libavcodec/snowenc.c | 2 +- 3 files changed, 3 insertions(+), 4 deletions(-) -- diff --git a/libavcodec/mpegvideo.h b/libavcodec/mpegvideo.h index 29e692f245..d2515a3bbf 100644 --- a/libavcodec/mpegvideo.h +++ b/libavcodec/mpegvideo.h @@ -637,7 +637,7 @@ FF_MPV_OPT_CMP_FUNC, \ "defined in the section 'Expression Evaluation', the following functions are available: " \ "bits2qp(bits), qp2bits(qp). Also the following constants are available: iTex pTex tex mv " \ "fCode iCount mcVar var isI isP isB avgQP qComp avgIITex avgPITex avgPPTex avgBPTex avgTex.", \ - FF_MPV_OFFSET(rc_eq), AV_OPT_TYPE_STRING, .flags = FF_MPV_OPT_FLAGS }, \ + FF_MPV_OFFSET(rc_eq), AV_OPT_TYPE_STRING, {.str = "tex^qComp" }, .flags = FF_MPV_OPT_FLAGS }, \ {"rc_init_cplx", "initial complexity for 1-pass encoding", FF_MPV_OFFSET(rc_initial_cplx), AV_OPT_TYPE_FLOAT, {.dbl = 0 }, -FLT_MAX, FLT_MAX, FF_MPV_OPT_FLAGS}, \ {"rc_buf_aggressivity", "currently useless", FF_MPV_OFFSET(rc_buffer_aggressivity), AV_OPT_TYPE_FLOAT, {.dbl = 1.0 }, -FLT_MAX, FLT_MAX, FF_MPV_OPT_FLAGS}, \ {"border_mask", "increase the quantizer for macroblocks close to borders", FF_MPV_OFFSET(border_masking), AV_OPT_TYPE_FLOAT, {.dbl = 0 }, -FLT_MAX, FLT_MAX, FF_MPV_OPT_FLAGS}, \ diff --git a/libavcodec/ratecontrol.c b/libavcodec/ratecontrol.c index 6b77ccd006..03513177f7 100644 --- a/libavcodec/ratecontrol.c +++ b/libavcodec/ratecontrol.c @@ -515,8 +515,7 @@ av_cold int ff_rate_control_init(MpegEncContext *s) s->avctx->rc_max_available_vbv_use = 1.0; } - res = av_expr_parse(&rcc->rc_eq_eval, - s->rc_eq ? s->rc_eq : "tex^qComp", + res = av_expr_parse(&rcc->rc_eq_eval, s->rc_eq, const_names, func1_names, func1, NULL, NULL, 0, s->avctx); if (res < 0) { diff --git a/libavcodec/snowenc.c b/libavcodec/snowenc.c index 16d2b7c302..71fb5654cd 100644 --- a/libavcodec/snowenc.c +++ b/libavcodec/snowenc.c @@ -1952,7 +1952,7 @@ static const AVOption options[] = { "defined in the section 'Expression Evaluation', the following functions are available: " "bits2qp(bits), qp2bits(qp). Also the following constants are available: iTex pTex tex mv " "fCode iCount mcVar var isI isP isB avgQP qComp avgIITex avgPITex avgPPTex avgBPTex avgTex.", - OFFSET(m.rc_eq), AV_OPT_TYPE_STRING, { .str = NULL }, 0, 0, VE }, + OFFSET(m.rc_eq), AV_OPT_TYPE_STRING, { .str = "tex^qComp" }, 0, 0, VE }, { NULL }, };