Mercurial > sdl-ios-xcode
comparison src/audio/sdlgenaudiocvt.pl @ 4889:8c9cbb623d55
Fixed crashing loading 48KHz audio, contributed by Terry Welsh
author | Sam Lantinga <slouken@libsdl.org> |
---|---|
date | Sat, 18 Sep 2010 18:15:08 -0700 |
parents | bfa8d34ce03a |
children | b530ef003506 |
comparison
equal
deleted
inserted
replaced
4887:0a77d2fc95ad | 4889:8c9cbb623d55 |
---|---|
36 sub outputHeader { | 36 sub outputHeader { |
37 print <<EOF; | 37 print <<EOF; |
38 /* DO NOT EDIT! This file is generated by sdlgenaudiocvt.pl */ | 38 /* DO NOT EDIT! This file is generated by sdlgenaudiocvt.pl */ |
39 /* | 39 /* |
40 SDL - Simple DirectMedia Layer | 40 SDL - Simple DirectMedia Layer |
41 Copyright (C) 1997-2009 Sam Lantinga | 41 Copyright (C) 1997-2010 Sam Lantinga |
42 | 42 |
43 This library is free software; you can redistribute it and/or | 43 This library is free software; you can redistribute it and/or |
44 modify it under the terms of the GNU Lesser General Public | 44 modify it under the terms of the GNU Lesser General Public |
45 License as published by the Free Software Foundation; either | 45 License as published by the Free Software Foundation; either |
46 version 2.1 of the License, or (at your option) any later version. | 46 version 2.1 of the License, or (at your option) any later version. |
398 const int srcsize = cvt->len_cvt - $fudge; | 398 const int srcsize = cvt->len_cvt - $fudge; |
399 const int dstsize = (int) (((double)cvt->len_cvt) * cvt->rate_incr); | 399 const int dstsize = (int) (((double)cvt->len_cvt) * cvt->rate_incr); |
400 register int eps = 0; | 400 register int eps = 0; |
401 EOF | 401 EOF |
402 | 402 |
403 my $endcomparison = '!='; | |
404 | |
403 # Upsampling (growing the buffer) needs to work backwards, since we | 405 # Upsampling (growing the buffer) needs to work backwards, since we |
404 # overwrite the buffer as we go. | 406 # overwrite the buffer as we go. |
405 if ($upsample) { | 407 if ($upsample) { |
408 $endcomparison = '>'; # dst > target | |
406 print <<EOF; | 409 print <<EOF; |
407 $fctype *dst = (($fctype *) (cvt->buf + dstsize)) - $channels; | 410 $fctype *dst = (($fctype *) (cvt->buf + dstsize)) - $channels; |
408 const $fctype *src = (($fctype *) (cvt->buf + cvt->len_cvt)) - $channels; | 411 const $fctype *src = (($fctype *) (cvt->buf + cvt->len_cvt)) - $channels; |
409 const $fctype *target = ((const $fctype *) cvt->buf) - $channels; | 412 const $fctype *target = ((const $fctype *) cvt->buf) - $channels; |
410 EOF | 413 EOF |
411 } else { | 414 } else { |
415 $endcomparison = '<'; # dst < target | |
412 print <<EOF; | 416 print <<EOF; |
413 $fctype *dst = ($fctype *) cvt->buf; | 417 $fctype *dst = ($fctype *) cvt->buf; |
414 const $fctype *src = ($fctype *) cvt->buf; | 418 const $fctype *src = ($fctype *) cvt->buf; |
415 const $fctype *target = (const $fctype *) (cvt->buf + dstsize); | 419 const $fctype *target = (const $fctype *) (cvt->buf + dstsize); |
416 EOF | 420 EOF |
430 $fctype last_sample${idx} = sample${idx}; | 434 $fctype last_sample${idx} = sample${idx}; |
431 EOF | 435 EOF |
432 } | 436 } |
433 | 437 |
434 print <<EOF; | 438 print <<EOF; |
435 while (dst != target) { | 439 while (dst $endcomparison target) { |
436 EOF | 440 EOF |
437 | 441 |
438 if ($upsample) { | 442 if ($upsample) { |
439 for (my $i = 0; $i < $channels; $i++) { | 443 for (my $i = 0; $i < $channels; $i++) { |
440 # !!! FIXME: don't do this swap every write, just when the samples change. | 444 # !!! FIXME: don't do this swap every write, just when the samples change. |