summaryrefslogtreecommitdiffstats
path: root/audio
diff options
context:
space:
mode:
authorferreum <code@ferreum.de>2024-03-21 21:18:37 +0100
committerDudemanguy <random342@airmail.cc>2024-04-12 17:40:00 +0000
commit096d35dac7bd8a087d5268e20ff9c392c1a93081 (patch)
treee88f319004576f102d1c9e561ed617de5dc57929 /audio
parenta5269d7a737a9a523f8fa05818dc52c5bcd3ec97 (diff)
downloadmpv-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.c8
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;
}