Fix memory issues in Projection API.
Modified by Jean-Marc Valin Signed-off-by: Jean-Marc Valin <jmvalin@jmvalin.ca>
This commit is contained in:
parent
eee6898242
commit
65f11d326d
8 changed files with 456 additions and 330 deletions
|
@ -61,15 +61,6 @@ static const VorbisLayout vorbis_mappings[8] = {
|
|||
{5, 3, {0, 6, 1, 2, 3, 4, 5, 7}}, /* 8: 7.1 surround */
|
||||
};
|
||||
|
||||
typedef void (*opus_copy_channel_in_func)(
|
||||
opus_val16 *dst,
|
||||
int dst_stride,
|
||||
const void *src,
|
||||
int src_stride,
|
||||
int src_channel,
|
||||
int frame_size
|
||||
);
|
||||
|
||||
static opus_val32 *ms_get_preemph_mem(OpusMSEncoder *st)
|
||||
{
|
||||
int s;
|
||||
|
@ -274,7 +265,7 @@ void surround_analysis(const CELTMode *celt_mode, const void *pcm, opus_val16 *b
|
|||
int nb_frames = frame_size/freq_size;
|
||||
celt_assert(nb_frames*freq_size == frame_size);
|
||||
OPUS_COPY(in, mem+c*overlap, overlap);
|
||||
(*copy_channel_in)(x, 1, pcm, channels, c, len);
|
||||
(*copy_channel_in)(x, 1, pcm, channels, c, len, NULL);
|
||||
celt_preemphasis(x, in+overlap, frame_size, 1, upsample, celt_mode->preemph, preemph_mem+c, 0);
|
||||
#ifndef FIXED_POINT
|
||||
{
|
||||
|
@ -862,7 +853,7 @@ static opus_int32 rate_allocation(
|
|||
|
||||
/* Max size in case the encoder decides to return six frames (6 x 20 ms = 120 ms) */
|
||||
#define MS_FRAME_TMP (6*1275+12)
|
||||
static int opus_multistream_encode_native
|
||||
int opus_multistream_encode_native
|
||||
(
|
||||
OpusMSEncoder *st,
|
||||
opus_copy_channel_in_func copy_channel_in,
|
||||
|
@ -872,7 +863,8 @@ static int opus_multistream_encode_native
|
|||
opus_int32 max_data_bytes,
|
||||
int lsb_depth,
|
||||
downmix_func downmix,
|
||||
int float_api
|
||||
int float_api,
|
||||
void *user_data
|
||||
)
|
||||
{
|
||||
opus_int32 Fs;
|
||||
|
@ -1006,9 +998,9 @@ static int opus_multistream_encode_native
|
|||
left = get_left_channel(&st->layout, s, -1);
|
||||
right = get_right_channel(&st->layout, s, -1);
|
||||
(*copy_channel_in)(buf, 2,
|
||||
pcm, st->layout.nb_channels, left, frame_size);
|
||||
pcm, st->layout.nb_channels, left, frame_size, user_data);
|
||||
(*copy_channel_in)(buf+1, 2,
|
||||
pcm, st->layout.nb_channels, right, frame_size);
|
||||
pcm, st->layout.nb_channels, right, frame_size, user_data);
|
||||
ptr += align(coupled_size);
|
||||
if (st->mapping_type == MAPPING_TYPE_SURROUND)
|
||||
{
|
||||
|
@ -1024,7 +1016,7 @@ static int opus_multistream_encode_native
|
|||
int i;
|
||||
int chan = get_mono_channel(&st->layout, s, -1);
|
||||
(*copy_channel_in)(buf, 1,
|
||||
pcm, st->layout.nb_channels, chan, frame_size);
|
||||
pcm, st->layout.nb_channels, chan, frame_size, user_data);
|
||||
ptr += align(mono_size);
|
||||
if (st->mapping_type == MAPPING_TYPE_SURROUND)
|
||||
{
|
||||
|
@ -1083,11 +1075,13 @@ static void opus_copy_channel_in_float(
|
|||
const void *src,
|
||||
int src_stride,
|
||||
int src_channel,
|
||||
int frame_size
|
||||
int frame_size,
|
||||
void *user_data
|
||||
)
|
||||
{
|
||||
const float *float_src;
|
||||
opus_int32 i;
|
||||
(void)user_data;
|
||||
float_src = (const float *)src;
|
||||
for (i=0;i<frame_size;i++)
|
||||
#if defined(FIXED_POINT)
|
||||
|
@ -1104,11 +1098,13 @@ static void opus_copy_channel_in_short(
|
|||
const void *src,
|
||||
int src_stride,
|
||||
int src_channel,
|
||||
int frame_size
|
||||
int frame_size,
|
||||
void *user_data
|
||||
)
|
||||
{
|
||||
const opus_int16 *short_src;
|
||||
opus_int32 i;
|
||||
(void)user_data;
|
||||
short_src = (const opus_int16 *)src;
|
||||
for (i=0;i<frame_size;i++)
|
||||
#if defined(FIXED_POINT)
|
||||
|
@ -1129,7 +1125,7 @@ int opus_multistream_encode(
|
|||
)
|
||||
{
|
||||
return opus_multistream_encode_native(st, opus_copy_channel_in_short,
|
||||
pcm, frame_size, data, max_data_bytes, 16, downmix_int, 0);
|
||||
pcm, frame_size, data, max_data_bytes, 16, downmix_int, 0, NULL);
|
||||
}
|
||||
|
||||
#ifndef DISABLE_FLOAT_API
|
||||
|
@ -1142,7 +1138,7 @@ int opus_multistream_encode_float(
|
|||
)
|
||||
{
|
||||
return opus_multistream_encode_native(st, opus_copy_channel_in_float,
|
||||
pcm, frame_size, data, max_data_bytes, 16, downmix_float, 1);
|
||||
pcm, frame_size, data, max_data_bytes, 16, downmix_float, 1, NULL);
|
||||
}
|
||||
#endif
|
||||
|
||||
|
@ -1158,7 +1154,7 @@ int opus_multistream_encode_float
|
|||
)
|
||||
{
|
||||
return opus_multistream_encode_native(st, opus_copy_channel_in_float,
|
||||
pcm, frame_size, data, max_data_bytes, 24, downmix_float, 1);
|
||||
pcm, frame_size, data, max_data_bytes, 24, downmix_float, 1, NULL);
|
||||
}
|
||||
|
||||
int opus_multistream_encode(
|
||||
|
@ -1170,7 +1166,7 @@ int opus_multistream_encode(
|
|||
)
|
||||
{
|
||||
return opus_multistream_encode_native(st, opus_copy_channel_in_short,
|
||||
pcm, frame_size, data, max_data_bytes, 16, downmix_int, 0);
|
||||
pcm, frame_size, data, max_data_bytes, 16, downmix_int, 0, NULL);
|
||||
}
|
||||
#endif
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue