From 6beba9ee559fe372fcd997835441bcf94e8d3502 Mon Sep 17 00:00:00 2001 From: Alexey Yakovenko Date: Tue, 28 Jul 2009 15:36:22 +0200 Subject: added some preventive byteswapping for bigendian support in the future --- common.h | 12 ++++++++++++ csid.cpp | 17 +++++++++-------- psdl.c | 3 ++- 3 files changed, 23 insertions(+), 9 deletions(-) diff --git a/common.h b/common.h index 63f0f010..0cefcb8d 100644 --- a/common.h +++ b/common.h @@ -4,4 +4,16 @@ #define min(x,y) ((x)<(y)?(x):(y)) #define max(x,y) ((x)>(y)?(x):(y)) +inline void +le_int16 (int16_t in, char *out) { + char *pin = (char *)∈ +#if !BIGENDIAN + out[0] = pin[0]; + out[1] = pin[1]; +#else + out[1] = pin[0]; + out[0] = pin[1]; +#endif +} + #endif // __COMMON_H diff --git a/csid.cpp b/csid.cpp index 217eb189..404ff6f1 100644 --- a/csid.cpp +++ b/csid.cpp @@ -211,17 +211,18 @@ csid_init (const char *fname, int track, float start, float end) { md5_t md5; md5_init (&md5); md5_process (&md5, (const char *)tune->cache.get () + tune->fileOffset, tune->getInfo ().c64dataLen); - uint16_t tmp; - tmp = tune->getInfo ().initAddr; - md5_process (&md5, &tmp, 2); - tmp = tune->getInfo ().playAddr; - md5_process (&md5, &tmp, 2); - tmp = tune->getInfo ().songs; - md5_process (&md5, &tmp, 2); + char tmp[2]; + le_int16 (tune->getInfo ().initAddr, tmp); + md5_process (&md5, tmp, 2); + le_int16 (tune->getInfo ().playAddr, tmp); + md5_process (&md5, tmp, 2); + le_int16 (tune->getInfo ().songs, tmp); + md5_process (&md5, tmp, 2); for (int s = 1; s <= tune->getInfo ().songs; s++) { tune->selectSong (s); - md5_process (&md5, &tune->getInfo ().songSpeed, sizeof (tune->getInfo ().songSpeed)); + // songspeed is uint8_t, so no need for byteswap + md5_process (&md5, &tune->getInfo ().songSpeed, 1); } if (tune->getInfo ().clockSpeed == SIDTUNE_CLOCK_NTSC) { md5_process (&md5, &tune->getInfo ().clockSpeed, sizeof (tune->getInfo ().clockSpeed)); diff --git a/psdl.c b/psdl.c index 04975b79..1ffa21ca 100644 --- a/psdl.c +++ b/psdl.c @@ -1,6 +1,7 @@ #include #include "psdl.h" #include "streamer.h" +#include "common.h" static int sdl_player_numsamples = 4096; int sdl_player_freq; @@ -88,7 +89,7 @@ psdl_callback (void* userdata, Uint8 *stream, int len) { int ivolume = sdl_volume * 1000; for (int i = 0; i < bytesread/2; i++) { int16_t sample = (int16_t)(((int32_t)(((int16_t*)stream)[i])) * ivolume / 1000); - ((int16_t*)stream)[i] = sample; + le_int16 (sample, (char*)&(((int16_t*)stream)[i])); } if (bytesread < len) { memset (stream + bytesread, 0, len-bytesread); -- cgit v1.2.3