diff options
author | ferreum <code@ferreum.de> | 2024-03-21 21:18:37 +0100 |
---|---|---|
committer | Dudemanguy <random342@airmail.cc> | 2024-04-12 17:40:00 +0000 |
commit | 096d35dac7bd8a087d5268e20ff9c392c1a93081 (patch) | |
tree | e88f319004576f102d1c9e561ed617de5dc57929 /audio | |
parent | a5269d7a737a9a523f8fa05818dc52c5bcd3ec97 (diff) | |
download | mpv-096d35dac7bd8a087d5268e20ff9c392c1a93081.tar.bz2 mpv-096d35dac7bd8a087d5268e20ff9c392c1a93081.tar.xz |
af_scaletempo2: prioritize louder channels for similarity measure
Playback with many audio channels could be distorted when using
scaletempo2. This was most noticeable when there were a lot of quiet
channels and few louder channels.
Fix this by increasing the weight of louder channels in relation to
quieter channels. Each channel's target block energy is factored into
the usual similarity measure.
This should have little effect on very correlated channels (such as most
stereo media), where the factors are very similar for all channels.
See-Also: #8705
See-Also: #13737
Diffstat (limited to 'audio')
-rw-r--r-- | audio/filter/af_scaletempo2_internals.c | 8 |
1 files changed, 4 insertions, 4 deletions
diff --git a/audio/filter/af_scaletempo2_internals.c b/audio/filter/af_scaletempo2_internals.c index 6e5b31aeda..924c0914b3 100644 --- a/audio/filter/af_scaletempo2_internals.c +++ b/audio/filter/af_scaletempo2_internals.c @@ -93,15 +93,15 @@ static void multi_channel_moving_block_energies( } static float multi_channel_similarity_measure( - const float* dot_prod_a_b, - const float* energy_a, const float* energy_b, + const float* dot_prod, + const float* energy_target, const float* energy_candidate, int channels) { const float epsilon = 1e-12f; float similarity_measure = 0.0f; for (int n = 0; n < channels; ++n) { - similarity_measure += dot_prod_a_b[n] - / sqrtf(energy_a[n] * energy_b[n] + epsilon); + similarity_measure += dot_prod[n] * energy_target[n] + / sqrtf(energy_target[n] * energy_candidate[n] + epsilon); } return similarity_measure; } |