summaryrefslogtreecommitdiff
path: root/apps/codecs/speex.c
diff options
context:
space:
mode:
authorThom Johansen <thomj@rockbox.org>2007-11-10 14:57:49 +0000
committerThom Johansen <thomj@rockbox.org>2007-11-10 14:57:49 +0000
commit1730e406ed8f1db32e9755bbfedcb192ff153cb7 (patch)
treea49cb4371cb94031126b401136451bd8103cecfd /apps/codecs/speex.c
parentec6569ed22d27eb6eb5a3902502eecc59d83de7a (diff)
downloadrockbox-1730e406ed8f1db32e9755bbfedcb192ff153cb7.tar.gz
rockbox-1730e406ed8f1db32e9755bbfedcb192ff153cb7.zip
Strip out a large unneeded portion of the Speex stereo decoding function, and port the rest of it to fixed point. Disable the unneeded stereo float decoding function. Correct the output buffer size and change some minor syntactic stuff in speex.c
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@15554 a1c6a512-1295-4272-9138-f99709370657
Diffstat (limited to 'apps/codecs/speex.c')
-rw-r--r--apps/codecs/speex.c20
1 files changed, 9 insertions, 11 deletions
diff --git a/apps/codecs/speex.c b/apps/codecs/speex.c
index 7edda4b6db..2cd547a84d 100644
--- a/apps/codecs/speex.c
+++ b/apps/codecs/speex.c
@@ -26,7 +26,8 @@
26#include "libspeex/speex/speex_config_types.h" 26#include "libspeex/speex/speex_config_types.h"
27#include "codeclib.h" 27#include "codeclib.h"
28 28
29#define MAX_FRAME_SIZE 2000 29// Room for one stereo frame of max size, 2*640
30#define MAX_FRAME_SIZE 1280
30#define CHUNKSIZE 10000 /*2kb*/ 31#define CHUNKSIZE 10000 /*2kb*/
31#define SEEK_CHUNKSIZE 7*CHUNKSIZE 32#define SEEK_CHUNKSIZE 7*CHUNKSIZE
32 33
@@ -346,7 +347,7 @@ static void *process_header(spx_ogg_packet *op,
346 speex_decoder_ctl(st, SPEEX_SET_ENH, &enh_enabled); 347 speex_decoder_ctl(st, SPEEX_SET_ENH, &enh_enabled);
347 speex_decoder_ctl(st, SPEEX_GET_FRAME_SIZE, frame_size); 348 speex_decoder_ctl(st, SPEEX_GET_FRAME_SIZE, frame_size);
348 349
349 if (!(*channels==1)){ 350 if (*channels!=1){
350 callback.callback_id = SPEEX_INBAND_STEREO; 351 callback.callback_id = SPEEX_INBAND_STEREO;
351 callback.func = speex_std_stereo_request_handler; 352 callback.func = speex_std_stereo_request_handler;
352 callback.data = stereo; 353 callback.data = stereo;
@@ -381,7 +382,8 @@ enum codec_status codec_main(void)
381 int enh_enabled = 1; 382 int enh_enabled = 1;
382 int nframes = 2; 383 int nframes = 2;
383 int eos = 0; 384 int eos = 0;
384 SpeexStereoState stereo = SPEEX_STEREO_STATE_INIT; 385 static const SpeexStereoState stereo_init = SPEEX_STEREO_STATE_INIT;
386 SpeexStereoState stereo = stereo_init;
385 int channels = -1; 387 int channels = -1;
386 int rate = 0, samplerate = 0; 388 int rate = 0, samplerate = 0;
387 int extra_headers = 0; 389 int extra_headers = 0;
@@ -531,13 +533,11 @@ next_page:
531 if (channels == 2) 533 if (channels == 2)
532 speex_decode_stereo_int(output, frame_size, &stereo); 534 speex_decode_stereo_int(output, frame_size, &stereo);
533 535
534 int new_frame_size = frame_size; 536 if (frame_size > 0) {
535 537 ci->pcmbuf_insert(output, NULL, frame_size);
536 if (new_frame_size > 0) {
537 ci->pcmbuf_insert(output, NULL, new_frame_size);
538 538
539 /* 2 bytes/sample */ 539 /* 2 bytes/sample */
540 cur_granule += new_frame_size / 2; 540 cur_granule += frame_size / 2;
541 541
542 ci->set_offset((long) ci->curpos); 542 ci->set_offset((long) ci->curpos);
543 543
@@ -566,9 +566,7 @@ done:
566 cur_granule = stream_init = rate = samplerate = headerssize 566 cur_granule = stream_init = rate = samplerate = headerssize
567 = packet_count = eos = 0; 567 = packet_count = eos = 0;
568 568
569 stereo.balance = stereo.smooth_left = stereo.smooth_right = 1; 569 stereo = stereo_init;
570 stereo.e_ratio = .5;
571 stereo.reserved1 = stereo.reserved2 = 0;
572 570
573 goto next_track; 571 goto next_track;
574 } 572 }