ref: 32ada84b5b5a147c38c428fb0863d419dd802b37
parent: 122971b8cc0ab46f0ab85927f109f89606800c3c
author: Jean-Marc Valin <[email protected]>
date: Tue Dec 10 11:41:44 EST 2013
Fixes code that was doing arithmetic on a void pointer. Thanks to Kevin O'Connor for reporting this.
--- a/src/opus_encoder.c
+++ b/src/opus_encoder.c
@@ -649,7 +649,7 @@
return best_state;
}
-int optimize_framesize(const opus_val16 *x, int len, int C, opus_int32 Fs,
+static int optimize_framesize(const void *x, int len, int C, opus_int32 Fs,
int bitrate, opus_val16 tonality, float *mem, int buffering,
downmix_func downmix)
{
@@ -661,6 +661,7 @@
int bestLM=0;
int subframe;
int pos;
+ int offset;
VARDECL(opus_val32, sub);
subframe = Fs/400;
@@ -671,9 +672,8 @@
{
/* Consider the CELT delay when not in restricted-lowdelay */
/* We assume the buffering is between 2.5 and 5 ms */
- int offset = 2*subframe - buffering;
+ offset = 2*subframe - buffering;
celt_assert(offset>=0 && offset <= subframe);
- x += C*offset;
len -= offset;
e[1]=mem[1];
e_1[1]=1.f/(EPSILON+mem[1]);
@@ -682,6 +682,7 @@
pos = 3;
} else {
pos=1;
+ offset=0;
}
N=IMIN(len/subframe, MAX_DYNAMIC_FRAMESIZE);
/* Just silencing a warning, it's really initialized later */
@@ -693,7 +694,7 @@
int j;
tmp=EPSILON;
- downmix(x, sub, subframe, i*subframe, 0, -2, C);
+ downmix(x, sub, subframe, i*subframe+offset, 0, -2, C);
if (i==0)
memx = sub[0];
for (j=0;j<subframe;j++)
--- a/src/opus_private.h
+++ b/src/opus_private.h
@@ -86,10 +86,6 @@
void downmix_float(const void *_x, opus_val32 *sub, int subframe, int offset, int c1, int c2, int C);
void downmix_int(const void *_x, opus_val32 *sub, int subframe, int offset, int c1, int c2, int C);
-int optimize_framesize(const opus_val16 *x, int len, int C, opus_int32 Fs,
- int bitrate, opus_val16 tonality, float *mem, int buffering,
- downmix_func downmix);
-
int encode_size(int size, unsigned char *data);
opus_int32 frame_size_select(opus_int32 frame_size, int variable_duration, opus_int32 Fs);