зеркало из https://github.com/mozilla/gecko-dev.git
[PATCH] Bug 829724 - Fix short buffer resampler returns. r=padenot,kinetik
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
This commit is contained in:
Родитель
233112b43d
Коммит
b3693e5431
|
@ -2,5 +2,4 @@ This source is from the Speex library (http://git.xiph.org/speex.git/), from
|
|||
commit a6d05eb5.
|
||||
|
||||
It consists in the audio resampling code (resampler.c) and its header files
|
||||
dependancies. No changes have been made to those files, imported in the tree
|
||||
using the update.sh script.
|
||||
dependancies, imported into the tree using the update.sh script.
|
||||
|
|
|
@ -960,13 +960,15 @@ EXPORT int speex_resampler_process_interleaved_float(SpeexResamplerState *st, co
|
|||
{
|
||||
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
|
||||
|
@ -981,13 +983,15 @@ EXPORT int speex_resampler_process_interleaved_int(SpeexResamplerState *st, cons
|
|||
{
|
||||
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
|
||||
|
|
|
@ -0,0 +1,54 @@
|
|||
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
|
||||
|
|
@ -6,6 +6,7 @@
|
|||
#
|
||||
# Copies the needed files from a directory containing the original
|
||||
# libspeex sources that we need for HTML5 media playback rate change.
|
||||
|
||||
cp $1/libspeex/resample.c src
|
||||
cp $1/libspeex/arch.h src
|
||||
cp $1/libspeex/stack_alloc.h src
|
||||
|
@ -15,3 +16,6 @@ cp $1/include/speex/speex_types.h src
|
|||
sed -e 's/unsigned @SIZE16@/uint16_t/g' -e 's/unsigned @SIZE32@/uint32_t/g' -e 's/@SIZE16@/int16_t/g' -e 's/@SIZE32@/int32_t/g' < $1/include/speex/speex_config_types.h.in > src/speex_config_types.h
|
||||
cp $1/AUTHORS .
|
||||
cp $1/COPYING .
|
||||
|
||||
# apply outstanding local patches
|
||||
patch -p1 < truncation.patch
|
||||
|
|
Загрузка…
Ссылка в новой задаче