gosu 1.4.1 → 1.4.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (80) hide show
  1. checksums.yaml +4 -4
  2. data/dependencies/SDL_sound/SDL_sound.c +21 -63
  3. data/dependencies/SDL_sound/SDL_sound.h +2 -2
  4. data/dependencies/SDL_sound/SDL_sound_aiff.c +26 -23
  5. data/dependencies/SDL_sound/SDL_sound_au.c +8 -8
  6. data/dependencies/SDL_sound/SDL_sound_coreaudio.c +4 -5
  7. data/dependencies/SDL_sound/SDL_sound_flac.c +28 -30
  8. data/dependencies/SDL_sound/SDL_sound_internal.h +4 -4
  9. data/dependencies/SDL_sound/SDL_sound_modplug.c +1 -1
  10. data/dependencies/SDL_sound/SDL_sound_mp3.c +19 -23
  11. data/dependencies/SDL_sound/SDL_sound_raw.c +5 -6
  12. data/dependencies/SDL_sound/SDL_sound_shn.c +4 -4
  13. data/dependencies/SDL_sound/SDL_sound_voc.c +15 -15
  14. data/dependencies/SDL_sound/SDL_sound_vorbis.c +14 -7
  15. data/dependencies/SDL_sound/SDL_sound_wav.c +17 -17
  16. data/dependencies/SDL_sound/dr_flac.h +10840 -4779
  17. data/dependencies/SDL_sound/dr_mp3.h +2793 -1004
  18. data/dependencies/SDL_sound/libmodplug/fastmix.c +5 -0
  19. data/dependencies/SDL_sound/libmodplug/load_669.c +1 -1
  20. data/dependencies/SDL_sound/libmodplug/load_amf.c +1 -0
  21. data/dependencies/SDL_sound/libmodplug/load_ams.c +38 -22
  22. data/dependencies/SDL_sound/libmodplug/load_it.c +18 -14
  23. data/dependencies/SDL_sound/libmodplug/load_mdl.c +18 -9
  24. data/dependencies/SDL_sound/libmodplug/load_med.c +7 -6
  25. data/dependencies/SDL_sound/libmodplug/load_mt2.c +36 -17
  26. data/dependencies/SDL_sound/libmodplug/load_okt.c +51 -24
  27. data/dependencies/SDL_sound/libmodplug/load_psm.c +4 -2
  28. data/dependencies/SDL_sound/libmodplug/load_s3m.c +4 -4
  29. data/dependencies/SDL_sound/libmodplug/load_ult.c +4 -3
  30. data/dependencies/SDL_sound/libmodplug/load_xm.c +5 -5
  31. data/dependencies/SDL_sound/libmodplug/snd_fx.c +8 -1
  32. data/dependencies/SDL_sound/libmodplug/sndfile.c +21 -4
  33. data/dependencies/SDL_sound/stb_vorbis.h +10 -18
  34. data/dependencies/mojoAL/mojoal.c +260 -6
  35. data/dependencies/stb/stb_image.h +208 -73
  36. data/dependencies/stb/stb_image_write.h +57 -23
  37. data/dependencies/stb/stb_truetype.h +345 -279
  38. data/dependencies/utf8proc/utf8proc.c +37 -18
  39. data/dependencies/utf8proc/utf8proc.h +17 -5
  40. data/dependencies/utf8proc/utf8proc_data.h +12012 -10089
  41. data/ext/gosu/extconf.rb +6 -3
  42. data/include/Gosu/Buttons.hpp +103 -103
  43. data/include/Gosu/Directories.hpp +31 -24
  44. data/include/Gosu/Font.hpp +4 -2
  45. data/include/Gosu/Gosu.hpp +5 -8
  46. data/include/Gosu/IO.hpp +0 -3
  47. data/include/Gosu/Input.hpp +7 -1
  48. data/include/Gosu/Math.hpp +0 -3
  49. data/include/Gosu/TextInput.hpp +3 -3
  50. data/include/Gosu/Timing.hpp +3 -6
  51. data/include/Gosu/Version.hpp +1 -1
  52. data/include/Gosu/Window.hpp +3 -2
  53. data/rdoc/gosu.rb +16 -2
  54. data/src/Audio.cpp +2 -2
  55. data/src/AudioFileAudioToolbox.cpp +1 -1
  56. data/src/AudioFileSDLSound.cpp +1 -1
  57. data/src/AudioImpl.cpp +0 -7
  58. data/src/AudioImpl.hpp +1 -3
  59. data/src/BitmapIO.cpp +23 -2
  60. data/src/BlockAllocator.cpp +1 -1
  61. data/src/DirectoriesApple.cpp +25 -24
  62. data/src/DirectoriesUnix.cpp +14 -12
  63. data/src/DirectoriesWin.cpp +26 -30
  64. data/src/FileUnix.cpp +1 -1
  65. data/src/FileWin.cpp +1 -1
  66. data/src/Font.cpp +13 -3
  67. data/src/Graphics.cpp +1 -1
  68. data/src/Image.cpp +10 -15
  69. data/src/Input.cpp +16 -1
  70. data/src/InputUIKit.cpp +1 -1
  71. data/src/Macro.cpp +1 -1
  72. data/src/RubyGosu.cxx +76 -34
  73. data/src/TextInput.cpp +1 -1
  74. data/src/TimingApple.cpp +2 -2
  75. data/src/TimingUnix.cpp +3 -7
  76. data/src/TimingWin.cpp +1 -2
  77. data/src/TrueTypeFont.cpp +1 -1
  78. data/src/Window.cpp +5 -4
  79. data/src/WindowUIKit.cpp +1 -1
  80. metadata +3 -3
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 0a718ab538c3905dac47347a2ab8d60e62a971757f50b7b01c8b2da66c210513
4
- data.tar.gz: 16867f7bb311a2bfed473d4eba4c4b326f27ce50fb52272864c78e6f94debb74
3
+ metadata.gz: 5f95c74e52e49585949f9d7f5c0af95bbd09ddee0738492fe8973a74a2430137
4
+ data.tar.gz: 8fbf827e6d76e83c3e67c51767538ced99470f9d578b324a8f53f045af282927
5
5
  SHA512:
