Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Sign in / Register
Toggle navigation
M
miniaudio
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Locked Files
Issues
0
Issues
0
List
Boards
Labels
Service Desk
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Security & Compliance
Security & Compliance
Dependency List
License Compliance
Packages
Packages
List
Container Registry
Analytics
Analytics
CI / CD
Code Review
Insights
Issues
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
MyCard
miniaudio
Commits
80b9fa63
Commit
80b9fa63
authored
May 15, 2022
by
David Reid
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Update stb_vorbis.
Pubic issue
https://github.com/mackron/miniaudio/issues/469
parent
772970ff
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
64 additions
and
49 deletions
+64
-49
extras/stb_vorbis.c
extras/stb_vorbis.c
+64
-49
No files found.
extras/stb_vorbis.c
View file @
80b9fa63
// Ogg Vorbis audio decoder - v1.2
1
- public domain
// Ogg Vorbis audio decoder - v1.2
2
- public domain
// http://nothings.org/stb_vorbis/
// http://nothings.org/stb_vorbis/
//
//
// Original version written by Sean Barrett in 2007.
// Original version written by Sean Barrett in 2007.
...
@@ -29,13 +29,14 @@
...
@@ -29,13 +29,14 @@
// Bernhard Wodo Evan Balster github:alxprd
// Bernhard Wodo Evan Balster github:alxprd
// Tom Beaumont Ingo Leitgeb Nicolas Guillemot
// Tom Beaumont Ingo Leitgeb Nicolas Guillemot
// Phillip Bennefall Rohit Thiago Goulart
// Phillip Bennefall Rohit Thiago Goulart
// github:manxorist
saga m
usix github:infatum
// github:manxorist
Saga M
usix github:infatum
// Timur Gagiev Maxwell Koo Peter Waller
// Timur Gagiev Maxwell Koo Peter Waller
// github:audinowho Dougall Johnson David Reid
// github:audinowho Dougall Johnson David Reid
// github:Clownacy Pedro J. Estebanez Remi Verschelde
// github:Clownacy Pedro J. Estebanez Remi Verschelde
// AnthoFoxo
// AnthoFoxo
github:morlat Gabriel Ravier
//
//
// Partial history:
// Partial history:
// 1.22 - 2021-07-11 - various small fixes
// 1.21 - 2021-07-02 - fix bug for files with no comments
// 1.21 - 2021-07-02 - fix bug for files with no comments
// 1.20 - 2020-07-11 - several small fixes
// 1.20 - 2020-07-11 - several small fixes
// 1.19 - 2020-02-05 - warnings
// 1.19 - 2020-02-05 - warnings
...
@@ -222,6 +223,12 @@ extern int stb_vorbis_decode_frame_pushdata(
...
@@ -222,6 +223,12 @@ extern int stb_vorbis_decode_frame_pushdata(
// channel. In other words, (*output)[0][0] contains the first sample from
// channel. In other words, (*output)[0][0] contains the first sample from
// the first channel, and (*output)[1][0] contains the first sample from
// the first channel, and (*output)[1][0] contains the first sample from
// the second channel.
// the second channel.
//
// *output points into stb_vorbis's internal output buffer storage; these
// buffers are owned by stb_vorbis and application code should not free
// them or modify their contents. They are transient and will be overwritten
// once you ask for more data to get decoded, so be sure to grab any data
// you need before then.
extern
void
stb_vorbis_flush_pushdata
(
stb_vorbis
*
f
);
extern
void
stb_vorbis_flush_pushdata
(
stb_vorbis
*
f
);
// inform stb_vorbis that your next datablock will not be contiguous with
// inform stb_vorbis that your next datablock will not be contiguous with
...
@@ -581,7 +588,7 @@ enum STBVorbisError
...
@@ -581,7 +588,7 @@ enum STBVorbisError
#if defined(_MSC_VER) || defined(__MINGW32__)
#if defined(_MSC_VER) || defined(__MINGW32__)
#include <malloc.h>
#include <malloc.h>
#endif
#endif
#if defined(__linux__) || defined(__linux) || defined(__EMSCRIPTEN__) || defined(__NEWLIB__)
#if defined(__linux__) || defined(__linux) || defined(__
sun__) || defined(__
EMSCRIPTEN__) || defined(__NEWLIB__)
#include <alloca.h>
#include <alloca.h>
#endif
#endif
#else // STB_VORBIS_NO_CRT
#else // STB_VORBIS_NO_CRT
...
@@ -648,6 +655,12 @@ typedef signed int int32;
...
@@ -648,6 +655,12 @@ typedef signed int int32;
typedef
float
codetype
;
typedef
float
codetype
;
#ifdef _MSC_VER
#define STBV_NOTUSED(v) (void)(v)
#else
#define STBV_NOTUSED(v) (void)sizeof(v)
#endif
// @NOTE
// @NOTE
//
//
// Some arrays below are tagged "//varies", which means it's actually
// Some arrays below are tagged "//varies", which means it's actually
...
@@ -1048,7 +1061,7 @@ static float float32_unpack(uint32 x)
...
@@ -1048,7 +1061,7 @@ static float float32_unpack(uint32 x)
uint32
sign
=
x
&
0x80000000
;
uint32
sign
=
x
&
0x80000000
;
uint32
exp
=
(
x
&
0x7fe00000
)
>>
21
;
uint32
exp
=
(
x
&
0x7fe00000
)
>>
21
;
double
res
=
sign
?
-
(
double
)
mantissa
:
(
double
)
mantissa
;
double
res
=
sign
?
-
(
double
)
mantissa
:
(
double
)
mantissa
;
return
(
float
)
ldexp
((
float
)
res
,
exp
-
788
);
return
(
float
)
ldexp
((
float
)
res
,
(
int
)
exp
-
788
);
}
}
...
@@ -1079,6 +1092,7 @@ static int compute_codewords(Codebook *c, uint8 *len, int n, uint32 *values)
...
@@ -1079,6 +1092,7 @@ static int compute_codewords(Codebook *c, uint8 *len, int n, uint32 *values)
// find the first entry
// find the first entry
for
(
k
=
0
;
k
<
n
;
++
k
)
if
(
len
[
k
]
<
NO_CODE
)
break
;
for
(
k
=
0
;
k
<
n
;
++
k
)
if
(
len
[
k
]
<
NO_CODE
)
break
;
if
(
k
==
n
)
{
assert
(
c
->
sorted_entries
==
0
);
return
TRUE
;
}
if
(
k
==
n
)
{
assert
(
c
->
sorted_entries
==
0
);
return
TRUE
;
}
assert
(
len
[
k
]
<
32
);
// no error return required, code reading lens checks this
// add to the list
// add to the list
add_entry
(
c
,
0
,
k
,
m
++
,
len
[
k
],
values
);
add_entry
(
c
,
0
,
k
,
m
++
,
len
[
k
],
values
);
// add all available leaves
// add all available leaves
...
@@ -1092,6 +1106,7 @@ static int compute_codewords(Codebook *c, uint8 *len, int n, uint32 *values)
...
@@ -1092,6 +1106,7 @@ static int compute_codewords(Codebook *c, uint8 *len, int n, uint32 *values)
uint32
res
;
uint32
res
;
int
z
=
len
[
i
],
y
;
int
z
=
len
[
i
],
y
;
if
(
z
==
NO_CODE
)
continue
;
if
(
z
==
NO_CODE
)
continue
;
assert
(
z
<
32
);
// no error return required, code reading lens checks this
// find lowest available leaf (should always be earliest,
// find lowest available leaf (should always be earliest,
// which is what the specification calls for)
// which is what the specification calls for)
// note that this property, and the fact we can never have
// note that this property, and the fact we can never have
...
@@ -1101,12 +1116,10 @@ static int compute_codewords(Codebook *c, uint8 *len, int n, uint32 *values)
...
@@ -1101,12 +1116,10 @@ static int compute_codewords(Codebook *c, uint8 *len, int n, uint32 *values)
while
(
z
>
0
&&
!
available
[
z
])
--
z
;
while
(
z
>
0
&&
!
available
[
z
])
--
z
;
if
(
z
==
0
)
{
return
FALSE
;
}
if
(
z
==
0
)
{
return
FALSE
;
}
res
=
available
[
z
];
res
=
available
[
z
];
assert
(
z
>=
0
&&
z
<
32
);
available
[
z
]
=
0
;
available
[
z
]
=
0
;
add_entry
(
c
,
bit_reverse
(
res
),
i
,
m
++
,
len
[
i
],
values
);
add_entry
(
c
,
bit_reverse
(
res
),
i
,
m
++
,
len
[
i
],
values
);
// propagate availability up the tree
// propagate availability up the tree
if
(
z
!=
len
[
i
])
{
if
(
z
!=
len
[
i
])
{
assert
(
len
[
i
]
>=
0
&&
len
[
i
]
<
32
);
for
(
y
=
len
[
i
];
y
>
z
;
--
y
)
{
for
(
y
=
len
[
i
];
y
>
z
;
--
y
)
{
assert
(
available
[
y
]
==
0
);
assert
(
available
[
y
]
==
0
);
available
[
y
]
=
res
+
(
1
<<
(
32
-
y
));
available
[
y
]
=
res
+
(
1
<<
(
32
-
y
));
...
@@ -2579,34 +2592,33 @@ static void imdct_step3_inner_s_loop_ld654(int n, float *e, int i_off, float *A,
...
@@ -2579,34 +2592,33 @@ static void imdct_step3_inner_s_loop_ld654(int n, float *e, int i_off, float *A,
while
(
z
>
base
)
{
while
(
z
>
base
)
{
float
k00
,
k11
;
float
k00
,
k11
;
float
l00
,
l11
;
k00
=
z
[
-
0
]
-
z
[
-
8
];
k
11
=
z
[
-
1
]
-
z
[
-
9
];
k
00
=
z
[
-
0
]
-
z
[
-
8
];
z
[
-
0
]
=
z
[
-
0
]
+
z
[
-
8
];
k11
=
z
[
-
1
]
-
z
[
-
9
];
z
[
-
1
]
=
z
[
-
1
]
+
z
[
-
9
];
l00
=
z
[
-
2
]
-
z
[
-
10
];
z
[
-
8
]
=
k00
;
l11
=
z
[
-
3
]
-
z
[
-
11
]
;
z
[
-
9
]
=
k11
;
z
[
-
0
]
=
z
[
-
0
]
+
z
[
-
8
]
;
z
[
-
1
]
=
z
[
-
1
]
+
z
[
-
9
];
k00
=
z
[
-
2
]
-
z
[
-
10
];
z
[
-
2
]
=
z
[
-
2
]
+
z
[
-
10
];
k11
=
z
[
-
3
]
-
z
[
-
11
];
z
[
-
3
]
=
z
[
-
3
]
+
z
[
-
11
];
z
[
-
2
]
=
z
[
-
2
]
+
z
[
-
10
]
;
z
[
-
8
]
=
k00
;
z
[
-
3
]
=
z
[
-
3
]
+
z
[
-
11
]
;
z
[
-
9
]
=
k11
;
z
[
-
10
]
=
(
k00
+
k
11
)
*
A2
;
z
[
-
10
]
=
(
l00
+
l
11
)
*
A2
;
z
[
-
11
]
=
(
k11
-
k
00
)
*
A2
;
z
[
-
11
]
=
(
l11
-
l
00
)
*
A2
;
k00
=
z
[
-
12
]
-
z
[
-
4
];
// reverse to avoid a unary negation
k00
=
z
[
-
4
]
-
z
[
-
12
];
k11
=
z
[
-
5
]
-
z
[
-
13
];
k11
=
z
[
-
5
]
-
z
[
-
13
];
l00
=
z
[
-
6
]
-
z
[
-
14
];
l11
=
z
[
-
7
]
-
z
[
-
15
];
z
[
-
4
]
=
z
[
-
4
]
+
z
[
-
12
];
z
[
-
4
]
=
z
[
-
4
]
+
z
[
-
12
];
z
[
-
5
]
=
z
[
-
5
]
+
z
[
-
13
];
z
[
-
5
]
=
z
[
-
5
]
+
z
[
-
13
];
z
[
-
12
]
=
k11
;
z
[
-
13
]
=
k00
;
k00
=
z
[
-
14
]
-
z
[
-
6
];
// reverse to avoid a unary negation
k11
=
z
[
-
7
]
-
z
[
-
15
];
z
[
-
6
]
=
z
[
-
6
]
+
z
[
-
14
];
z
[
-
6
]
=
z
[
-
6
]
+
z
[
-
14
];
z
[
-
7
]
=
z
[
-
7
]
+
z
[
-
15
];
z
[
-
7
]
=
z
[
-
7
]
+
z
[
-
15
];
z
[
-
14
]
=
(
k00
+
k11
)
*
A2
;
z
[
-
12
]
=
k11
;
z
[
-
15
]
=
(
k00
-
k11
)
*
A2
;
z
[
-
13
]
=
-
k00
;
z
[
-
14
]
=
(
l11
-
l00
)
*
A2
;
z
[
-
15
]
=
(
l00
+
l11
)
*
-
A2
;
iter_54
(
z
);
iter_54
(
z
);
iter_54
(
z
-
8
);
iter_54
(
z
-
8
);
...
@@ -3071,6 +3083,7 @@ static int do_floor(vorb *f, Mapping *map, int i, int n, float *target, YTYPE *f
...
@@ -3071,6 +3083,7 @@ static int do_floor(vorb *f, Mapping *map, int i, int n, float *target, YTYPE *f
for
(
q
=
1
;
q
<
g
->
values
;
++
q
)
{
for
(
q
=
1
;
q
<
g
->
values
;
++
q
)
{
j
=
g
->
sorted_order
[
q
];
j
=
g
->
sorted_order
[
q
];
#ifndef STB_VORBIS_NO_DEFER_FLOOR
#ifndef STB_VORBIS_NO_DEFER_FLOOR
STBV_NOTUSED
(
step2_flag
);
if
(
finalY
[
j
]
>=
0
)
if
(
finalY
[
j
]
>=
0
)
#else
#else
if
(
step2_flag
[
j
])
if
(
step2_flag
[
j
])
...
@@ -3173,6 +3186,7 @@ static int vorbis_decode_packet_rest(vorb *f, int *len, Mode *m, int left_start,
...
@@ -3173,6 +3186,7 @@ static int vorbis_decode_packet_rest(vorb *f, int *len, Mode *m, int left_start,
// WINDOWING
// WINDOWING
STBV_NOTUSED
(
left_end
);
n
=
f
->
blocksize
[
m
->
blockflag
];
n
=
f
->
blocksize
[
m
->
blockflag
];
map
=
&
f
->
mapping
[
m
->
mapping
];
map
=
&
f
->
mapping
[
m
->
mapping
];
...
@@ -3370,7 +3384,7 @@ static int vorbis_decode_packet_rest(vorb *f, int *len, Mode *m, int left_start,
...
@@ -3370,7 +3384,7 @@ static int vorbis_decode_packet_rest(vorb *f, int *len, Mode *m, int left_start,
// this isn't to spec, but spec would require us to read ahead
// this isn't to spec, but spec would require us to read ahead
// and decode the size of all current frames--could be done,
// and decode the size of all current frames--could be done,
// but presumably it's not a commonly used feature
// but presumably it's not a commonly used feature
f
->
current_loc
=
-
n2
;
// start of first frame is positioned for discard
f
->
current_loc
=
0u
-
n2
;
// start of first frame is positioned for discard (NB this is an intentional unsigned overflow/wrap-around)
// we might have to discard samples "from" the next frame too,
// we might have to discard samples "from" the next frame too,
// if we're lapping a large block then a small at the start?
// if we're lapping a large block then a small at the start?
f
->
discard_samples_deferred
=
n
-
right_end
;
f
->
discard_samples_deferred
=
n
-
right_end
;
...
@@ -3871,8 +3885,7 @@ static int start_decoder(vorb *f)
...
@@ -3871,8 +3885,7 @@ static int start_decoder(vorb *f)
unsigned
int
div
=
1
;
unsigned
int
div
=
1
;
for
(
k
=
0
;
k
<
c
->
dimensions
;
++
k
)
{
for
(
k
=
0
;
k
<
c
->
dimensions
;
++
k
)
{
int
off
=
(
z
/
div
)
%
c
->
lookup_values
;
int
off
=
(
z
/
div
)
%
c
->
lookup_values
;
float
val
=
mults
[
off
];
float
val
=
mults
[
off
]
*
c
->
delta_value
+
c
->
minimum_value
+
last
;
val
=
mults
[
off
]
*
c
->
delta_value
+
c
->
minimum_value
+
last
;
c
->
multiplicands
[
j
*
c
->
dimensions
+
k
]
=
val
;
c
->
multiplicands
[
j
*
c
->
dimensions
+
k
]
=
val
;
if
(
c
->
sequence_p
)
if
(
c
->
sequence_p
)
last
=
val
;
last
=
val
;
...
@@ -3955,7 +3968,7 @@ static int start_decoder(vorb *f)
...
@@ -3955,7 +3968,7 @@ static int start_decoder(vorb *f)
if
(
g
->
class_masterbooks
[
j
]
>=
f
->
codebook_count
)
return
error
(
f
,
VORBIS_invalid_setup
);
if
(
g
->
class_masterbooks
[
j
]
>=
f
->
codebook_count
)
return
error
(
f
,
VORBIS_invalid_setup
);
}
}
for
(
k
=
0
;
k
<
1
<<
g
->
class_subclasses
[
j
];
++
k
)
{
for
(
k
=
0
;
k
<
1
<<
g
->
class_subclasses
[
j
];
++
k
)
{
g
->
subclass_books
[
j
][
k
]
=
get_bits
(
f
,
8
)
-
1
;
g
->
subclass_books
[
j
][
k
]
=
(
int16
)
get_bits
(
f
,
8
)
-
1
;
if
(
g
->
subclass_books
[
j
][
k
]
>=
f
->
codebook_count
)
return
error
(
f
,
VORBIS_invalid_setup
);
if
(
g
->
subclass_books
[
j
][
k
]
>=
f
->
codebook_count
)
return
error
(
f
,
VORBIS_invalid_setup
);
}
}
}
}
...
@@ -4513,6 +4526,7 @@ stb_vorbis *stb_vorbis_open_pushdata(
...
@@ -4513,6 +4526,7 @@ stb_vorbis *stb_vorbis_open_pushdata(
*
error
=
VORBIS_need_more_data
;
*
error
=
VORBIS_need_more_data
;
else
else
*
error
=
p
.
error
;
*
error
=
p
.
error
;
vorbis_deinit
(
&
p
);
return
NULL
;
return
NULL
;
}
}
f
=
vorbis_alloc
(
&
p
);
f
=
vorbis_alloc
(
&
p
);
...
@@ -4570,7 +4584,7 @@ static uint32 vorbis_find_page(stb_vorbis *f, uint32 *end, uint32 *last)
...
@@ -4570,7 +4584,7 @@ static uint32 vorbis_find_page(stb_vorbis *f, uint32 *end, uint32 *last)
header
[
i
]
=
get8
(
f
);
header
[
i
]
=
get8
(
f
);
if
(
f
->
eof
)
return
0
;
if
(
f
->
eof
)
return
0
;
if
(
header
[
4
]
!=
0
)
goto
invalid
;
if
(
header
[
4
]
!=
0
)
goto
invalid
;
goal
=
header
[
22
]
+
(
header
[
23
]
<<
8
)
+
(
header
[
24
]
<<
16
)
+
(
header
[
25
]
<<
24
);
goal
=
header
[
22
]
+
(
header
[
23
]
<<
8
)
+
(
header
[
24
]
<<
16
)
+
(
(
uint32
)
header
[
25
]
<<
24
);
for
(
i
=
22
;
i
<
26
;
++
i
)
for
(
i
=
22
;
i
<
26
;
++
i
)
header
[
i
]
=
0
;
header
[
i
]
=
0
;
crc
=
0
;
crc
=
0
;
...
@@ -4974,7 +4988,7 @@ unsigned int stb_vorbis_stream_length_in_samples(stb_vorbis *f)
...
@@ -4974,7 +4988,7 @@ unsigned int stb_vorbis_stream_length_in_samples(stb_vorbis *f)
// set. whoops!
// set. whoops!
break
;
break
;
}
}
previous_safe
=
last_page_loc
+
1
;
//previous_safe = last_page_loc+1; // NOTE: not used after this point, but note for debugging
last_page_loc
=
stb_vorbis_get_file_offset
(
f
);
last_page_loc
=
stb_vorbis_get_file_offset
(
f
);
}
}
...
@@ -5085,7 +5099,10 @@ stb_vorbis * stb_vorbis_open_filename(const char *filename, int *error, const st
...
@@ -5085,7 +5099,10 @@ stb_vorbis * stb_vorbis_open_filename(const char *filename, int *error, const st
stb_vorbis
*
stb_vorbis_open_memory
(
const
unsigned
char
*
data
,
int
len
,
int
*
error
,
const
stb_vorbis_alloc
*
alloc
)
stb_vorbis
*
stb_vorbis_open_memory
(
const
unsigned
char
*
data
,
int
len
,
int
*
error
,
const
stb_vorbis_alloc
*
alloc
)
{
{
stb_vorbis
*
f
,
p
;
stb_vorbis
*
f
,
p
;
if
(
data
==
NULL
)
return
NULL
;
if
(
!
data
)
{
if
(
error
)
*
error
=
VORBIS_unexpected_eof
;
return
NULL
;
}
vorbis_init
(
&
p
,
alloc
);
vorbis_init
(
&
p
,
alloc
);
p
.
stream
=
(
uint8
*
)
data
;
p
.
stream
=
(
uint8
*
)
data
;
p
.
stream_end
=
(
uint8
*
)
data
+
len
;
p
.
stream_end
=
(
uint8
*
)
data
+
len
;
...
@@ -5160,11 +5177,11 @@ static void copy_samples(short *dest, float *src, int len)
...
@@ -5160,11 +5177,11 @@ static void copy_samples(short *dest, float *src, int len)
static
void
compute_samples
(
int
mask
,
short
*
output
,
int
num_c
,
float
**
data
,
int
d_offset
,
int
len
)
static
void
compute_samples
(
int
mask
,
short
*
output
,
int
num_c
,
float
**
data
,
int
d_offset
,
int
len
)
{
{
#define BUFFER_SIZE 32
#define
STB_
BUFFER_SIZE 32
float
buffer
[
BUFFER_SIZE
];
float
buffer
[
STB_
BUFFER_SIZE
];
int
i
,
j
,
o
,
n
=
BUFFER_SIZE
;
int
i
,
j
,
o
,
n
=
STB_
BUFFER_SIZE
;
check_endianness
();
check_endianness
();
for
(
o
=
0
;
o
<
len
;
o
+=
BUFFER_SIZE
)
{
for
(
o
=
0
;
o
<
len
;
o
+=
STB_
BUFFER_SIZE
)
{
memset
(
buffer
,
0
,
sizeof
(
buffer
));
memset
(
buffer
,
0
,
sizeof
(
buffer
));
if
(
o
+
n
>
len
)
n
=
len
-
o
;
if
(
o
+
n
>
len
)
n
=
len
-
o
;
for
(
j
=
0
;
j
<
num_c
;
++
j
)
{
for
(
j
=
0
;
j
<
num_c
;
++
j
)
{
...
@@ -5181,16 +5198,17 @@ static void compute_samples(int mask, short *output, int num_c, float **data, in
...
@@ -5181,16 +5198,17 @@ static void compute_samples(int mask, short *output, int num_c, float **data, in
output
[
o
+
i
]
=
v
;
output
[
o
+
i
]
=
v
;
}
}
}
}
#undef STB_BUFFER_SIZE
}
}
static
void
compute_stereo_samples
(
short
*
output
,
int
num_c
,
float
**
data
,
int
d_offset
,
int
len
)
static
void
compute_stereo_samples
(
short
*
output
,
int
num_c
,
float
**
data
,
int
d_offset
,
int
len
)
{
{
#define BUFFER_SIZE 32
#define
STB_
BUFFER_SIZE 32
float
buffer
[
BUFFER_SIZE
];
float
buffer
[
STB_
BUFFER_SIZE
];
int
i
,
j
,
o
,
n
=
BUFFER_SIZE
>>
1
;
int
i
,
j
,
o
,
n
=
STB_
BUFFER_SIZE
>>
1
;
// o is the offset in the source data
// o is the offset in the source data
check_endianness
();
check_endianness
();
for
(
o
=
0
;
o
<
len
;
o
+=
BUFFER_SIZE
>>
1
)
{
for
(
o
=
0
;
o
<
len
;
o
+=
STB_
BUFFER_SIZE
>>
1
)
{
// o2 is the offset in the output data
// o2 is the offset in the output data
int
o2
=
o
<<
1
;
int
o2
=
o
<<
1
;
memset
(
buffer
,
0
,
sizeof
(
buffer
));
memset
(
buffer
,
0
,
sizeof
(
buffer
));
...
@@ -5220,6 +5238,7 @@ static void compute_stereo_samples(short *output, int num_c, float **data, int d
...
@@ -5220,6 +5238,7 @@ static void compute_stereo_samples(short *output, int num_c, float **data, int d
output
[
o2
+
i
]
=
v
;
output
[
o2
+
i
]
=
v
;
}
}
}
}
#undef STB_BUFFER_SIZE
}
}
static
void
convert_samples_short
(
int
buf_c
,
short
**
buffer
,
int
b_offset
,
int
data_c
,
float
**
data
,
int
d_offset
,
int
samples
)
static
void
convert_samples_short
(
int
buf_c
,
short
**
buffer
,
int
b_offset
,
int
data_c
,
float
**
data
,
int
d_offset
,
int
samples
)
...
@@ -5292,8 +5311,6 @@ int stb_vorbis_get_samples_short_interleaved(stb_vorbis *f, int channels, short
...
@@ -5292,8 +5311,6 @@ int stb_vorbis_get_samples_short_interleaved(stb_vorbis *f, int channels, short
float
**
outputs
;
float
**
outputs
;
int
len
=
num_shorts
/
channels
;
int
len
=
num_shorts
/
channels
;
int
n
=
0
;
int
n
=
0
;
int
z
=
f
->
channels
;
if
(
z
>
channels
)
z
=
channels
;
while
(
n
<
len
)
{
while
(
n
<
len
)
{
int
k
=
f
->
channel_buffer_end
-
f
->
channel_buffer_start
;
int
k
=
f
->
channel_buffer_end
-
f
->
channel_buffer_start
;
if
(
n
+
k
>=
len
)
k
=
len
-
n
;
if
(
n
+
k
>=
len
)
k
=
len
-
n
;
...
@@ -5312,8 +5329,6 @@ int stb_vorbis_get_samples_short(stb_vorbis *f, int channels, short **buffer, in
...
@@ -5312,8 +5329,6 @@ int stb_vorbis_get_samples_short(stb_vorbis *f, int channels, short **buffer, in
{
{
float
**
outputs
;
float
**
outputs
;
int
n
=
0
;
int
n
=
0
;
int
z
=
f
->
channels
;
if
(
z
>
channels
)
z
=
channels
;
while
(
n
<
len
)
{
while
(
n
<
len
)
{
int
k
=
f
->
channel_buffer_end
-
f
->
channel_buffer_start
;
int
k
=
f
->
channel_buffer_end
-
f
->
channel_buffer_start
;
if
(
n
+
k
>=
len
)
k
=
len
-
n
;
if
(
n
+
k
>=
len
)
k
=
len
-
n
;
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment