Cleaning up apu/ and renaming -private files to _flags.

Part of #296.
This commit is contained in:
Ben Vanik
2015-06-27 11:25:45 -07:00
parent 0d2d07e8e6
commit 8c69a4df09
64 changed files with 249 additions and 541 deletions

View File

@@ -1,53 +0,0 @@
/**
******************************************************************************
* Xenia : Xbox 360 Emulator Research Project *
******************************************************************************
* Copyright 2013 Ben Vanik. All rights reserved. *
* Released under the BSD license - see LICENSE in the root for more details. *
******************************************************************************
*/
#include "xenia/apu/apu.h"
#include "xenia/apu/apu-private.h"
using namespace xe;
using namespace xe::apu;
DEFINE_string(apu, "any", "Audio system. Use: [any, nop, xaudio2]");
DEFINE_bool(mute, false, "Mutes all audio output.");
#include "xenia/apu/nop/nop_apu.h"
std::unique_ptr<AudioSystem> xe::apu::CreateNop(Emulator* emulator) {
return xe::apu::nop::Create(emulator);
}
#if XE_PLATFORM_WIN32
#include "xenia/apu/xaudio2/xaudio2_apu.h"
std::unique_ptr<AudioSystem> xe::apu::CreateXAudio2(Emulator* emulator) {
return xe::apu::xaudio2::Create(emulator);
}
#endif // WIN32
std::unique_ptr<AudioSystem> xe::apu::Create(Emulator* emulator) {
if (FLAGS_apu.compare("nop") == 0) {
return CreateNop(emulator);
#if XE_PLATFORM_WIN32
} else if (FLAGS_apu.compare("xaudio2") == 0) {
return CreateXAudio2(emulator);
#endif // WIN32
} else {
// Create best available.
std::unique_ptr<AudioSystem> best;
#if XE_PLATFORM_WIN32
best = CreateXAudio2(emulator);
if (best) {
return best;
}
#endif // WIN32
// Fallback to nop.
return CreateNop(emulator);
}
}

View File

@@ -1,36 +0,0 @@
/**
******************************************************************************
* Xenia : Xbox 360 Emulator Research Project *
******************************************************************************
* Copyright 2013 Ben Vanik. All rights reserved. *
* Released under the BSD license - see LICENSE in the root for more details. *
******************************************************************************
*/
#ifndef XENIA_APU_APU_H_
#define XENIA_APU_APU_H_
#include <memory>
#include "xenia/apu/audio_system.h"
#include "xenia/apu/xma_decoder.h"
namespace xe {
class Emulator;
} // namespace xe
namespace xe {
namespace apu {
std::unique_ptr<AudioSystem> Create(Emulator* emulator);
std::unique_ptr<AudioSystem> CreateNop(Emulator* emulator);
#if XE_PLATFORM_WIN32
std::unique_ptr<AudioSystem> CreateXAudio2(Emulator* emulator);
#endif // WIN32
} // namespace apu
} // namespace xe
#endif // XENIA_APU_APU_H_

View File

@@ -7,19 +7,8 @@
******************************************************************************
*/
#ifndef XENIA_APU_NOP_NOP_APU_PRIVATE_H_
#define XENIA_APU_NOP_NOP_APU_PRIVATE_H_
#include "xenia/apu/apu_flags.h"
#include "xenia/apu/nop/nop_apu.h"
DEFINE_string(apu, "any", "Audio system. Use: [any, nop, xaudio2]");
namespace xe {
namespace apu {
namespace nop {
//
} // namespace nop
} // namespace apu
} // namespace xe
#endif // XENIA_APU_NOP_NOP_APU_PRIVATE_H_
DEFINE_bool(mute, false, "Mutes all audio output.");

View File

@@ -7,8 +7,8 @@
******************************************************************************
*/
#ifndef XENIA_APU_APU_PRIVATE_H_
#define XENIA_APU_APU_PRIVATE_H_
#ifndef XENIA_APU_APU_FLAGS_H_
#define XENIA_APU_APU_FLAGS_H_
#include <gflags/gflags.h>
@@ -16,4 +16,4 @@ DECLARE_string(apu);
DECLARE_bool(mute);
#endif // XENIA_APU_APU_PRIVATE_H_
#endif // XENIA_APU_APU_FLAGS_H_

