aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorandroid-build-team Robot <android-build-team-robot@google.com>2018-09-10 23:21:12 +0000
committerandroid-build-team Robot <android-build-team-robot@google.com>2018-09-10 23:21:12 +0000
commitbfd2f37dd457d5b884437dee475c992b06ec208a (patch)
tree1b5e785e573346187a5c6fbd7649f46bcd70f498
parent9dba1d7f7f7122d9828510a1abcfaff2c6e20ada (diff)
parentcafff8f4535c8bf933c5a2fcb1a0dd66fb75a1c2 (diff)
downloadtremolo-pie-qpr1-s1-release.tar.gz
Merge cherrypicks of [4986743, 4986744, 4987539, 4987168, 4986376, 4986377, 4986378, 4986889, 4986745, 4986746, 4986747, 4986748, 4986749, 4986750, 4986773, 4987169, 4987170, 4987611, 4987631, 4987632, 4987633, 4987634, 4986890, 4987612, 4987651, 4987598, 4987613, 4987614, 4987615, 4987599, 4986379, 4986380, 4987652, 4987653, 4987691, 4986774] into pi-qpr1-releaseandroid-9.0.0_r30android-9.0.0_r22android-9.0.0_r21android-9.0.0_r20android-9.0.0_r19android-9.0.0_r16pie-qpr1-s3-releasepie-qpr1-s2-releasepie-qpr1-s1-releasepie-qpr1-release
Change-Id: I2cbcb5828e10f50d1214402bb8782cfca6786bd8
-rw-r--r--Tremolo/floor0.c76
1 files changed, 41 insertions, 35 deletions
diff --git a/Tremolo/floor0.c b/Tremolo/floor0.c
index 581efcb..b6ece29 100644
--- a/Tremolo/floor0.c
+++ b/Tremolo/floor0.c
@@ -38,6 +38,7 @@
#include <stdlib.h>
#include <string.h>
#include <math.h>
+#include <log/log.h>
#include "ogg.h"
#include "ivorbiscodec.h"
#include "codec_internal.h"
@@ -89,7 +90,7 @@ static inline ogg_int32_t vorbis_coslook_i(long a){
int i=a>>COS_LOOKUP_I_SHIFT;
int d=a&COS_LOOKUP_I_MASK;
return COS_LOOKUP_I[i]- ((d*(COS_LOOKUP_I[i]-COS_LOOKUP_I[i+1]))>>
- COS_LOOKUP_I_SHIFT);
+ COS_LOOKUP_I_SHIFT);
}
/* interpolated half-wave lookup based cos function */
@@ -98,7 +99,7 @@ static inline ogg_int32_t vorbis_coslook2_i(long a){
int i=a>>COS_LOOKUP_I_SHIFT;
int d=a&COS_LOOKUP_I_MASK;
return ((COS_LOOKUP_I[i]<<COS_LOOKUP_I_SHIFT)-
- d*(COS_LOOKUP_I[i]-COS_LOOKUP_I[i+1]))>>
+ d*(COS_LOOKUP_I[i]-COS_LOOKUP_I[i+1]))>>
(COS_LOOKUP_I_SHIFT-LSP_FRACBITS+14);
}
@@ -122,7 +123,7 @@ static inline ogg_int32_t toBARK(int n){
return 54<<14;
}else{
return (i<<14)+(((n-barklook[i])*
- ((1UL<<31)/(barklook[i+1]-barklook[i])))>>17);
+ ((1UL<<31)/(barklook[i+1]-barklook[i])))>>17);
}
}
@@ -143,10 +144,10 @@ static const unsigned char MLOOP_2[64]={
static const unsigned char MLOOP_3[8]={0,1,2,2,3,3,3,3};
void vorbis_lsp_to_curve(ogg_int32_t *curve,int n,int ln,
- ogg_int32_t *lsp,int m,
- ogg_int32_t amp,
- ogg_int32_t ampoffset,
- ogg_int32_t nyq){
+ ogg_int32_t *lsp,int m,
+ ogg_int32_t amp,
+ ogg_int32_t ampoffset,
+ ogg_int32_t nyq){
/* 0 <= m < 256 */
@@ -174,7 +175,7 @@ void vorbis_lsp_to_curve(ogg_int32_t *curve,int n,int ln,
ogg_uint32_t nextbark=MULT31(imap>>1,tBnyq1);
#endif
int nextf=barklook[nextbark>>14]+(((nextbark&0x3fff)*
- (barklook[(nextbark>>14)+1]-barklook[nextbark>>14]))>>14);
+ (barklook[(nextbark>>14)+1]-barklook[nextbark>>14]))>>14);
/* lsp is in 8.24, range 0 to PI; coslook wants it in .16 0 to 1*/
for(i=0;i<m;i++){
@@ -235,8 +236,8 @@ void vorbis_lsp_to_curve(ogg_int32_t *curve,int n,int ln,
for(j=3;j<m;j+=2){
if(!(shift=MLOOP_1[(pi|qi)>>25]))
- if(!(shift=MLOOP_2[(pi|qi)>>19]))
- shift=MLOOP_3[(pi|qi)>>16];
+ 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);
@@ -244,7 +245,7 @@ void vorbis_lsp_to_curve(ogg_int32_t *curve,int n,int ln,
}
if(!(shift=MLOOP_1[(pi|qi)>>25]))
if(!(shift=MLOOP_2[(pi|qi)>>19]))
- shift=MLOOP_3[(pi|qi)>>16];
+ shift=MLOOP_3[(pi|qi)>>16];
/* pi,qi normalized collectively, both tracked using qexp */
@@ -256,8 +257,8 @@ void vorbis_lsp_to_curve(ogg_int32_t *curve,int n,int ln,
qexp+=shift;
if(!(shift=MLOOP_1[(pi|qi)>>25]))
- if(!(shift=MLOOP_2[(pi|qi)>>19]))
- shift=MLOOP_3[(pi|qi)>>16];
+ if(!(shift=MLOOP_2[(pi|qi)>>19]))
+ shift=MLOOP_3[(pi|qi)>>16];
pi>>=shift;
qi>>=shift;
@@ -274,7 +275,7 @@ void vorbis_lsp_to_curve(ogg_int32_t *curve,int n,int ln,
/* even order filter; still symmetric */
/* p*=p(1-w), q*=q(1+w), let normalization drift because it isn't
- worth tracking step by step */
+ worth tracking step by step */
pi>>=shift;
qi>>=shift;
@@ -299,15 +300,15 @@ void vorbis_lsp_to_curve(ogg_int32_t *curve,int n,int ln,
qi>>=1; qexp++;
}else
while(qi && !(qi&0x8000)){ /* checks for 0.0xxxxxxxxxxxxxxx or less*/
- qi<<=1; qexp--;
+ qi<<=1; qexp--;
}
#endif
amp=vorbis_fromdBlook_i(ampi* /* n.4 */
- vorbis_invsqlook_i(qi,qexp)-
- /* m.8, m+n<=8 */
- ampoffseti); /* 8.12[0] */
+ vorbis_invsqlook_i(qi,qexp)-
+ /* m.8, m+n<=8 */
+ ampoffseti); /* 8.12[0] */
#ifdef _LOW_ACCURACY_
amp>>=9;
@@ -319,8 +320,8 @@ void vorbis_lsp_to_curve(ogg_int32_t *curve,int n,int ln,
/* line plot to get new f */
ferr+=fdy;
if(ferr>=fdx){
- ferr-=fdx;
- f++;
+ ferr-=fdx;
+ f++;
}
f+=fbase;
@@ -335,18 +336,18 @@ void vorbis_lsp_to_curve(ogg_int32_t *curve,int n,int ln,
if(map+1<ln){
#ifdef _LOW_ACCURACY_
- nextbark=((tBnyq1<<11)/ln*(map+1))>>12;
+ nextbark=((tBnyq1<<11)/ln*(map+1))>>12;
#else
- nextbark=MULT31((map+1)*(imap>>1),tBnyq1);
+ nextbark=MULT31((map+1)*(imap>>1),tBnyq1);
#endif
- nextf=barklook[nextbark>>14]+
- (((nextbark&0x3fff)*
- (barklook[(nextbark>>14)+1]-barklook[nextbark>>14]))>>14);
- if(f<=nextf)break;
+ nextf=barklook[nextbark>>14]+
+ (((nextbark&0x3fff)*
+ (barklook[(nextbark>>14)+1]-barklook[nextbark>>14]))>>14);
+ if(f<=nextf)break;
}else{
- nextf=9999999;
- break;
+ nextf=9999999;
+ break;
}
}
if(map>=ln){
@@ -398,7 +399,7 @@ int floor0_memosize(vorbis_info_floor *i){
}
ogg_int32_t *floor0_inverse1(vorbis_dsp_state *vd,vorbis_info_floor *i,
- ogg_int32_t *lsp){
+ ogg_int32_t *lsp){
vorbis_info_floor0 *info=(vorbis_info_floor0 *)i;
int j,k;
@@ -411,13 +412,18 @@ ogg_int32_t *floor0_inverse1(vorbis_dsp_state *vd,vorbis_info_floor *i,
if(booknum!=-1 && booknum<info->numbooks){ /* be paranoid */
codec_setup_info *ci=(codec_setup_info *)vd->vi->codec_setup;
codebook *b=ci->book_param+info->books[booknum];
+ int sz = floor0_memosize(i);
+ if (sz < b->dim) {
+ ALOGE("lsp too small: %d < %ld", sz, b->dim);
+ return NULL;
+ }
ogg_int32_t last=0;
for(j=0;j<info->order;j+=b->dim)
- if(vorbis_book_decodev_set(b,lsp+j,&vd->opb,b->dim,-24)==-1)goto eop;
+ if(vorbis_book_decodev_set(b,lsp+j,&vd->opb,b->dim,-24)==-1)goto eop;
for(j=0;j<info->order;){
- for(k=0;k<b->dim;k++,j++)lsp[j]+=last;
- last=lsp[j-1];
+ for(k=0;k<b->dim;k++,j++)lsp[j]+=last;
+ last=lsp[j-1];
}
lsp[info->order]=amp;
@@ -429,7 +435,7 @@ ogg_int32_t *floor0_inverse1(vorbis_dsp_state *vd,vorbis_info_floor *i,
}
int floor0_inverse2(vorbis_dsp_state *vd,vorbis_info_floor *i,
- ogg_int32_t *lsp,ogg_int32_t *out){
+ ogg_int32_t *lsp,ogg_int32_t *out){
vorbis_info_floor0 *info=(vorbis_info_floor0 *)i;
codec_setup_info *ci=(codec_setup_info *)vd->vi->codec_setup;
@@ -438,8 +444,8 @@ int floor0_inverse2(vorbis_dsp_state *vd,vorbis_info_floor *i,
/* take the coefficients back to a spectral envelope curve */
vorbis_lsp_to_curve(out,ci->blocksizes[vd->W]/2,info->barkmap,
- lsp,info->order,amp,info->ampdB,
- info->rate>>1);
+ lsp,info->order,amp,info->ampdB,
+ info->rate>>1);
return(1);
}
memset(out,0,sizeof(*out)*ci->blocksizes[vd->W]/2);