6
- metadata.gz: a3498f845869aa18765265ac725af104ab1320ca4b036cf4559382ac0e87b8d79efc9cdf43ab0ba6e2ba8e14653885a1e711e9fd1684c94411ee7fdcfe9fe0fd
7
- data.tar.gz: 0d519c817a33644b2d9095a33a27814bcef61cde00a6335998a2e685740b728c952de4a7c3ff65b5145264d70d9629a6ea4541093063b570c16984f0cb560bad
6
+ metadata.gz: a75b9ac5f9bf1df4eef813199b05bc99d8645d622cb13c985331a5da70106a83641a064c186aaf0b8755a326832cb8033c77533a5bae51d3443c7dfa30681a7e
7
+ data.tar.gz: 683f1785588d95076f5878b7e8bc778393a60fbc2ed3427684d1e4bd041e600498735a1d66dba5bc4acf756cffa6637bb2ff5e2177a22bd3c9d9a5092a995459
@@ -30,12 +30,11 @@ extern const Sound_DecoderFunctions __Sound_DecoderFunctions_VOC;
30
30
  extern const Sound_DecoderFunctions __Sound_DecoderFunctions_RAW;
31
31
  extern const Sound_DecoderFunctions __Sound_DecoderFunctions_SHN;
32
32
  extern const Sound_DecoderFunctions __Sound_DecoderFunctions_FLAC;
33
- extern const Sound_DecoderFunctions __Sound_DecoderFunctions_QuickTime;
34
33
  extern const Sound_DecoderFunctions __Sound_DecoderFunctions_CoreAudio;
35
34
 
36
35
  typedef struct
37
36
  {
38
- int available;
37
+ SDL_bool available;
39
38
  const Sound_DecoderFunctions *funcs;
40
39
  } decoder_element;
41
40
 
@@ -85,17 +84,14 @@ static decoder_element decoders[] =
85
84
 
86
85
  /* General SDL_sound state ... */
87
86
 
88
- typedef struct __SOUND_ERRMSGTYPE__
87
+ static SDL_TLSID tlsid_errmsg = 0;
88
+
89
+ typedef struct
89
90
  {
90
- Uint32 tid;
91
- int error_available;
91
+ SDL_bool error_available;
92
92
  char error_string[128];
93
- struct __SOUND_ERRMSGTYPE__ *next;
94
93
  } ErrMsg;
95
94
 
96
- static ErrMsg *error_msgs = NULL;
97
- static SDL_mutex *errorlist_mutex = NULL;
98
-
99
95
  static Sound_Sample *sample_list = NULL; /* this is a linked list. */
100
96
  static SDL_mutex *samplelist_mutex = NULL;
101
97
 
@@ -124,7 +120,6 @@ int Sound_Init(void)
124
120
  BAIL_IF_MACRO(initialized, ERR_IS_INITIALIZED, 0);
125
121
 
126
122
  sample_list = NULL;
127
- error_msgs = NULL;
128
123
 
129
124
  available_decoders = (const Sound_DecoderInfo **)
130
125
  SDL_calloc(total, sizeof (Sound_DecoderInfo *));
@@ -132,7 +127,8 @@ int Sound_Init(void)
132
127
 
133
128
  SDL_InitSubSystem(SDL_INIT_AUDIO);
134
129
 
135
- errorlist_mutex = SDL_CreateMutex();
130
+ tlsid_errmsg = SDL_TLSCreate();
131
+
136
132
  samplelist_mutex = SDL_CreateMutex();
137
133
 
138
134
  for (i = 0; decoders[i].funcs != NULL; i++)
@@ -152,8 +148,6 @@ int Sound_Init(void)
152
148
 
153
149
  int Sound_Quit(void)
154
150
  {
155
- ErrMsg *err;
156
- ErrMsg *nexterr = NULL;
157
151
  size_t i;
158
152
 
159
153
  BAIL_IF_MACRO(!initialized, ERR_NOT_INITIALIZED, 0);
@@ -180,17 +174,7 @@ int Sound_Quit(void)
180
174
  SDL_free((void *) available_decoders);
181
175
  available_decoders = NULL;
182
176
 
183
- /* clean up error state for each thread... */
184
- SDL_LockMutex(errorlist_mutex);
185
- for (err = error_msgs; err != NULL; err = nexterr)
186
- {
187
- nexterr = err->next;
188
- SDL_free(err);
189
- } /* for */
190
- error_msgs = NULL;
191
- SDL_UnlockMutex(errorlist_mutex);
192
- SDL_DestroyMutex(errorlist_mutex);
193
- errorlist_mutex = NULL;
177
+ tlsid_errmsg = 0;
194
178
 
195
179
  return 1;
196
180
  } /* Sound_Quit */
