gstreamer/subprojects/gst-plugins-base/gst
Roman Lebedev 8b1500d7ff volume: support arbitrarily-large positive gains
The current limit is `x10`, which allows just `+20 dB` of gain.

While it may seem sufficient, this came up as a problem
in a real-world, non-specially-engineered situation,
in strawberry's EBU R 128 loudness normalization.
(https://github.com/strawberrymusicplayer/strawberry/pull/1216)

There is an audio track (that was not intentionally engineered that way),
that has integrated loudness of `-38 LUFS`,
and if we want to normalize it's loudness to e.g. `-16 LUFS`,
which is a very reasonable thing to do,
we need to apply gain of `+22 dB`,
which is larger than `+20 dB`, and we fail...

I think it should allow at least `+96 dB` of gain,
and therefore should be at `10^(96/20) ~= 63096`.

But, i don't see why we need to put any specific restriction
on that parameter in the first place, other than the fact
that the fixed-point multiplication scheme does not support volume
larger than 15x-ish.

So let's just implement a floating-point fall-back path
that does not involve fixed-point multiplication
and lift the restriction altogether?

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/5063>
2023-08-07 13:17:45 +00:00
..
adder meson: Call pkgconfig.generate in the loop where we declare plugins dependencies 2022-09-01 21:17:35 +00:00
app meson: Call pkgconfig.generate in the loop where we declare plugins dependencies 2022-09-01 21:17:35 +00:00
audioconvert audioconvert, audioresample, audiofilter: fix divide by 0 for input buffer without caps 2022-11-26 08:47:49 +00:00
audiomixer meson: Call pkgconfig.generate in the loop where we declare plugins dependencies 2022-09-01 21:17:35 +00:00
audiorate meson: Call pkgconfig.generate in the loop where we declare plugins dependencies 2022-09-01 21:17:35 +00:00
audioresample audioconvert, audioresample, audiofilter: fix divide by 0 for input buffer without caps 2022-11-26 08:47:49 +00:00
audiotestsrc audiotestsrc: Initialize all samples in wave=ticks mode 2023-04-22 08:44:02 +00:00
compositor meson: Call pkgconfig.generate in the loop where we declare plugins dependencies 2022-09-01 21:17:35 +00:00
dsd dsd: Add code for DSD audio support 2023-06-23 01:27:03 +00:00
encoding encodebin: Plug a parser before timestamper 2023-05-22 15:10:52 +00:00
gio meson: Call pkgconfig.generate in the loop where we declare plugins dependencies 2022-09-01 21:17:35 +00:00
overlaycomposition meson: Call pkgconfig.generate in the loop where we declare plugins dependencies 2022-09-01 21:17:35 +00:00
pbtypes meson: Call pkgconfig.generate in the loop where we declare plugins dependencies 2022-09-01 21:17:35 +00:00
playback decodebin3: Ensure the slot is unlinked before linking to decoder 2023-08-01 20:16:59 +00:00
rawparse video: Add arbitrary tile dimensions support 2022-11-18 22:59:29 +00:00
subparse subparse: Skip after the end of a valid closing tag instead of only skipping < 2023-06-20 09:06:44 +01:00
tcp meson: Call pkgconfig.generate in the loop where we declare plugins dependencies 2022-09-01 21:17:35 +00:00
typefind typefindfunctions: Increase xml typefinder closing brace limit 2023-03-29 17:50:20 +00:00
videoconvertscale videoconvertscale: Remove the restriction on ANY memory 2023-06-27 08:17:33 +00:00
videorate videorate: properly handle variable framerate input and drop-only=true 2023-07-05 19:33:59 +00:00
videotestsrc videotestsrc: Support video/x-bayer 10/12/14/16 bit depths 2023-06-15 08:26:12 +00:00
volume volume: support arbitrarily-large positive gains 2023-08-07 13:17:45 +00:00
meson.build dsd: Add code for DSD audio support 2023-06-23 01:27:03 +00:00