From a590bad2d9b36d8e4ec94e720b9e5a17bcf92625 Mon Sep 17 00:00:00 2001 From: Sjoerd van der Berg Date: Mon, 16 Mar 2009 18:33:59 +0000 Subject: [PATCH] Add 32bit signed type for mixing Change the mixer template to use a class type Imported-from: https://svn.code.sf.net/p/dosbox/code-0/dosbox/trunk@3322 --- include/mixer.h | 23 +++++++------ src/hardware/mixer.cpp | 77 ++++++++++++++++++++++-------------------- 2 files changed, 53 insertions(+), 47 deletions(-) diff --git a/include/mixer.h b/include/mixer.h index af0ebbc0..b8e75926 100644 --- a/include/mixer.h +++ b/include/mixer.h @@ -50,16 +50,19 @@ public: void SetFreq(Bitu _freq); void Mix(Bitu _needed); void AddSilence(void); //Fill up until needed - template - void AddSamples(Bitu len,void * data); - void AddSamples_m8(Bitu len,Bit8u * data); - void AddSamples_s8(Bitu len,Bit8u * data); - void AddSamples_m8s(Bitu len,Bit8s * data); - void AddSamples_s8s(Bitu len,Bit8s * data); - void AddSamples_m16(Bitu len,Bit16s * data); - void AddSamples_s16(Bitu len,Bit16s * data); - void AddSamples_m16u(Bitu len,Bit16u * data); - void AddSamples_s16u(Bitu len,Bit16u * data); + template + void AddSamples(Bitu len, const Type* data); + void AddSamples_m8(Bitu len, const Bit8u * data); + void AddSamples_s8(Bitu len, const Bit8u * data); + void AddSamples_m8s(Bitu len, const Bit8s * data); + void AddSamples_s8s(Bitu len, const Bit8s * data); + void AddSamples_m16(Bitu len, const Bit16s * data); + void AddSamples_s16(Bitu len, const Bit16s * data); + void AddSamples_m16u(Bitu len, const Bit16u * data); + void AddSamples_s16u(Bitu len, const Bit16u * data); + void AddSamples_m32(Bitu len, const Bit32s * data); + void AddSamples_s32(Bitu len, const Bit32s * data); + void AddStretched(Bitu len,Bit16s * data); //Strech block up into needed data void FillUp(void); void Enable(bool _yesno); diff --git a/src/hardware/mixer.cpp b/src/hardware/mixer.cpp index ce42db4c..84d1a977 100644 --- a/src/hardware/mixer.cpp +++ b/src/hardware/mixer.cpp @@ -16,7 +16,7 @@ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ -/* $Id: mixer.cpp,v 1.48 2008-10-05 14:44:52 qbix79 Exp $ */ +/* $Id: mixer.cpp,v 1.49 2009-03-16 18:33:59 harekiet Exp $ */ /* Remove the sdl code from here and have it handeld in the sdlmain. @@ -174,13 +174,9 @@ void MixerChannel::AddSilence(void) { } } -template -INLINE void MixerChannel::AddSamples(Bitu len,void * data) { +template +INLINE void MixerChannel::AddSamples(Bitu len, const Type* data) { Bits diff[2]; - Bit8u * data8=(Bit8u*)data; - Bit8s * data8s=(Bit8s*)data; - Bit16s * data16=(Bit16s*)data; - Bit16u * data16u=(Bit16u*)data; Bitu mixpos=mixer.pos+done; freq_index&=MIXER_REMAIN; Bitu pos=0;Bitu new_pos; @@ -194,36 +190,37 @@ INLINE void MixerChannel::AddSamples(Bitu len,void * data) { pos=new_pos; thestart: if (pos>=len) return; - if (_8bits) { + if ( sizeof( Type) == 1) { if (!signeddata) { if (stereo) { - diff[0]=(((Bit8s)(data8[pos*2+0] ^ 0x80)) << 8)-last[0]; - diff[1]=(((Bit8s)(data8[pos*2+1] ^ 0x80)) << 8)-last[1]; + diff[0]=(((Bit8s)(data[pos*2+0] ^ 0x80)) << 8)-last[0]; + diff[1]=(((Bit8s)(data[pos*2+1] ^ 0x80)) << 8)-last[1]; } else { - diff[0]=(((Bit8s)(data8[pos] ^ 0x80)) << 8)-last[0]; + diff[0]=(((Bit8s)(data[pos] ^ 0x80)) << 8)-last[0]; } } else { if (stereo) { - diff[0]=(data8s[pos*2+0] << 8)-last[0]; - diff[1]=(data8s[pos*2+1] << 8)-last[1]; + diff[0]=(data[pos*2+0] << 8)-last[0]; + diff[1]=(data[pos*2+1] << 8)-last[1]; } else { - diff[0]=(data8s[pos] << 8)-last[0]; + diff[0]=(data[pos] << 8)-last[0]; } } - } else { + //16bit and 32bit both contain 16bit data internally + } else { if (signeddata) { if (stereo) { - diff[0]=data16[pos*2+0]-last[0]; - diff[1]=data16[pos*2+1]-last[1]; + diff[0]=data[pos*2+0]-last[0]; + diff[1]=data[pos*2+1]-last[1]; } else { - diff[0]=data16[pos]-last[0]; + diff[0]=data[pos]-last[0]; } } else { if (stereo) { - diff[0]=(Bits)data16u[pos*2+0]-32768-last[0]; - diff[1]=(Bits)data16u[pos*2+1]-32768-last[1]; + diff[0]=(Bits)data[pos*2+0]-32768-last[0]; + diff[1]=(Bits)data[pos*2+1]-32768-last[1]; } else { - diff[0]=(Bits)data16u[pos]-32768-last[0]; + diff[0]=(Bits)data[pos]-32768-last[0]; } } } @@ -267,29 +264,35 @@ void MixerChannel::AddStretched(Bitu len,Bit16s * data) { } } -void MixerChannel::AddSamples_m8(Bitu len,Bit8u * data) { - AddSamples(len,data); +void MixerChannel::AddSamples_m8(Bitu len, const Bit8u * data) { + AddSamples(len,data); } -void MixerChannel::AddSamples_s8(Bitu len,Bit8u * data) { - AddSamples(len,data); +void MixerChannel::AddSamples_s8(Bitu len,const Bit8u * data) { + AddSamples(len,data); } -void MixerChannel::AddSamples_m8s(Bitu len,Bit8s * data) { - AddSamples(len,data); +void MixerChannel::AddSamples_m8s(Bitu len,const Bit8s * data) { + AddSamples(len,data); } -void MixerChannel::AddSamples_s8s(Bitu len,Bit8s * data) { - AddSamples(len,data); +void MixerChannel::AddSamples_s8s(Bitu len,const Bit8s * data) { + AddSamples(len,data); } -void MixerChannel::AddSamples_m16(Bitu len,Bit16s * data) { - AddSamples(len,data); +void MixerChannel::AddSamples_m16(Bitu len,const Bit16s * data) { + AddSamples(len,data); } -void MixerChannel::AddSamples_s16(Bitu len,Bit16s * data) { - AddSamples(len,data); +void MixerChannel::AddSamples_s16(Bitu len,const Bit16s * data) { + AddSamples(len,data); } -void MixerChannel::AddSamples_m16u(Bitu len,Bit16u * data) { - AddSamples(len,data); +void MixerChannel::AddSamples_m16u(Bitu len,const Bit16u * data) { + AddSamples(len,data); } -void MixerChannel::AddSamples_s16u(Bitu len,Bit16u * data) { - AddSamples(len,data); +void MixerChannel::AddSamples_s16u(Bitu len,const Bit16u * data) { + AddSamples(len,data); +} +void MixerChannel::AddSamples_m32(Bitu len,const Bit32s * data) { + AddSamples(len,data); +} +void MixerChannel::AddSamples_s32(Bitu len,const Bit32s * data) { + AddSamples(len,data); } void MixerChannel::FillUp(void) {