@@ -204,27 +188,8 @@ const Sound_DecoderInfo **Sound_AvailableDecoders(void)
204
188
 
205
189
  static ErrMsg *findErrorForCurrentThread(void)
206
190
  {
207
- ErrMsg *i;
208
- Uint32 tid;
209
-
210
- if (error_msgs != NULL)
211
- {
212
- tid = SDL_ThreadID();
213
-
214
- SDL_LockMutex(errorlist_mutex);
215
- for (i = error_msgs; i != NULL; i = i->next)
216
- {
217
- if (i->tid == tid)
218
- {
219
- SDL_UnlockMutex(errorlist_mutex);
220
- return i;
221
- } /* if */
222
- } /* for */
223
- SDL_UnlockMutex(errorlist_mutex);
224
- } /* if */
225
-
226
- return NULL; /* no error available. */
227
- } /* findErrorForCurrentThread */
191
+ return (ErrMsg *) SDL_TLSGet(tlsid_errmsg);
192
+ }
228
193
 
229
194
 
230
195
  const char *Sound_GetError(void)
@@ -239,7 +204,7 @@ const char *Sound_GetError(void)
239
204
  if ((err != NULL) && (err->error_available))
240
205
  {
241
206
  retval = err->error_string;
242
- err->error_available = 0;
207
+ err->error_available = SDL_FALSE;
243
208
  } /* if */
244
209
 
245
210
  return retval;
@@ -248,15 +213,14 @@ const char *Sound_GetError(void)
248
213
 
249
214
  void Sound_ClearError(void)
250
215
  {
251
- ErrMsg *err;
216
+ Sound_GetError(); /* this will set error_available to SDL_FALSE */
217
+ } /* Sound_ClearError */
252
218
 
253
- if (!initialized)
254
- return;
255
219
 
256
- err = findErrorForCurrentThread();
257
- if (err != NULL)
258
- err->error_available = 0;
259
- } /* Sound_ClearError */
220
+ static void SDLCALL free_errmsg(void *errmsg)
221
+ {
222
+ SDL_free(errmsg);
223
+ } /* free_errmsg */
260
224
 
261
225
 
262
226
  /*
@@ -269,8 +233,7 @@ void __Sound_SetError(const char *str)
269
233
  if (str == NULL)
270
234
  return;
271
235
 
272
- SNDDBG(("__Sound_SetError(\"%s\");%s\n", str,
273
- (initialized) ? "" : " [NOT INITIALIZED!]"));
236
+ SNDDBG(("__Sound_SetError(\"%s\");%s\n", str, (initialized) ? "" : " [NOT INITIALIZED!]"));
274
237
 
275
238
  if (!initialized)
276
239
  return;
@@ -282,15 +245,10 @@ void __Sound_SetError(const char *str)
282
245
  if (err == NULL)
283
246
  return; /* uhh...? */
284
247
 
285
- err->tid = SDL_ThreadID();
286
-
287
- SDL_LockMutex(errorlist_mutex);
288
- err->next = error_msgs;
289
- error_msgs = err;
290
- SDL_UnlockMutex(errorlist_mutex);
248
+ SDL_TLSSet(tlsid_errmsg, err, free_errmsg);
291
249
  } /* if */
292
250
 
293
- err->error_available = 1;
251
+ err->error_available = SDL_TRUE;
294
252
  SDL_strlcpy(err->error_string, str, sizeof (err->error_string));
295
253
  } /* __Sound_SetError */
296
254
 
