summaryrefslogtreecommitdiff
path: root/apps/codecs/libcook/cook.c
diff options
context:
space:
mode:
authorAndree Buschmann <AndreeBuschmann@t-online.de>2010-02-21 19:47:05 +0000
committerAndree Buschmann <AndreeBuschmann@t-online.de>2010-02-21 19:47:05 +0000
commit3d6faa08bf95da6e0f65a070a11f014e78c0b682 (patch)
treefdffd82b1972b735b5e82b1258d578f61f64b2bb /apps/codecs/libcook/cook.c
parenta31624e76e45230aa9f94b16709f86e0042bad91 (diff)
downloadrockbox-3d6faa08bf95da6e0f65a070a11f014e78c0b682.tar.gz
rockbox-3d6faa08bf95da6e0f65a070a11f014e78c0b682.zip
Optimization for cook codec. Rework sample output to be able to use highly optimized dsp routines. Moved some functions to iram. Speeds up codec by 1.3 MHz on PP5022.
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@24815 a1c6a512-1295-4272-9138-f99709370657
Diffstat (limited to 'apps/codecs/libcook/cook.c')
-rw-r--r--apps/codecs/libcook/cook.c12
1 files changed, 7 insertions, 5 deletions
diff --git a/apps/codecs/libcook/cook.c b/apps/codecs/libcook/cook.c
index 8d9611c4d9..814250ea32 100644
--- a/apps/codecs/libcook/cook.c
+++ b/apps/codecs/libcook/cook.c
@@ -598,7 +598,7 @@ decode_bytes_and_gain(COOKContext *q, const uint8_t *inbuffer,
598static void 598static void
599mlt_compensate_output(COOKContext *q, REAL_T *decode_buffer, 599mlt_compensate_output(COOKContext *q, REAL_T *decode_buffer,
600 cook_gains *gains, REAL_T *previous_buffer, 600 cook_gains *gains, REAL_T *previous_buffer,
601 int16_t *out, int chan) 601 int32_t *out, int chan)
602{ 602{
603 REAL_T *buffer = q->mono_mdct_output; 603 REAL_T *buffer = q->mono_mdct_output;
604 int i; 604 int i;
@@ -618,7 +618,9 @@ mlt_compensate_output(COOKContext *q, REAL_T *decode_buffer,
618 memcpy(previous_buffer, buffer+q->samples_per_channel, 618 memcpy(previous_buffer, buffer+q->samples_per_channel,
619 sizeof(REAL_T)*q->samples_per_channel); 619 sizeof(REAL_T)*q->samples_per_channel);
620 620
621 output_math(q, out, chan); 621 /* Copy output to non-interleaved sample buffer */
622 memcpy(out + (chan * q->samples_per_channel), buffer,
623 sizeof(REAL_T)*q->samples_per_channel);
622} 624}
623 625
624 626
@@ -634,7 +636,7 @@ mlt_compensate_output(COOKContext *q, REAL_T *decode_buffer,
634 636
635 637
636static int decode_subpacket(COOKContext *q, const uint8_t *inbuffer, 638static int decode_subpacket(COOKContext *q, const uint8_t *inbuffer,
637 int sub_packet_size, int16_t *outbuffer) { 639 int sub_packet_size, int32_t *outbuffer) {
638 /* packet dump */ 640 /* packet dump */
639// for (i=0 ; i<sub_packet_size ; i++) { 641// for (i=0 ; i<sub_packet_size ; i++) {
640// DEBUGF("%02x", inbuffer[i]); 642// DEBUGF("%02x", inbuffer[i]);
@@ -666,7 +668,7 @@ static int decode_subpacket(COOKContext *q, const uint8_t *inbuffer,
666 q->mono_previous_buffer2, outbuffer, 1); 668 q->mono_previous_buffer2, outbuffer, 1);
667 } 669 }
668 } 670 }
669 return q->samples_per_frame * sizeof(int16_t); 671 return q->samples_per_frame * sizeof(int32_t);
670} 672}
671 673
672 674
@@ -677,7 +679,7 @@ static int decode_subpacket(COOKContext *q, const uint8_t *inbuffer,
677 */ 679 */
678 680
679int cook_decode_frame(RMContext *rmctx,COOKContext *q, 681int cook_decode_frame(RMContext *rmctx,COOKContext *q,
680 int16_t *outbuffer, int *data_size, 682 int32_t *outbuffer, int *data_size,
681 const uint8_t *inbuffer, int buf_size) { 683 const uint8_t *inbuffer, int buf_size) {
682 //COOKContext *q = avctx->priv_data; 684 //COOKContext *q = avctx->priv_data;
683 //COOKContext *q; 685 //COOKContext *q;