output/ao: use const_cast instead of the union hack
This commit is contained in:
parent
cbe59714d4
commit
30d5186db4
@ -182,23 +182,6 @@ ao_output_open(AudioOutput *ao, AudioFormat &audio_format)
|
|||||||
throw MakeAoError();
|
throw MakeAoError();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* For whatever reason, libao wants a non-const pointer. Let's hope
|
|
||||||
* it does not write to the buffer, and use the union deconst hack to
|
|
||||||
* work around this API misdesign.
|
|
||||||
*/
|
|
||||||
static int ao_play_deconst(ao_device *device, const void *output_samples,
|
|
||||||
uint_32 num_bytes)
|
|
||||||
{
|
|
||||||
union {
|
|
||||||
const void *in;
|
|
||||||
char *out;
|
|
||||||
} u;
|
|
||||||
|
|
||||||
u.in = output_samples;
|
|
||||||
return ao_play(device, u.out, num_bytes);
|
|
||||||
}
|
|
||||||
|
|
||||||
static size_t
|
static size_t
|
||||||
ao_output_play(AudioOutput *ao, const void *chunk, size_t size)
|
ao_output_play(AudioOutput *ao, const void *chunk, size_t size)
|
||||||
{
|
{
|
||||||
@ -207,7 +190,12 @@ ao_output_play(AudioOutput *ao, const void *chunk, size_t size)
|
|||||||
if (size > ad->write_size)
|
if (size > ad->write_size)
|
||||||
size = ad->write_size;
|
size = ad->write_size;
|
||||||
|
|
||||||
if (ao_play_deconst(ad->device, chunk, size) == 0)
|
/* For whatever reason, libao wants a non-const pointer.
|
||||||
|
Let's hope it does not write to the buffer, and use the
|
||||||
|
union deconst hack to * work around this API misdesign. */
|
||||||
|
char *data = const_cast<char *>((const char *)chunk);
|
||||||
|
|
||||||
|
if (ao_play(ad->device, data, size) == 0)
|
||||||
throw MakeAoError();
|
throw MakeAoError();
|
||||||
|
|
||||||
return size;
|
return size;
|
||||||
|
Loading…
Reference in New Issue
Block a user