@@ -391,7 +349,7 @@ static int init_sample(const Sound_DecoderFunctions *funcs,
391
349
  {
392
350
  Sound_SampleInternal *internal = (Sound_SampleInternal *) sample->opaque;
393
351
  Sound_AudioInfo desired;
394
- int pos = SDL_RWtell(internal->rw);
352
+ const Sint64 pos = SDL_RWtell(internal->rw);
395
353
 
396
354
  /* fill in the funcs for this decoder... */
397
355
  sample->decoder = &funcs->info;
@@ -696,8 +696,8 @@ SNDDECLSPEC int SDLCALL Sound_Rewind(Sound_Sample *sample);
696
696
  *
697
697
  * This function can be emulated in the application with Sound_Rewind()
698
698
  * and predecoding a specific amount of the sample, but this can be
699
- * extremely inefficient. Sound_Seek() accelerates the seek on a
700
- * with decoder-specific code.
699
+ * extremely inefficient. Sound_Seek() accelerates the seek with
700
+ * decoder-specific code.
701
701
  *
702
702
  * If this function fails, the sample should continue to function as if
703
703
  * this call was never made. If there was an unrecoverable error,
@@ -38,8 +38,8 @@ typedef struct S_AIFF_FMT_T
38
38
  {
39
39
  Uint32 type;
40
40
 
41
- Uint32 total_bytes;
42
- Uint32 data_starting_offset;
41
+ Sint64 total_bytes;
42
+ Sint64 data_starting_offset;
43
43
 
44
44
  void (*free)(struct S_AIFF_FMT_T *fmt);
45
45
  Uint32 (*read_sample)(Sound_Sample *sample);
@@ -49,7 +49,7 @@ typedef struct S_AIFF_FMT_T
49
49
 
50
50
  #if 0
51
51
  /*
52
- this is ripped from wav.c as ann example of format-specific data.
52
+ this is ripped from wav.c as an example of format-specific data.
53
53
  please replace with something more appropriate when the need arises.
54
54
  */
55
55
  union
@@ -177,8 +177,7 @@ static int read_comm_chunk(SDL_RWops *rw, comm_t *comm)
177
177
  return 0;
178
178
  comm->numChannels = SDL_SwapBE16(comm->numChannels);
179
179
 
180
- if (SDL_RWread(rw, &comm->numSampleFrames,
181
- sizeof (comm->numSampleFrames), 1) != 1)
180
+ if (SDL_RWread(rw, &comm->numSampleFrames, sizeof (comm->numSampleFrames), 1) != 1)
182
181
  return 0;
183
182
  comm->numSampleFrames = SDL_SwapBE32(comm->numSampleFrames);
184
183
 
@@ -245,7 +244,7 @@ static int read_ssnd_chunk(SDL_RWops *rw, ssnd_t *ssnd)
245
244
  ssnd->blockSize = SDL_SwapBE32(ssnd->blockSize);
246
245
 
247
246
  /* Leave the SDL_RWops position indicator at the start of the samples */
248
- if (SDL_RWseek(rw, (int) ssnd->offset, RW_SEEK_CUR) == -1)
247
+ if (SDL_RWseek(rw, ssnd->offset, RW_SEEK_CUR) == -1)
249
248
  return 0;
250
249
 
251
250
  return 1;
@@ -262,8 +261,7 @@ static Uint32 read_sample_fmt_normal(Sound_Sample *sample)
262
261
  Uint32 retval;
263
262
  Sound_SampleInternal *internal = (Sound_SampleInternal *) sample->opaque;
264
263
  aiff_t *a = (aiff_t *) internal->decoder_private;
265
- Uint32 max = (internal->buffer_size < (Uint32) a->bytesLeft) ?
266
- internal->buffer_size : (Uint32) a->bytesLeft;
264
+ const Uint32 max = SDL_min(internal->buffer_size, (Uint32) a->bytesLeft);
267
265
 
268
266
  SDL_assert(max > 0);
269
267
 
@@ -301,10 +299,10 @@ static int seek_sample_fmt_normal(Sound_Sample *sample, Uint32 ms)
301
299
  {
302
300
  Sound_SampleInternal *internal = (Sound_SampleInternal *) sample->opaque;
303
301
  aiff_t *a = (aiff_t *) internal->decoder_private;
304
- fmt_t *fmt = &a->fmt;
305
- int offset = __Sound_convertMsToBytePos(&sample->actual, ms);
306
- int pos = (int) (fmt->data_starting_offset + offset);
307
- int rc = SDL_RWseek(internal->rw, pos, RW_SEEK_SET);
302
+ const fmt_t *fmt = &a->fmt;
303
+ const Uint32 offset = __Sound_convertMsToBytePos(&sample->actual, ms);
304
+ const Sint64 pos = (Sint64) (fmt->data_starting_offset + offset);
305
+ const Sint64 rc = SDL_RWseek(internal->rw, pos, RW_SEEK_SET);
308
306
  BAIL_IF_MACRO(rc != pos, ERR_IO_ERROR, 0);
309
307
  a->bytesLeft = fmt->total_bytes - offset;
310
308
  return 1; /* success. */
@@ -334,9 +332,9 @@ static int read_fmt_normal(SDL_RWops *rw, fmt_t *fmt)
334
332
  * Everything else... *
335
333
  *****************************************************************************/
336
334
 
337
- static int AIFF_init(void)
335
+ static SDL_bool AIFF_init(void)
338
336
  {
339
- return 1; /* always succeeds. */
337
+ return SDL_TRUE; /* always succeeds. */
340
338
  } /* AIFF_init */
341
339
 
342
340
 
@@ -393,8 +391,8 @@ static int AIFF_open(Sound_Sample *sample, const char *ext)
393
391
  Sound_SampleInternal *internal = (Sound_SampleInternal *) sample->opaque;
394
392
  SDL_RWops *rw = internal->rw;
395
393
  Uint32 chunk_id;
396
- int bytes_per_sample;
397
- long pos;
394
+ Uint32 bytes_per_sample;
395
+ Sint64 pos;
398
396
  comm_t c;
399
397
  ssnd_t s;
400
398
  aiff_t *a;
@@ -413,14 +411,11 @@ static int AIFF_open(Sound_Sample *sample, const char *ext)
413
411
  BAIL_IF_MACRO(!read_comm_chunk(rw, &c),
414
412
  "AIFF: Can't read common chunk.", 0);
415
413
 
414
+ BAIL_IF_MACRO(c.numChannels == 0, "AIFF: no channels specified.", 0);
415
+
416
416
  sample->actual.channels = (Uint8) c.numChannels;
417
417
  sample->actual.rate = c.sampleRate;
418
418
 
419
- /* Really, sample->total_time = (c.numSampleFrames*1000) c.sampleRate */
420
- internal->total_time = (c.numSampleFrames / c.sampleRate) * 1000;
421
- internal->total_time += (c.numSampleFrames % c.sampleRate)
422
- * 1000 / c.sampleRate;
423
-
424
419
  if (c.sampleSize <= 8)
425
420
  {
426
421
  sample->actual.format = AUDIO_S8;
@@ -461,6 +456,14 @@ static int AIFF_open(Sound_Sample *sample, const char *ext)
461
456
  BAIL_MACRO("AIFF: Can't read sound data chunk.", 0);
462
457
  } /* if */
463
458
 
459
+ if (c.numSampleFrames == 0)
460
+ c.numSampleFrames = (s.ckDataSize - 8) / bytes_per_sample;
461
+
462
+ /* Really, sample->total_time = (c.numSampleFrames*1000) c.sampleRate */
463
+ internal->total_time = (c.numSampleFrames / c.sampleRate) * 1000;
464
+ internal->total_time += (c.numSampleFrames % c.sampleRate) * 1000 / c.sampleRate;
465
+
466
+
464
467
  a->fmt.total_bytes = a->bytesLeft = bytes_per_sample * c.numSampleFrames;
465
468
  a->fmt.data_starting_offset = SDL_RWtell(rw);
466
469
  internal->decoder_private = (void *) a;
@@ -493,8 +496,8 @@ static int AIFF_rewind(Sound_Sample *sample)
493
496
  {
494
497
  Sound_SampleInternal *internal = (Sound_SampleInternal *) sample->opaque;
495
498
  aiff_t *a = (aiff_t *) internal->decoder_private;
496
- fmt_t *fmt = &a->fmt;
497
- int rc = SDL_RWseek(internal->rw, fmt->data_starting_offset, RW_SEEK_SET);
499
+ const fmt_t *fmt = &a->fmt;
500
+ const Sint64 rc = SDL_RWseek(internal->rw, fmt->data_starting_offset, RW_SEEK_SET);
498
501
  BAIL_IF_MACRO(rc != fmt->data_starting_offset, ERR_IO_ERROR, 0);
499
502
  a->bytesLeft = fmt->total_bytes;
500
503
  return fmt->rewind_sample(sample);
@@ -18,9 +18,9 @@
18
18
  #if SOUND_SUPPORTS_AU
19
19
 
20
20
  /* no init/deinit needed */
21
- static int AU_init(void)
21
+ static SDL_bool AU_init(void)
22
22
  {
23
- return 1;
23
+ return SDL_TRUE;
24
24
  } /* AU_init */
25
25
 
26
26
  static void AU_quit(void)
@@ -63,7 +63,7 @@ struct audec
63
63
  {
64
64
  Uint32 total;
65
65
  Uint32 remaining;
66
- Uint32 start_offset;
66
+ Sint64 start_offset;
67
67
  int encoding;
68
68
  };
69
69
 
@@ -297,7 +297,7 @@ static int AU_rewind(Sound_Sample *sample)
297
297
  {
298
298
  Sound_SampleInternal *internal = (Sound_SampleInternal *) sample->opaque;
299
299
  struct audec *dec = (struct audec *) internal->decoder_private;
300
- int rc = SDL_RWseek(internal->rw, dec->start_offset, RW_SEEK_SET);
300
+ const Sint64 rc = SDL_RWseek(internal->rw, dec->start_offset, RW_SEEK_SET);
301
301
  BAIL_IF_MACRO(rc != dec->start_offset, ERR_IO_ERROR, 0);
302
302
  dec->remaining = dec->total;
303
303
  return 1;
@@ -308,14 +308,14 @@ static int AU_seek(Sound_Sample *sample, Uint32 ms)
308
308
  {
309
309
  Sound_SampleInternal *internal = (Sound_SampleInternal *) sample->opaque;
310
310
  struct audec *dec = (struct audec *) internal->decoder_private;
311
- int offset = __Sound_convertMsToBytePos(&sample->actual, ms);
312
- int rc;
313
- int pos;
311
+ Sint64 offset = __Sound_convertMsToBytePos(&sample->actual, ms);
312
+ Sint64 rc;
313
+ Sint64 pos;
314
314
 
315
315
  if (dec->encoding == AU_ENC_ULAW_8)
316
316
  offset >>= 1; /* halve the byte offset for compression. */
317
317
 
318
- pos = (int) (dec->start_offset + offset);
318
+ pos = (dec->start_offset + offset);
319
319
  rc = SDL_RWseek(internal->rw, pos, RW_SEEK_SET);
320
320
  BAIL_IF_MACRO(rc != pos, ERR_IO_ERROR, 0);
321
321
  dec->remaining = dec->total - offset;
@@ -23,9 +23,9 @@ typedef struct CoreAudioFileContainer
23
23
  } CoreAudioFileContainer;
24
24
 
25
25
 
26
- static int CoreAudio_init(void)
26
+ static SDL_bool CoreAudio_init(void)
27
27
  {
28
- return 1; /* always succeeds. */
28
+ return SDL_TRUE; /* always succeeds. */
29
29
  } /* CoreAudio_init */
30
30
 
31
31
 
@@ -193,11 +193,10 @@ static const char* CoreAudio_FourCCToString(int32_t error_code)
193
193
  SInt64 CoreAudio_SizeCallback(void* inClientData)
194
194
  {
195
195
  SDL_RWops* rw_ops = (SDL_RWops*)inClientData;
196
- SInt64 current_position = SDL_RWtell(rw_ops);
197
- SInt64 end_position = SDL_RWseek(rw_ops, 0, RW_SEEK_END);
196
+ const Sint64 current_position = SDL_RWtell(rw_ops);
197
+ const Sint64 end_position = SDL_RWseek(rw_ops, 0, RW_SEEK_END);
198
198
  SDL_RWseek(rw_ops, current_position, RW_SEEK_SET);
199
199
  // fprintf(stderr, "CoreAudio_SizeCallback:%d\n", end_position);
200
-
201
200
  return end_position;
202
201
  }
203
202
 
@@ -29,17 +29,24 @@
29
29
  #define DR_FLAC_IMPLEMENTATION
30
30
  #define DR_FLAC_NO_STDIO 1
31
31
  #define DR_FLAC_NO_WIN32_IO 1
32
- #define DR_FLAC_NO_CRC 1
33
32
  #define DRFLAC_ASSERT(x) SDL_assert((x))
34
33
  #define DRFLAC_MALLOC(sz) SDL_malloc((sz))
35
34
  #define DRFLAC_REALLOC(p, sz) SDL_realloc((p), (sz))
36
35
  #define DRFLAC_FREE(p) SDL_free((p))
37
36
  #define DRFLAC_COPY_MEMORY(dst, src, sz) SDL_memcpy((dst), (src), (sz))
38
37
  #define DRFLAC_ZERO_MEMORY(p, sz) SDL_memset((p), 0, (sz))
38
+ #ifndef __WATCOMC__ /* #@!.!.. */
39
+ #if SDL_VERSION_ATLEAST(2, 0, 9)
40
+ #define exp SDL_exp
41
+ #endif
42
+ #define floor SDL_floor
43
+ #endif
44
+
39
45
  #include "dr_flac.h"
40
46
 
41
47
  static size_t flac_read(void* pUserData, void* pBufferOut, size_t bytesToRead)
42
48
  {
49
+ /* !!! FIXME: dr_flac treats returning less than bytesToRead as EOF. So we can't EAGAIN. */
43
50
  Uint8 *ptr = (Uint8 *) pBufferOut;
44
51
  Sound_Sample *sample = (Sound_Sample *) pUserData;
45
52
  Sound_SampleInternal *internal = (Sound_SampleInternal *) sample->opaque;
@@ -47,24 +54,13 @@ static size_t flac_read(void* pUserData, void* pBufferOut, size_t bytesToRead)
47
54
  size_t retval = 0;
48
55
 
49
56
  /* !!! FIXME: dr_flac treats returning less than bytesToRead as EOF. So we can't EAGAIN. */
50
- while (retval < bytesToRead)
57
+ while (bytesToRead)
51
58
  {
52
59
  const size_t rc = SDL_RWread(rwops, ptr, 1, bytesToRead);
53
- if (rc == 0)
54
- {
55
- sample->flags |= SOUND_SAMPLEFLAG_EOF;
56
- break;
57
- } /* if */
58
- else if (rc == -1) /** FIXME: this error check is broken **/
59
- {
60
- sample->flags |= SOUND_SAMPLEFLAG_ERROR;
61
- break;
62
- } /* else if */
63
- else
64
- {
65
- retval += rc;
66
- ptr += rc;
67
- } /* else */
60
+ if (rc == 0) break;
61
+ bytesToRead -= rc;
62
+ retval += rc;
63
+ ptr += rc;
68
64
  } /* while */
69
65
 
70
66
  return retval;
@@ -79,9 +75,9 @@ static drflac_bool32 flac_seek(void* pUserData, int offset, drflac_seek_origin o
79
75
  } /* flac_seek */
80
76
 
81
77
 
82
- static int FLAC_init(void)
78
+ static SDL_bool FLAC_init(void)
83
79
  {
84
- return 1; /* always succeeds. */
80
+ return SDL_TRUE; /* always succeeds. */
85
81
  } /* FLAC_init */
86
82
 
87
83
 
@@ -94,7 +90,7 @@ static void FLAC_quit(void)
94
90
  static int FLAC_open(Sound_Sample *sample, const char *ext)
95
91
  {
96
92
  Sound_SampleInternal *internal = (Sound_SampleInternal *) sample->opaque;
97
- drflac *dr = drflac_open(flac_read, flac_seek, sample);
93
+ drflac *dr = drflac_open(flac_read, flac_seek, sample, NULL);
98
94
 
99
95
  if (!dr)
100
96
  {
@@ -109,14 +105,14 @@ static int FLAC_open(Sound_Sample *sample, const char *ext)
109
105
  sample->actual.rate = dr->sampleRate;
110
106
  sample->actual.format = AUDIO_S32SYS; /* dr_flac only does Sint32. */
111
107
 
112
- if (dr->totalSampleCount == 0)
108
+ if (dr->totalPCMFrameCount == 0)
113
109
  internal->total_time = -1;
114
110
  else
115
111
  {
116
112
  const Uint32 rate = (Uint32) dr->sampleRate;
117
- const Uint64 frames = (Uint64) (dr->totalSampleCount / dr->channels);
113
+ const Uint64 frames = (Uint64) dr->totalPCMFrameCount;
118
114
  internal->total_time = (frames / rate) * 1000;
119
- internal->total_time += ((dr->totalSampleCount % dr->sampleRate) * 1000) / dr->sampleRate;
115
+ internal->total_time += ((dr->totalPCMFrameCount % dr->sampleRate) * 1000) / dr->sampleRate;
120
116
  } /* else */
121
117
 
122
118
  internal->decoder_private = dr;
@@ -134,17 +130,21 @@ static void FLAC_close(Sound_Sample *sample)
134
130
  static Uint32 FLAC_read(Sound_Sample *sample)
135
131
  {
136
132
  Sound_SampleInternal *internal = (Sound_SampleInternal *) sample->opaque;
133
+ const int channels = (int) sample->actual.channels;
137
134
  drflac *dr = (drflac *) internal->decoder_private;
138
- const drflac_uint64 rc = drflac_read_s32(dr, internal->buffer_size / sizeof (drflac_int32), (drflac_int32 *) internal->buffer);
139
- /* !!! FIXME: the flac_read callback sets ERROR and EOF flags, but this only tells you about i/o errors, not corruption. */
140
- return rc * sizeof (drflac_int32);
135
+ const drflac_uint64 frames_to_read = (internal->buffer_size / channels) / sizeof (drflac_int32);
136
+ const drflac_uint64 rc = drflac_read_pcm_frames_s32(dr, frames_to_read, (drflac_int32 *) internal->buffer);
137
+ /* !!! FIXME: we only set the EOF flags, but this only tells you we're done, not about i/o errors, nor corruption. */
138
+ if (rc < frames_to_read)
139
+ sample->flags |= SOUND_SAMPLEFLAG_EOF;
140
+ return rc * channels * sizeof (drflac_int32);
141
141
  } /* FLAC_read */
142
142
 
143
143
  static int FLAC_rewind(Sound_Sample *sample)
144
144
  {
145
145
  Sound_SampleInternal *internal = (Sound_SampleInternal *) sample->opaque;
146
146
  drflac *dr = (drflac *) internal->decoder_private;
147
- return (drflac_seek_to_sample(dr, 0) == DRFLAC_TRUE);
147
+ return (drflac_seek_to_pcm_frame(dr, 0) == DRFLAC_TRUE);
148
148
  } /* FLAC_rewind */
149
149
 
150
150
  static int FLAC_seek(Sound_Sample *sample, Uint32 ms)
@@ -153,8 +153,7 @@ static int FLAC_seek(Sound_Sample *sample, Uint32 ms)
153
153
  drflac *dr = (drflac *) internal->decoder_private;
154
154
  const float frames_per_ms = ((float) sample->actual.rate) / 1000.0f;
155
155
  const drflac_uint64 frame_offset = (drflac_uint64) (frames_per_ms * ((float) ms));
156
- const drflac_uint64 sampnum = frame_offset * sample->actual.channels;
157
- return (drflac_seek_to_sample(dr, sampnum) == DRFLAC_TRUE);
156
+ return (drflac_seek_to_pcm_frame(dr, frame_offset) == DRFLAC_TRUE);
158
157
  } /* FLAC_seek */
159
158
 
160
159
  static const char *extensions_flac[] = { "FLAC", "FLA", NULL };
@@ -179,4 +178,3 @@ const Sound_DecoderFunctions __Sound_DecoderFunctions_FLAC =
179
178
  #endif /* SOUND_SUPPORTS_FLAC */
180
179
 
181
180
  /* end of SDL_sound_flac.c ... */
182
-
@@ -97,16 +97,16 @@ typedef struct __SOUND_DECODERFUNCTIONS__
97
97
  * set up any global state that your decoder needs, such as
98
98
  * initializing an external library, etc.
99
99
  *
100
- * Return non-zero if initialization is successful, zero if there's
101
- * a fatal error. If this method fails, then this decoder is
102
- * flagged as unavailable until SDL_sound() is shut down and
100
+ * Return SDL_TRUE if initialization is successful, SDL_FALSE if
101
+ * there's a fatal error. If this method fails, then this decoder
102
+ * is flagged as unavailable until SDL_sound() is shut down and
103
103
  * reinitialized, in which case this method will be tried again.
104
104
  *
105
105
  * Note that the decoders quit() method won't be called if this
106
106
  * method fails, so if you can't intialize, you'll have to clean
107
107
  * up the half-initialized state in this method.
108
108
  */
109
- int (*init)(void);
109
+ SDL_bool (*init)(void);
110
110
 
111
111
  /*
112
112
  * This is called during the Sound_Quit() function. Use this to
@@ -56,7 +56,7 @@ static const char *extensions_modplug[] =
56
56
 
57
57
 
58
58
 
59
- static int MODPLUG_init(void)
59
+ static SDL_bool MODPLUG_init(void)
60
60
  {
61
61
  return ModPlug_Init(); /* success. */
62
62
  } /* MODPLUG_init */
@@ -20,7 +20,6 @@
20
20
  #if SOUND_SUPPORTS_MP3
21
21
 
22
22
  #define DR_MP3_IMPLEMENTATION
23
-
24
23
  #define DR_MP3_NO_STDIO 1
25
24
  #define DR_MP3_FLOAT_OUTPUT 1
26
25
  #define DRMP3_ASSERT(x) SDL_assert((x))
@@ -30,6 +29,12 @@
30
29
  #define DRMP3_COPY_MEMORY(dst, src, sz) SDL_memcpy((dst), (src), (sz))
31
30
  #define DRMP3_MOVE_MEMORY(dst, src, sz) SDL_memmove((dst), (src), (sz))
32
31
  #define DRMP3_ZERO_MEMORY(p, sz) SDL_memset((p), 0, (sz))
32
+ #ifndef __WATCOMC__ /* #@!.!.. */
33
+ #if SDL_VERSION_ATLEAST(2, 0, 9)
34
+ #define exp SDL_exp
35
+ #endif
36
+ #define floor SDL_floor
37
+ #endif
33
38
 
34
39
  #include "dr_mp3.h"
35
40
 
@@ -42,24 +47,13 @@ static size_t mp3_read(void* pUserData, void* pBufferOut, size_t bytesToRead)
42
47
  size_t retval = 0;
43
48
 
44
49
  /* !!! FIXME: dr_mp3 treats returning less than bytesToRead as EOF. So we can't EAGAIN. */
45
- while (retval < bytesToRead)
50
+ while (bytesToRead)
46
51
  {
47
52
  const size_t rc = SDL_RWread(rwops, ptr, 1, bytesToRead);
48
- if (rc == 0)
49
- {
50
- sample->flags |= SOUND_SAMPLEFLAG_EOF;
51
- break;
52
- } /* if */
53
- else if (rc == -1) /** FIXME: this error check is broken **/
54
- {
55
- sample->flags |= SOUND_SAMPLEFLAG_ERROR;
56
- break;
57
- } /* else if */
58
- else
59
- {
60
- retval += rc;
61
- ptr += rc;
62
- } /* else */
53
+ if (rc == 0) break;
54
+ bytesToRead -= rc;
55
+ retval += rc;
56
+ ptr += rc;
63
57
  } /* while */
64
58
 
65
59
  return retval;
@@ -74,9 +68,9 @@ static drmp3_bool32 mp3_seek(void* pUserData, int offset, drmp3_seek_origin orig
74
68
  } /* mp3_seek */
75
69
 
76
70
 
77
- static int MP3_init(void)
71
+ static SDL_bool MP3_init(void)
78
72
  {
79
- return 1; /* always succeeds. */
73
+ return SDL_TRUE; /* always succeeds. */
80
74
  } /* MP3_init */
81
75
 
82
76
 
@@ -125,8 +119,10 @@ static Uint32 MP3_read(Sound_Sample *sample)
125
119
  const int channels = (int) sample->actual.channels;
126
120
  drmp3 *dr = (drmp3 *) internal->decoder_private;
127
121
  const drmp3_uint64 frames_to_read = (internal->buffer_size / channels) / sizeof (float);
128
- const drmp3_uint64 rc = drmp3_read_f32(dr, frames_to_read, (float *) internal->buffer);
129
- /* !!! FIXME: the mp3_read callback sets ERROR and EOF flags, but this only tells you about i/o errors, not corruption. */
122
+ const drmp3_uint64 rc = drmp3_read_pcm_frames_f32(dr, frames_to_read, (float *) internal->buffer);
123
+ /* !!! FIXME: we only set the EOF flags, but this only tells you we're done, not about i/o errors, nor corruption. */
124
+ if (rc < frames_to_read)
125
+ sample->flags |= SOUND_SAMPLEFLAG_EOF;
130
126
  return rc * channels * sizeof (float);
131
127
  } /* MP3_read */
132
128
 
@@ -134,7 +130,7 @@ static int MP3_rewind(Sound_Sample *sample)
134
130
  {
135
131
  Sound_SampleInternal *internal = (Sound_SampleInternal *) sample->opaque;
136
132
  drmp3 *dr = (drmp3 *) internal->decoder_private;
137
- return (drmp3_seek_to_frame(dr, 0) == DRMP3_TRUE);
133
+ return (drmp3_seek_to_pcm_frame(dr, 0) == DRMP3_TRUE);
138
134
  } /* MP3_rewind */
139
135
 
140
136
  static int MP3_seek(Sound_Sample *sample, Uint32 ms)
@@ -143,7 +139,7 @@ static int MP3_seek(Sound_Sample *sample, Uint32 ms)
143
139
  drmp3 *dr = (drmp3 *) internal->decoder_private;
144
140
  const float frames_per_ms = ((float) sample->actual.rate) / 1000.0f;
145
141
  const drmp3_uint64 frame_offset = (drmp3_uint64) (frames_per_ms * ((float) ms));
146
- return (drmp3_seek_to_frame(dr, frame_offset) == DRMP3_TRUE);
142
+ return (drmp3_seek_to_pcm_frame(dr, frame_offset) == DRMP3_TRUE);
147
143
  } /* MP3_seek */
148
144
 
149
145
  /* dr_mp3 will play layer 1 and 2 files, too */