Minor refactoring, slight speedup of passing data in sound code.

This commit is contained in:
Stephen Anthony 2017-08-02 19:21:36 -02:30
parent 2a5eafd6fd
commit 025a1a7918
5 changed files with 17 additions and 16 deletions

View File

@ -261,11 +261,7 @@ void SoundSDL2::set(uInt16 addr, uInt8 value, Int32 cycle)
// the sound to "scale" correctly, we have to know the games real frame
// rate (e.g., 50 or 60) and the currently emulated frame rate. We use these
// values to "scale" the time before the register change occurs.
RegWrite info;
info.addr = addr;
info.value = value;
info.delta = delta;
myRegWriteQueue.enqueue(info);
myRegWriteQueue.enqueue(addr, value, delta);
// Update last cycle counter to the current cycle
myLastRegisterSetCycle = cycle;
@ -476,14 +472,17 @@ double SoundSDL2::RegWriteQueue::duration() const
}
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
void SoundSDL2::RegWriteQueue::enqueue(const RegWrite& info)
void SoundSDL2::RegWriteQueue::enqueue(uInt16 addr, uInt8 value, double delta)
{
// If an attempt is made to enqueue more than the queue can hold then
// we'll enlarge the queue's capacity.
if(mySize == myCapacity)
grow();
myBuffer[myTail] = info;
RegWrite& reg = myBuffer[myTail];
reg.addr = addr;
reg.value = value;
reg.delta = delta;
myTail = (myTail + 1) % myCapacity;
++mySize;
}

View File

@ -174,6 +174,9 @@ class SoundSDL2 : public Sound
uInt16 addr;
uInt8 value;
double delta;
RegWrite(uInt16 a = 0, uInt8 v = 0, double d = 0.0)
: addr(a), value(v), delta(d) { }
};
/**
@ -209,7 +212,7 @@ class SoundSDL2 : public Sound
/**
Enqueue the specified object.
*/
void enqueue(const RegWrite& info);
void enqueue(uInt16 addr, uInt8 value, double delta);
/**
Return the item at the front on the queue.

View File

@ -41,7 +41,7 @@ class DiStella
// A list of options that can be applied to the disassembly
// This will eventually grow to include all options supported by
// standalone Distella
struct Settings{
struct Settings {
Common::Base::Format gfx_format;
bool resolve_code; // Attempt to detect code vs. data sections
bool show_addresses; // Show PC addresses (always off for external output)

View File

@ -295,7 +295,7 @@ void Settings::validate()
#ifdef SOUND_SUPPORT
i = getInt("volume");
if(i < 0 || i > 100) setInternal("volume", "100");
if(i < 0 || i > 100) setInternal("volume", "100");
i = getInt("freq");
if(!(i == 11025 || i == 22050 || i == 31400 || i == 44100 || i == 48000))
setInternal("freq", "31400");
@ -622,9 +622,7 @@ int Settings::setInternal(const string& key, const Variant& value,
}
else
{
Setting setting;
setting.key = key;
setting.value = value;
Setting setting(key, value);
if(useAsInitial) setting.initialValue = value;
myInternalSettings.push_back(setting);
@ -676,9 +674,7 @@ int Settings::setExternal(const string& key, const Variant& value,
}
else
{
Setting setting;
setting.key = key;
setting.value = value;
Setting setting(key, value);
if(useAsInitial) setting.initialValue = value;
myExternalSettings.push_back(setting);

View File

@ -115,6 +115,9 @@ class Settings
string key;
Variant value;
Variant initialValue;
Setting(const string& k, const Variant& v, const Variant& i = EmptyVariant)
: key(k), value(v), initialValue(i) { }
};
using SettingsArray = vector<Setting>;