Get rid of tdspeed_enabled in struct dsp_config and use the global_settings member instead. That one needs to be checked in tdspeed_init() as well, else the buffers are always allocated.

git-svn-id: svn://svn.rockbox.org/rockbox/trunk@21305 a1c6a512-1295-4272-9138-f99709370657
This commit is contained in:
Thomas Martitz 2009-06-16 00:59:24 +00:00
parent 3866755d28
commit cb57a568e8
2 changed files with 18 additions and 14 deletions

View file

@ -161,7 +161,6 @@ struct dsp_config
int sample_depth; int sample_depth;
int sample_bytes; int sample_bytes;
int stereo_mode; int stereo_mode;
bool tdspeed_enabled; /* User has enabled timestretch */
int tdspeed_percent; /* Speed % */ int tdspeed_percent; /* Speed % */
bool tdspeed_active; /* Timestretch is in use */ bool tdspeed_active; /* Timestretch is in use */
int frac_bits; int frac_bits;
@ -266,12 +265,12 @@ void sound_set_pitch(int permille)
AUDIO_DSP.codec_frequency); AUDIO_DSP.codec_frequency);
} }
void tdspeed_setup(struct dsp_config *dspc) static void tdspeed_setup(struct dsp_config *dspc)
{ {
dspc->tdspeed_active = false; dspc->tdspeed_active = false;
if (dspc == &AUDIO_DSP) if (dspc == &AUDIO_DSP)
{ {
if (!dspc->tdspeed_enabled) if(!dsp_timestretch_enabled())
return; return;
if (dspc->tdspeed_percent == 0) if (dspc->tdspeed_percent == 0)
dspc->tdspeed_percent = 100; dspc->tdspeed_percent = 100;
@ -304,7 +303,7 @@ void dsp_timestretch_enable(bool enable)
if (big_sample_buf_count < 0) if (big_sample_buf_count < 0)
big_sample_buf_count = 0; big_sample_buf_count = 0;
} }
AUDIO_DSP.tdspeed_enabled = enable; global_settings.timestretch_enabled = enable;
tdspeed_setup(&AUDIO_DSP); tdspeed_setup(&AUDIO_DSP);
} }
@ -321,7 +320,7 @@ int dsp_get_timestretch()
bool dsp_timestretch_enabled() bool dsp_timestretch_enabled()
{ {
return (AUDIO_DSP.tdspeed_enabled && big_sample_buf_count > 0); return (global_settings.timestretch_enabled && big_sample_buf_count > 0);
} }
/* Convert count samples to the internal format, if needed. Updates src /* Convert count samples to the internal format, if needed. Updates src

View file

@ -28,6 +28,7 @@
#include "debug.h" #include "debug.h"
#include "system.h" #include "system.h"
#include "tdspeed.h" #include "tdspeed.h"
#include "settings.h"
#define assert(cond) #define assert(cond)
@ -56,15 +57,18 @@ static int32_t *outbuf[2] = { NULL, NULL };
void tdspeed_init() void tdspeed_init()
{ {
/* Allocate buffers */ if (global_settings.timestretch_enabled)
if (overlap_buffer[0] == NULL) {
overlap_buffer[0] = (int32_t *) buffer_alloc(FIXED_BUFSIZE * sizeof(int32_t)); /* Allocate buffers */
if (overlap_buffer[1] == NULL) if (overlap_buffer[0] == NULL)
overlap_buffer[1] = (int32_t *) buffer_alloc(FIXED_BUFSIZE * sizeof(int32_t)); overlap_buffer[0] = (int32_t *) buffer_alloc(FIXED_BUFSIZE * sizeof(int32_t));
if (outbuf[0] == NULL) if (overlap_buffer[1] == NULL)
outbuf[0] = (int32_t *) buffer_alloc(TDSPEED_OUTBUFSIZE * sizeof(int32_t)); overlap_buffer[1] = (int32_t *) buffer_alloc(FIXED_BUFSIZE * sizeof(int32_t));
if (outbuf[1] == NULL) if (outbuf[0] == NULL)
outbuf[1] = (int32_t *) buffer_alloc(TDSPEED_OUTBUFSIZE * sizeof(int32_t)); outbuf[0] = (int32_t *) buffer_alloc(TDSPEED_OUTBUFSIZE * sizeof(int32_t));
if (outbuf[1] == NULL)
outbuf[1] = (int32_t *) buffer_alloc(TDSPEED_OUTBUFSIZE * sizeof(int32_t));
}
} }
@ -327,3 +331,4 @@ int tdspeed_doit(int32_t *src[], int count)
src[1] = outbuf[1]; src[1] = outbuf[1];
return count; return count;
} }