View File

@@ -9,6 +9,7 @@
#include "xenia/apu/audio_system.h"
#include "xenia/apu/apu_flags.h"
#include "xenia/apu/audio_driver.h"
#include "xenia/base/logging.h"
#include "xenia/base/math.h"
@@ -20,6 +21,11 @@
#include "xenia/kernel/objects/xthread.h"
#include "xenia/profiling.h"
#include "xenia/apu/nop/nop_audio_system.h"
#if XE_PLATFORM_WIN32
#include "xenia/apu/xaudio2/xaudio2_audio_system.h"
#endif // XE_PLATFORM_WIN32
// As with normal Microsoft, there are like twelve different ways to access
// the audio APIs. Early games use XMA*() methods almost exclusively to touch
// decoders. Later games use XAudio*() and direct memory writes to the XMA
@@ -35,7 +41,28 @@
namespace xe {
namespace apu {
using namespace xe::cpu;
std::unique_ptr<AudioSystem> AudioSystem::Create(Emulator* emulator) {
if (FLAGS_apu.compare("nop") == 0) {
return nop::NopAudioSystem::Create(emulator);
#if XE_PLATFORM_WIN32
} else if (FLAGS_apu.compare("xaudio2") == 0) {
return xaudio2::XAudio2AudioSystem::Create(emulator);
#endif // WIN32
} else {
// Create best available.
std::unique_ptr<AudioSystem> best;
#if XE_PLATFORM_WIN32
best = xaudio2::XAudio2AudioSystem::Create(emulator);
if (best) {
return best;
}
#endif // XE_PLATFORM_WIN32
// Fallback to nop.
return nop::NopAudioSystem::Create(emulator);
}
}
AudioSystem::AudioSystem(Emulator* emulator)
: emulator_(emulator), memory_(emulator->memory()), worker_running_(false) {

View File

@@ -32,6 +32,8 @@ class AudioSystem {
public:
virtual ~AudioSystem();
static std::unique_ptr<AudioSystem> Create(Emulator* emulator);
Emulator* emulator() const { return emulator_; }
Memory* memory() const { return memory_; }
cpu::Processor* processor() const { return processor_; }

View File

@@ -1,40 +0,0 @@
/**
******************************************************************************
* Xenia : Xbox 360 Emulator Research Project *
******************************************************************************
* Copyright 2013 Ben Vanik. All rights reserved. *
* Released under the BSD license - see LICENSE in the root for more details. *
******************************************************************************
*/
#include "xenia/apu/nop/nop_apu.h"
#include "xenia/apu/nop/nop_audio_system.h"
using namespace xe;
using namespace xe::apu;
using namespace xe::apu::nop;
namespace {
void InitializeIfNeeded();
void CleanupOnShutdown();
void InitializeIfNeeded() {
static bool has_initialized = false;
if (has_initialized) {
return;
}
has_initialized = true;
//
atexit(CleanupOnShutdown);
}
void CleanupOnShutdown() {}
}
std::unique_ptr<AudioSystem> xe::apu::nop::Create(Emulator* emulator) {
InitializeIfNeeded();
return std::make_unique<NopAudioSystem>(emulator);
}

View File

@@ -0,0 +1,10 @@
/**
******************************************************************************
* Xenia : Xbox 360 Emulator Research Project *
******************************************************************************
* Copyright 2013 Ben Vanik. All rights reserved. *
* Released under the BSD license - see LICENSE in the root for more details. *
******************************************************************************
*/
#include "xenia/apu/nop/nop_apu_flags.h"

View File

@@ -7,19 +7,9 @@
******************************************************************************
*/
#ifndef XENIA_APU_XAUDIO2_XAUDIO2_APU_PRIVATE_H_
#define XENIA_APU_XAUDIO2_XAUDIO2_APU_PRIVATE_H_
#ifndef XENIA_APU_NOP_NOP_APU_FLAGS_H_
#define XENIA_APU_NOP_NOP_APU_FLAGS_H_
#include "xenia/apu/xaudio2/xaudio2_apu.h"
#include <gflags/gflags.h>
namespace xe {
namespace apu {
namespace xaudio2 {
//
} // namespace xaudio2
} // namespace apu
} // namespace xe
#endif // XENIA_APU_XAUDIO2_XAUDIO2_APU_PRIVATE_H_
#endif // XENIA_APU_NOP_NOP_APU_FLAGS_H_

View File

@@ -9,15 +9,19 @@
#include "xenia/apu/nop/nop_audio_system.h"
#include "xenia/apu/apu-private.h"
#include "xenia/apu/apu_flags.h"
using namespace xe;
using namespace xe::apu;
using namespace xe::apu::nop;
namespace xe {
namespace apu {
namespace nop {
std::unique_ptr<AudioSystem> NopAudioSystem::Create(Emulator* emulator) {
return std::make_unique<NopAudioSystem>(emulator);
}
NopAudioSystem::NopAudioSystem(Emulator* emulator) : AudioSystem(emulator) {}
NopAudioSystem::~NopAudioSystem() {}
NopAudioSystem::~NopAudioSystem() = default;
X_STATUS NopAudioSystem::CreateDriver(size_t index, HANDLE wait_handle,
AudioDriver** out_driver) {
@@ -25,3 +29,7 @@ X_STATUS NopAudioSystem::CreateDriver(size_t index, HANDLE wait_handle,
}
void NopAudioSystem::DestroyDriver(AudioDriver* driver) { assert_always(); }
} // namespace nop
} // namespace apu
} // namespace xe

View File

@@ -11,7 +11,6 @@
#define XENIA_APU_NOP_NOP_AUDIO_SYSTEM_H_
#include "xenia/apu/audio_system.h"
#include "xenia/apu/nop/nop_apu-private.h"
namespace xe {
namespace apu {
@@ -20,11 +19,13 @@ namespace nop {
class NopAudioSystem : public AudioSystem {
public:
NopAudioSystem(Emulator* emulator);
virtual ~NopAudioSystem();
~NopAudioSystem() override;
virtual X_STATUS CreateDriver(size_t index, HANDLE wait_handle,
AudioDriver** out_driver);
virtual void DestroyDriver(AudioDriver* driver);
static std::unique_ptr<AudioSystem> Create(Emulator* emulator);
X_STATUS CreateDriver(size_t index, HANDLE wait_handle,
AudioDriver** out_driver) override;
void DestroyDriver(AudioDriver* driver) override;
};
} // namespace nop

View File

@@ -1,40 +0,0 @@
/**
******************************************************************************
* Xenia : Xbox 360 Emulator Research Project *
******************************************************************************
* Copyright 2013 Ben Vanik. All rights reserved. *
* Released under the BSD license - see LICENSE in the root for more details. *
******************************************************************************
*/
#include "xenia/apu/xaudio2/xaudio2_apu.h"
#include "xenia/apu/xaudio2/xaudio2_audio_system.h"
using namespace xe;
using namespace xe::apu;
using namespace xe::apu::xaudio2;
namespace {
void InitializeIfNeeded();
void CleanupOnShutdown();
void InitializeIfNeeded() {
static bool has_initialized = false;
if (has_initialized) {
return;
}
has_initialized = true;
//
atexit(CleanupOnShutdown);
}
void CleanupOnShutdown() {}
}
std::unique_ptr<AudioSystem> xe::apu::xaudio2::Create(Emulator* emulator) {
InitializeIfNeeded();
return std::make_unique<XAudio2AudioSystem>(emulator);
}

View File

@@ -0,0 +1,10 @@
/**
******************************************************************************
* Xenia : Xbox 360 Emulator Research Project *
******************************************************************************
* Copyright 2013 Ben Vanik. All rights reserved. *
* Released under the BSD license - see LICENSE in the root for more details. *
******************************************************************************
*/
#include "xenia/apu/xaudio2/xaudio2_apu_flags.h"

View File

@@ -7,22 +7,9 @@
******************************************************************************
*/
#ifndef XENIA_APU_XAUDIO2_XAUDIO2_APU_H_
#define XENIA_APU_XAUDIO2_XAUDIO2_APU_H_
#ifndef XENIA_APU_XAUDIO2_XAUDIO2_APU_FLAGS_H_
#define XENIA_APU_XAUDIO2_XAUDIO2_APU_FLAGS_H_
#include <memory>
#include <gflags/gflags.h>
#include "xenia/apu/audio_system.h"
#include "xenia/emulator.h"
namespace xe {
namespace apu {
namespace xaudio2 {
std::unique_ptr<AudioSystem> Create(Emulator* emulator);
} // namespace xaudio2
} // namespace apu
} // namespace xe
#endif // XENIA_APU_XAUDIO2_XAUDIO2_APU_H_
#endif // XENIA_APU_XAUDIO2_XAUDIO2_APU_FLAGS_H_

View File

@@ -9,7 +9,7 @@
#include "xenia/apu/xaudio2/xaudio2_audio_driver.h"
#include "xenia/apu/apu-private.h"
#include "xenia/apu/apu_flags.h"
#include "xenia/base/clock.h"
#include "xenia/base/logging.h"
#include "xenia/emulator.h"

View File

@@ -13,7 +13,6 @@
#include <xaudio2.h>
#include "xenia/apu/audio_driver.h"
#include "xenia/apu/xaudio2/xaudio2_apu-private.h"
namespace xe {
namespace apu {
@@ -22,11 +21,11 @@ namespace xaudio2 {
class XAudio2AudioDriver : public AudioDriver {
public:
XAudio2AudioDriver(Emulator* emulator, HANDLE semaphore);
virtual ~XAudio2AudioDriver();
~XAudio2AudioDriver() override;
virtual void Initialize();
virtual void SubmitFrame(uint32_t frame_ptr);
virtual void Shutdown();
void Initialize();
void SubmitFrame(uint32_t frame_ptr) override;
void Shutdown();
private:
IXAudio2* audio_;

View File

@@ -8,15 +8,20 @@
*/
#include "xenia/apu/xaudio2/xaudio2_audio_system.h"
#include <xaudio2.h>
#include "xenia/apu/apu_flags.h"
#include "xenia/apu/xaudio2/xaudio2_audio_driver.h"
#include "xenia/apu/apu-private.h"
#include "xenia/emulator.h"
using namespace xe;
using namespace xe::apu;
using namespace xe::apu::xaudio2;
namespace xe {
namespace apu {
namespace xaudio2 {
std::unique_ptr<AudioSystem> XAudio2AudioSystem::Create(Emulator* emulator) {
return std::make_unique<XAudio2AudioSystem>(emulator);
}
XAudio2AudioSystem::XAudio2AudioSystem(Emulator* emulator)
: AudioSystem(emulator) {}
@@ -41,3 +46,7 @@ void XAudio2AudioSystem::DestroyDriver(AudioDriver* driver) {
assert_not_null(xdriver);
delete xdriver;
}
} // namespace xaudio2
} // namespace apu
} // namespace xe

View File

@@ -10,10 +10,7 @@
#ifndef XENIA_APU_XAUDIO2_XAUDIO2_AUDIO_SYSTEM_H_
#define XENIA_APU_XAUDIO2_XAUDIO2_AUDIO_SYSTEM_H_
#include <xaudio2.h>
#include "xenia/apu/audio_system.h"
#include "xenia/apu/xaudio2/xaudio2_apu-private.h"
namespace xe {
namespace apu {
@@ -22,11 +19,13 @@ namespace xaudio2 {
class XAudio2AudioSystem : public AudioSystem {
public:
XAudio2AudioSystem(Emulator* emulator);
virtual ~XAudio2AudioSystem();
~XAudio2AudioSystem() override;
virtual X_RESULT CreateDriver(size_t index, HANDLE semaphore,
AudioDriver** out_driver);
virtual void DestroyDriver(AudioDriver* driver);
static std::unique_ptr<AudioSystem> Create(Emulator* emulator);
X_RESULT CreateDriver(size_t index, HANDLE semaphore,
AudioDriver** out_driver) override;
void DestroyDriver(AudioDriver* driver) override;
protected:
virtual void Initialize();