[XMA] Added multiple versions of XMA decoders
- Fake: No decoding - Master: 1:1 from base version of Xenia - Old: Master with improvements - New: Completely new decoder with better stability (but not compability) Co-authored-by: Herman S. <429230+has207@users.noreply.github.com>
This commit is contained in:
committed by
Radosław Gliński
parent
e588a772d4
commit
4494e40c71
@@ -10,6 +10,8 @@
|
||||
#include "xenia/apu/xma_decoder.h"
|
||||
|
||||
#include "xenia/apu/xma_context.h"
|
||||
#include "xenia/apu/xma_context_fake.h"
|
||||
#include "xenia/apu/xma_context_master.h"
|
||||
#include "xenia/apu/xma_context_new.h"
|
||||
#include "xenia/apu/xma_context_old.h"
|
||||
|
||||
@@ -54,15 +56,22 @@ extern "C" {
|
||||
DEFINE_bool(ffmpeg_verbose, false, "Verbose FFmpeg output (debug and above)",
|
||||
"APU");
|
||||
|
||||
DEFINE_bool(use_new_decoder, true,
|
||||
"Enables usage of new experimental XMA audio decoder.", "APU");
|
||||
|
||||
DEFINE_bool(use_dedicated_xma_thread, true,
|
||||
"Enables XMA decoding on separate thread. Disabled should produce "
|
||||
"better results, but decrease performance a bit.",
|
||||
"APU");
|
||||
|
||||
UPDATE_from_bool(use_new_decoder, 2025, 12, 01, 23, false);
|
||||
DEFINE_string(
|
||||
xma_decoder, "new",
|
||||
"Decoder version used to process XMA audio.\n"
|
||||
"Use: [fake, master, old, new]\n"
|
||||
" fake: \n No audio will be decoded.\n"
|
||||
" master: \n Version of decoder exactly like on base version of Xenia.\n"
|
||||
" old: \n Decoder based on master version of decoder with few "
|
||||
"improvements.\n"
|
||||
" new: \n New version of decoder. Provides highest stability, but isn't "
|
||||
"yet finished.\n",
|
||||
"APU");
|
||||
|
||||
namespace xe {
|
||||
namespace apu {
|
||||
@@ -141,10 +150,16 @@ X_STATUS XmaDecoder::Setup(kernel::KernelState* kernel_state) {
|
||||
|
||||
// Setup XMA contexts.
|
||||
for (int i = 0; i < kContextCount; ++i) {
|
||||
if (cvars::use_new_decoder) {
|
||||
if (cvars::xma_decoder == "fake") {
|
||||
contexts_[i] = new XmaContextFake();
|
||||
} else if (cvars::xma_decoder == "master") {
|
||||
contexts_[i] = new XmaContextMaster();
|
||||
} else if (cvars::xma_decoder == "old") {
|
||||
contexts_[i] = new XmaContextOld();
|
||||
} else if (cvars::xma_decoder == "new") {
|
||||
contexts_[i] = new XmaContextNew();
|
||||
} else {
|
||||
contexts_[i] = new XmaContextOld();
|
||||
contexts_[i] = new XmaContextNew();
|
||||
}
|
||||
|
||||
uint32_t guest_ptr = context_data_first_ptr_ + i * sizeof(XMA_CONTEXT_DATA);
|
||||
|
||||
Reference in New Issue
Block a user