From 7484fd3b18c7cf0f48f171cca40c29ec762c8310 Mon Sep 17 00:00:00 2001 From: Nils Wallménius Date: Wed, 8 Dec 2010 16:44:08 +0000 Subject: libtremor: merge upstream revision 17538 'Fix decoder handling of floor0 when the LSP order is 1.' git-svn-id: svn://svn.rockbox.org/rockbox/trunk@28770 a1c6a512-1295-4272-9138-f99709370657 --- apps/codecs/libtremor/asm_arm.h | 10 ++++++---- apps/codecs/libtremor/floor0.c | 23 +++++++++++++---------- 2 files changed, 19 insertions(+), 14 deletions(-) diff --git a/apps/codecs/libtremor/asm_arm.h b/apps/codecs/libtremor/asm_arm.h index 6f38efcd4b..9531f21657 100644 --- a/apps/codecs/libtremor/asm_arm.h +++ b/apps/codecs/libtremor/asm_arm.h @@ -249,8 +249,9 @@ static inline void lsp_loop_asm(ogg_uint32_t *qip,ogg_uint32_t *pip, ogg_int32_t qexp=*qexpp; asm("mov r0,%3;" - "mov r1,%5,asr#1;" + "movs r1,%5,asr#1;" "add r0,r0,r1,lsl#3;" + "beq 2f;\n" "1:" "ldmdb r0!,{r1,r3};" @@ -273,9 +274,10 @@ static inline void lsp_loop_asm(ogg_uint32_t *qip,ogg_uint32_t *pip, "cmp r0,%3;\n" "bhi 1b;\n" + "2:" // odd filter assymetry "ands r0,%5,#1;\n" - "beq 2f;\n" + "beq 3f;\n" "add r0,%3,%5,lsl#2;\n" "ldr r1,[r0,#-4];\n" @@ -287,7 +289,7 @@ static inline void lsp_loop_asm(ogg_uint32_t *qip,ogg_uint32_t *pip, "umull %1,r3,r0,%1;\n" //pi*=labs(ilsp[j+1]-wi) "cmn r2,r3;\n" // shift down 16? - "beq 2f;\n" + "beq 3f;\n" "add %2,%2,#16;\n" "mov %0,%0,lsr #16;\n" "orr %0,%0,r2,lsl #16;\n" @@ -301,7 +303,7 @@ static inline void lsp_loop_asm(ogg_uint32_t *qip,ogg_uint32_t *pip, //} /* normalize to max 16 sig figs */ - "2:" + "3:" "mov r2,#0;" "orr r1,%0,%1;" "tst r1,#0xff000000;" diff --git a/apps/codecs/libtremor/floor0.c b/apps/codecs/libtremor/floor0.c index 5062450748..075bc36ef7 100644 --- a/apps/codecs/libtremor/floor0.c +++ b/apps/codecs/libtremor/floor0.c @@ -200,16 +200,19 @@ static void vorbis_lsp_to_curve(ogg_int32_t *curve,int *map,int n,int ln, #else - qi*=labs(ilsp[0]-wi); - pi*=labs(ilsp[1]-wi); - - for(j=3;j>25])) - if(!(shift=MLOOP_2[(pi|qi)>>19])) - shift=MLOOP_3[(pi|qi)>>16]; - qi=(qi>>shift)*labs(ilsp[j-1]-wi); - pi=(pi>>shift)*labs(ilsp[j]-wi); - qexp+=shift; + j=1; + if(m>1){ + qi*=labs(ilsp[0]-wi); + pi*=labs(ilsp[1]-wi); + + for(j+=2;j>25])) + if(!(shift=MLOOP_2[(pi|qi)>>19])) + shift=MLOOP_3[(pi|qi)>>16]; + qi=(qi>>shift)*labs(ilsp[j-1]-wi); + pi=(pi>>shift)*labs(ilsp[j]-wi); + qexp+=shift; + } } if(!(shift=MLOOP_1[(pi|qi)>>25])) if(!(shift=MLOOP_2[(pi|qi)>>19])) -- cgit v1.2.3