mirror of
https://gitlab.winehq.org/wine/wine-gecko.git
synced 2024-09-13 09:24:08 -07:00
bcb9a8c6b0
From 763e746e97f0c234cea9ad1b674d406f55a2fb51 Mon Sep 17 00:00:00 2001 This applies a patch from the opus-tools fork of the speex resampler, fixing an issue where the resampler could return less that the requested number of samples. https://git.xiph.org/?p=opus-tools.git;a=commitdiff;h=5adadc5 --- media/libspeex_resampler/README_MOZILLA | 3 +- media/libspeex_resampler/src/resample.c | 12 ++++--- media/libspeex_resampler/truncation.patch | 54 +++++++++++++++++++++++++++++++ media/libspeex_resampler/update.sh | 4 +++ 4 files changed, 67 insertions(+), 6 deletions(-) create mode 100644 media/libspeex_resampler/truncation.patch --HG-- extra : rebase_source : db081699c3f914824abeb3bbf6563d459a690eff
55 lines
1.8 KiB
Diff
55 lines
1.8 KiB
Diff
From 5adadc5626ee2d5d3a3ca21e70fd195b9d002a0b Mon Sep 17 00:00:00 2001
|
|
From: Jean-Marc Valin <jmvalin@jmvalin.ca>
|
|
Date: Wed, 1 Aug 2012 13:19:38 -0400
|
|
Subject: [PATCH] Properly save in_len for multiple channels in the resampler.
|
|
|
|
This fixes issues with clicking in one channel and/or truncation
|
|
with some unusual sample rates.
|
|
---
|
|
src/resample.c | 12 ++++++++----
|
|
1 files changed, 8 insertions(+), 4 deletions(-)
|
|
|
|
diff --git a/src/resample.c b/src/resample.c
|
|
index 84aaf59..6e92bd0 100644
|
|
--- a/src/resample.c
|
|
+++ b/src/resample.c
|
|
@@ -966,13 +966,15 @@ SPX_RESAMPLE_EXPORT int speex_resampler_process_interleaved_float(SpeexResampler
|
|
{
|
|
spx_uint32_t i;
|
|
int istride_save, ostride_save;
|
|
- spx_uint32_t bak_len = *out_len;
|
|
+ spx_uint32_t bak_out_len = *out_len;
|
|
+ spx_uint32_t bak_in_len = *in_len;
|
|
istride_save = st->in_stride;
|
|
ostride_save = st->out_stride;
|
|
st->in_stride = st->out_stride = st->nb_channels;
|
|
for (i=0;i<st->nb_channels;i++)
|
|
{
|
|
- *out_len = bak_len;
|
|
+ *out_len = bak_out_len;
|
|
+ *in_len = bak_in_len;
|
|
if (in != NULL)
|
|
speex_resampler_process_float(st, i, in+i, in_len, out+i, out_len);
|
|
else
|
|
@@ -987,13 +989,15 @@ SPX_RESAMPLE_EXPORT int speex_resampler_process_interleaved_int(SpeexResamplerSt
|
|
{
|
|
spx_uint32_t i;
|
|
int istride_save, ostride_save;
|
|
- spx_uint32_t bak_len = *out_len;
|
|
+ spx_uint32_t bak_out_len = *out_len;
|
|
+ spx_uint32_t bak_in_len = *in_len;
|
|
istride_save = st->in_stride;
|
|
ostride_save = st->out_stride;
|
|
st->in_stride = st->out_stride = st->nb_channels;
|
|
for (i=0;i<st->nb_channels;i++)
|
|
{
|
|
- *out_len = bak_len;
|
|
+ *out_len = bak_out_len;
|
|
+ *in_len = bak_in_len;
|
|
if (in != NULL)
|
|
speex_resampler_process_int(st, i, in+i, in_len, out+i, out_len);
|
|
else
|
|
--
|
|
1.7.2.5
|
|
|