* [FFmpeg-devel] [PATCH] libavcodec/libfdk-aacenc: Scale VBR mode with FF_QP2LAMBDA [not found] <63F57060.05FE3A.50083@loongson.cn> @ 2023-02-22 2:12 ` JonHGee 2023-02-22 16:09 ` Timo Rothenpieler 0 siblings, 1 reply; 7+ messages in thread From: JonHGee @ 2023-02-22 2:12 UTC (permalink / raw) To: ffmpeg-devel; +Cc: JonHGee libavcodec/libfdk-aacenc: VBR mode currently does not account for scaling when using -aq options with libfdk, resulting in clamping to vbr mode 5 whenever a value >0 is provided. Adjusting for the scaling factor for proper VBR support. --- libavcodec/libfdk-aacenc.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libavcodec/libfdk-aacenc.c b/libavcodec/libfdk-aacenc.c index 54549de473..da211baf51 100644 --- a/libavcodec/libfdk-aacenc.c +++ b/libavcodec/libfdk-aacenc.c @@ -230,7 +230,7 @@ static av_cold int aac_encode_init(AVCodecContext *avctx) } if (avctx->flags & AV_CODEC_FLAG_QSCALE || s->vbr) { - int mode = s->vbr ? s->vbr : avctx->global_quality; + int mode = s->vbr ? s->vbr : avctx->global_quality / FF_QP2LAMBDA; if (mode < 1 || mode > 5) { av_log(avctx, AV_LOG_WARNING, "VBR quality %d out of range, should be 1-5\n", mode); -- 2.39.2.637.g21b0678d19-goog _______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org https://ffmpeg.org/mailman/listinfo/ffmpeg-devel To unsubscribe, visit link above, or email ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe". ^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [FFmpeg-devel] [PATCH] libavcodec/libfdk-aacenc: Scale VBR mode with FF_QP2LAMBDA 2023-02-22 2:12 ` [FFmpeg-devel] [PATCH] libavcodec/libfdk-aacenc: Scale VBR mode with FF_QP2LAMBDA JonHGee @ 2023-02-22 16:09 ` Timo Rothenpieler 2023-02-22 16:33 ` Gyan Doshi 0 siblings, 1 reply; 7+ messages in thread From: Timo Rothenpieler @ 2023-02-22 16:09 UTC (permalink / raw) To: ffmpeg-devel On 22.02.2023 03:12, JonHGee wrote: > libavcodec/libfdk-aacenc: VBR mode currently does not account for scaling when using -aq options with libfdk, resulting in clamping to vbr mode 5 whenever a value >0 is provided. Adjusting for the scaling factor for proper VBR support. > > --- > libavcodec/libfdk-aacenc.c | 2 +- > 1 file changed, 1 insertion(+), 1 deletion(-) > > diff --git a/libavcodec/libfdk-aacenc.c b/libavcodec/libfdk-aacenc.c > index 54549de473..da211baf51 100644 > --- a/libavcodec/libfdk-aacenc.c > +++ b/libavcodec/libfdk-aacenc.c > @@ -230,7 +230,7 @@ static av_cold int aac_encode_init(AVCodecContext *avctx) > } > > if (avctx->flags & AV_CODEC_FLAG_QSCALE || s->vbr) { > - int mode = s->vbr ? s->vbr : avctx->global_quality; > + int mode = s->vbr ? s->vbr : avctx->global_quality / FF_QP2LAMBDA; > if (mode < 1 || mode > 5) { > av_log(avctx, AV_LOG_WARNING, > "VBR quality %d out of range, should be 1-5\n", mode); Won't this break every existing command line and API client that has passed a value according to the current scale? Also, what binds stronger here? It this "(s->vbr ? s->vbr : avctx->global_quality) / FF_QP2LAMBDA" or "s->vbr ? s->vbr : (avctx->global_quality / FF_QP2LAMBDA)"? In any case, this does not look correct to me. Where would the sudden multiplication with FF_QP2LAMBDA come from in the first place? _______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org https://ffmpeg.org/mailman/listinfo/ffmpeg-devel To unsubscribe, visit link above, or email ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe". ^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [FFmpeg-devel] [PATCH] libavcodec/libfdk-aacenc: Scale VBR mode with FF_QP2LAMBDA 2023-02-22 16:09 ` Timo Rothenpieler @ 2023-02-22 16:33 ` Gyan Doshi 2023-02-22 16:42 ` Timo Rothenpieler 0 siblings, 1 reply; 7+ messages in thread From: Gyan Doshi @ 2023-02-22 16:33 UTC (permalink / raw) To: ffmpeg-devel On 2023-02-22 09:39 pm, Timo Rothenpieler wrote: > On 22.02.2023 03:12, JonHGee wrote: >> libavcodec/libfdk-aacenc: VBR mode currently does not account for >> scaling when using -aq options with libfdk, resulting in clamping to >> vbr mode 5 whenever a value >0 is provided. Adjusting for the >> scaling factor for proper VBR support. >> >> --- >> libavcodec/libfdk-aacenc.c | 2 +- >> 1 file changed, 1 insertion(+), 1 deletion(-) >> >> diff --git a/libavcodec/libfdk-aacenc.c b/libavcodec/libfdk-aacenc.c >> index 54549de473..da211baf51 100644 >> --- a/libavcodec/libfdk-aacenc.c >> +++ b/libavcodec/libfdk-aacenc.c >> @@ -230,7 +230,7 @@ static av_cold int aac_encode_init(AVCodecContext >> *avctx) >> } >> if (avctx->flags & AV_CODEC_FLAG_QSCALE || s->vbr) { >> - int mode = s->vbr ? s->vbr : avctx->global_quality; >> + int mode = s->vbr ? s->vbr : avctx->global_quality / >> FF_QP2LAMBDA; >> if (mode < 1 || mode > 5) { >> av_log(avctx, AV_LOG_WARNING, >> "VBR quality %d out of range, should be 1-5\n", >> mode); > > Won't this break every existing command line and API client that has > passed a value according to the current scale? > > Also, what binds stronger here? > It this "(s->vbr ? s->vbr : avctx->global_quality) / FF_QP2LAMBDA" or > "s->vbr ? s->vbr : (avctx->global_quality / FF_QP2LAMBDA)"? > > In any case, this does not look correct to me. > Where would the sudden multiplication with FF_QP2LAMBDA come from in > the first place? From fftools\ffmpeg_mux_init.c 619: ost->enc_ctx->global_quality = FF_QP2LAMBDA * qscale Regards, Gyan _______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org https://ffmpeg.org/mailman/listinfo/ffmpeg-devel To unsubscribe, visit link above, or email ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe". ^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [FFmpeg-devel] [PATCH] libavcodec/libfdk-aacenc: Scale VBR mode with FF_QP2LAMBDA 2023-02-22 16:33 ` Gyan Doshi @ 2023-02-22 16:42 ` Timo Rothenpieler 2023-02-22 16:46 ` Gyan Doshi 0 siblings, 1 reply; 7+ messages in thread From: Timo Rothenpieler @ 2023-02-22 16:42 UTC (permalink / raw) To: ffmpeg-devel On 22.02.2023 17:33, Gyan Doshi wrote: > From > > fftools\ffmpeg_mux_init.c > 619: ost->enc_ctx->global_quality = FF_QP2LAMBDA * qscale > > Regards, > Gyan But that's only if you set the old qscale CLI options. If you set the global_quality option directly, there is no factor applied. By dividing by FF_QP2LAMBDA you break setting this value via global_quality, and instead add support for setting it via the old and pretty much abandoned qscale interface. Which is an API break. _______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org https://ffmpeg.org/mailman/listinfo/ffmpeg-devel To unsubscribe, visit link above, or email ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe". ^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [FFmpeg-devel] [PATCH] libavcodec/libfdk-aacenc: Scale VBR mode with FF_QP2LAMBDA 2023-02-22 16:42 ` Timo Rothenpieler @ 2023-02-22 16:46 ` Gyan Doshi 2023-02-22 17:15 ` Timo Rothenpieler 0 siblings, 1 reply; 7+ messages in thread From: Gyan Doshi @ 2023-02-22 16:46 UTC (permalink / raw) To: ffmpeg-devel On 2023-02-22 10:12 pm, Timo Rothenpieler wrote: > On 22.02.2023 17:33, Gyan Doshi wrote: >> From >> >> fftools\ffmpeg_mux_init.c >> 619: ost->enc_ctx->global_quality = FF_QP2LAMBDA * qscale >> >> Regards, >> Gyan > > But that's only if you set the old qscale CLI options. > If you set the global_quality option directly, there is no factor > applied. > > By dividing by FF_QP2LAMBDA you break setting this value via > global_quality, and instead add support for setting it via the old and > pretty much abandoned qscale interface. FWIW, that's what LAME does. libavcodec\libmp3lame.c 119: lame_set_VBR_quality(s->gfp, avctx->global_quality / (float)FF_QP2LAMBDA); global_quality semantics seem overloaded. Maybe we should just redirect user to priv vbr and error out in fdk init. Regards, Gyan _______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org https://ffmpeg.org/mailman/listinfo/ffmpeg-devel To unsubscribe, visit link above, or email ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe". ^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [FFmpeg-devel] [PATCH] libavcodec/libfdk-aacenc: Scale VBR mode with FF_QP2LAMBDA 2023-02-22 16:46 ` Gyan Doshi @ 2023-02-22 17:15 ` Timo Rothenpieler 2023-02-22 18:49 ` Jonathan Gee 0 siblings, 1 reply; 7+ messages in thread From: Timo Rothenpieler @ 2023-02-22 17:15 UTC (permalink / raw) To: ffmpeg-devel On 22.02.2023 17:46, Gyan Doshi wrote: > > > On 2023-02-22 10:12 pm, Timo Rothenpieler wrote: >> On 22.02.2023 17:33, Gyan Doshi wrote: >>> From >>> >>> fftools\ffmpeg_mux_init.c >>> 619: ost->enc_ctx->global_quality = FF_QP2LAMBDA * qscale >>> >>> Regards, >>> Gyan >> >> But that's only if you set the old qscale CLI options. >> If you set the global_quality option directly, there is no factor >> applied. >> >> By dividing by FF_QP2LAMBDA you break setting this value via >> global_quality, and instead add support for setting it via the old and >> pretty much abandoned qscale interface. > > FWIW, that's what LAME does. > > libavcodec\libmp3lame.c > 119: lame_set_VBR_quality(s->gfp, avctx->global_quality / > (float)FF_QP2LAMBDA); > > global_quality semantics seem overloaded. Maybe we should just redirect > user to priv vbr and error out in fdk init. > > Regards, > Gyan It's pretty much a matter of "what did this code always do in the past". It then got to stick to it, cause otherwise we break downstream API and CLI consumers. The mp3lame code is probably old enough that qscale was still the default at the time. Nowadays it's global_quality. Both of those options mapping to the same field in avctx, one with a magic factor applies, is definitely and oddity. _______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org https://ffmpeg.org/mailman/listinfo/ffmpeg-devel To unsubscribe, visit link above, or email ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe". ^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [FFmpeg-devel] [PATCH] libavcodec/libfdk-aacenc: Scale VBR mode with FF_QP2LAMBDA 2023-02-22 17:15 ` Timo Rothenpieler @ 2023-02-22 18:49 ` Jonathan Gee 0 siblings, 0 replies; 7+ messages in thread From: Jonathan Gee @ 2023-02-22 18:49 UTC (permalink / raw) To: FFmpeg development discussions and patches I had noticed fdk is specifically looking for the qscale flag, and otherwise does not do anything with global_quality. I suppose the change is risky for anyone who is setting both global quality and qscale, but with the current code, it seems incorrect to have a conditional based on the scaled option and not account for the scaling. if (avctx->flags & AV_CODEC_FLAG_QSCALE || s->vbr) { int mode = s->vbr ? s->vbr : avctx->global_quality; On Wed, Feb 22, 2023 at 9:16 AM Timo Rothenpieler <timo@rothenpieler.org> wrote: > On 22.02.2023 17:46, Gyan Doshi wrote: > > > > > > On 2023-02-22 10:12 pm, Timo Rothenpieler wrote: > >> On 22.02.2023 17:33, Gyan Doshi wrote: > >>> From > >>> > >>> fftools\ffmpeg_mux_init.c > >>> 619: ost->enc_ctx->global_quality = FF_QP2LAMBDA * qscale > >>> > >>> Regards, > >>> Gyan > >> > >> But that's only if you set the old qscale CLI options. > >> If you set the global_quality option directly, there is no factor > >> applied. > >> > >> By dividing by FF_QP2LAMBDA you break setting this value via > >> global_quality, and instead add support for setting it via the old and > >> pretty much abandoned qscale interface. > > > > FWIW, that's what LAME does. > > > > libavcodec\libmp3lame.c > > 119: lame_set_VBR_quality(s->gfp, avctx->global_quality / > > (float)FF_QP2LAMBDA); > > > > global_quality semantics seem overloaded. Maybe we should just redirect > > user to priv vbr and error out in fdk init. > > > > Regards, > > Gyan > > It's pretty much a matter of "what did this code always do in the past". > It then got to stick to it, cause otherwise we break downstream API and > CLI consumers. > > The mp3lame code is probably old enough that qscale was still the > default at the time. > Nowadays it's global_quality. > > Both of those options mapping to the same field in avctx, one with a > magic factor applies, is definitely and oddity. > _______________________________________________ > ffmpeg-devel mailing list > ffmpeg-devel@ffmpeg.org > https://ffmpeg.org/mailman/listinfo/ffmpeg-devel > > To unsubscribe, visit link above, or email > ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe". > _______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org https://ffmpeg.org/mailman/listinfo/ffmpeg-devel To unsubscribe, visit link above, or email ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe". ^ permalink raw reply [flat|nested] 7+ messages in thread
end of thread, other threads:[~2023-02-22 18:50 UTC | newest] Thread overview: 7+ messages (download: mbox.gz / follow: Atom feed) -- links below jump to the message on this page -- [not found] <63F57060.05FE3A.50083@loongson.cn> 2023-02-22 2:12 ` [FFmpeg-devel] [PATCH] libavcodec/libfdk-aacenc: Scale VBR mode with FF_QP2LAMBDA JonHGee 2023-02-22 16:09 ` Timo Rothenpieler 2023-02-22 16:33 ` Gyan Doshi 2023-02-22 16:42 ` Timo Rothenpieler 2023-02-22 16:46 ` Gyan Doshi 2023-02-22 17:15 ` Timo Rothenpieler 2023-02-22 18:49 ` Jonathan Gee
Git Inbox Mirror of the ffmpeg-devel mailing list - see https://ffmpeg.org/mailman/listinfo/ffmpeg-devel This inbox may be cloned and mirrored by anyone: git clone --mirror https://master.gitmailbox.com/ffmpegdev/0 ffmpegdev/git/0.git # If you have public-inbox 1.1+ installed, you may # initialize and index your mirror using the following commands: public-inbox-init -V2 ffmpegdev ffmpegdev/ https://master.gitmailbox.com/ffmpegdev \ ffmpegdev@gitmailbox.com public-inbox-index ffmpegdev Example config snippet for mirrors. AGPL code for this site: git clone https://public-inbox.org/public-inbox.git