Add unity build support
This commit is contained in:
@@ -25,34 +25,7 @@ namespace Nz
|
||||
{
|
||||
namespace
|
||||
{
|
||||
std::optional<AudioFormat> GuessFormat(UInt32 channelCount)
|
||||
{
|
||||
switch (channelCount)
|
||||
{
|
||||
case 1:
|
||||
return AudioFormat::I16_Mono;
|
||||
|
||||
case 2:
|
||||
return AudioFormat::I16_Stereo;
|
||||
|
||||
case 4:
|
||||
return AudioFormat::I16_Quad;
|
||||
|
||||
case 6:
|
||||
return AudioFormat::I16_5_1;
|
||||
|
||||
case 7:
|
||||
return AudioFormat::I16_6_1;
|
||||
|
||||
case 8:
|
||||
return AudioFormat::I16_7_1;
|
||||
|
||||
default:
|
||||
return std::nullopt;
|
||||
}
|
||||
}
|
||||
|
||||
std::string ErrToString(int errCode)
|
||||
std::string MP3ErrorToString(int errCode)
|
||||
{
|
||||
switch (errCode)
|
||||
{
|
||||
@@ -66,47 +39,47 @@ namespace Nz
|
||||
}
|
||||
}
|
||||
|
||||
size_t ReadCallback(void* buf, size_t size, void* user_data)
|
||||
size_t MP3ReadCallback(void* buf, size_t size, void* user_data)
|
||||
{
|
||||
Stream* stream = static_cast<Stream*>(user_data);
|
||||
return static_cast<size_t>(stream->Read(buf, size));
|
||||
}
|
||||
|
||||
int SeekCallback(uint64_t position, void* user_data)
|
||||
int MP3SeekCallback(uint64_t position, void* user_data)
|
||||
{
|
||||
Stream* stream = static_cast<Stream*>(user_data);
|
||||
return (stream->SetCursorPos(position)) ? 0 : MP3D_E_IOERROR;
|
||||
}
|
||||
|
||||
bool IsSupported(const std::string_view& extension)
|
||||
bool IsMP3Supported(const std::string_view& extension)
|
||||
{
|
||||
return extension == "mp3";
|
||||
}
|
||||
|
||||
Ternary CheckMp3(Stream& stream, const ResourceParameters& parameters)
|
||||
Ternary CheckMP3(Stream& stream, const ResourceParameters& parameters)
|
||||
{
|
||||
bool skip;
|
||||
if (parameters.custom.GetBooleanParameter("SkipNativeMP3Loader", &skip) && skip)
|
||||
return Ternary::False;
|
||||
|
||||
mp3dec_io_t io;
|
||||
io.read = &ReadCallback;
|
||||
io.read = &MP3ReadCallback;
|
||||
io.read_data = &stream;
|
||||
io.seek = &SeekCallback;
|
||||
io.seek = &MP3SeekCallback;
|
||||
io.seek_data = &stream;
|
||||
|
||||
std::vector<UInt8> buffer(MINIMP3_BUF_SIZE);
|
||||
return (mp3dec_detect_cb(&io, buffer.data(), buffer.size()) == 0) ? Ternary::True : Ternary::False;
|
||||
}
|
||||
|
||||
std::shared_ptr<SoundBuffer> LoadSoundBuffer(Stream& stream, const SoundBufferParams& parameters)
|
||||
std::shared_ptr<SoundBuffer> LoadMP3SoundBuffer(Stream& stream, const SoundBufferParams& parameters)
|
||||
{
|
||||
static_assert(std::is_same_v<mp3d_sample_t, Int16>);
|
||||
|
||||
mp3dec_io_t io;
|
||||
io.read = &ReadCallback;
|
||||
io.read = &MP3ReadCallback;
|
||||
io.read_data = &stream;
|
||||
io.seek = &SeekCallback;
|
||||
io.seek = &MP3SeekCallback;
|
||||
io.seek_data = &stream;
|
||||
|
||||
struct UserData
|
||||
@@ -122,13 +95,13 @@ namespace Nz
|
||||
int err = mp3dec_load_cb(&dec, &io, buffer.data(), buffer.size(), &info, nullptr, &userdata);
|
||||
if (err != 0)
|
||||
{
|
||||
NazaraError(ErrToString(err));
|
||||
NazaraError(MP3ErrorToString(err));
|
||||
return {};
|
||||
}
|
||||
|
||||
CallOnExit freeBuffer([&] { std::free(info.buffer); });
|
||||
|
||||
std::optional<AudioFormat> formatOpt = GuessFormat(info.channels);
|
||||
std::optional<AudioFormat> formatOpt = GuessAudioFormat(info.channels);
|
||||
if (!formatOpt)
|
||||
{
|
||||
NazaraError("unexpected channel count: " + std::to_string(info.channels));
|
||||
@@ -214,15 +187,15 @@ namespace Nz
|
||||
|
||||
bool Open(Stream& stream, bool forceMono)
|
||||
{
|
||||
m_io.read = &ReadCallback;
|
||||
m_io.read = &MP3ReadCallback;
|
||||
m_io.read_data = &stream;
|
||||
m_io.seek = &SeekCallback;
|
||||
m_io.seek = &MP3SeekCallback;
|
||||
m_io.seek_data = &stream;
|
||||
|
||||
int err = mp3dec_ex_open_cb(&m_decoder, &m_io, MP3D_SEEK_TO_SAMPLE);
|
||||
if (err != 0)
|
||||
{
|
||||
NazaraError(ErrToString(err));
|
||||
NazaraError(MP3ErrorToString(err));
|
||||
return {};
|
||||
}
|
||||
|
||||
@@ -232,7 +205,7 @@ namespace Nz
|
||||
std::memset(&m_decoder, 0, sizeof(m_decoder));
|
||||
});
|
||||
|
||||
std::optional<AudioFormat> formatOpt = GuessFormat(m_decoder.info.channels);
|
||||
std::optional<AudioFormat> formatOpt = GuessAudioFormat(m_decoder.info.channels);
|
||||
if (!formatOpt)
|
||||
{
|
||||
NazaraError("unexpected channel count: " + std::to_string(m_decoder.info.channels));
|
||||
@@ -309,7 +282,7 @@ namespace Nz
|
||||
bool m_mixToMono;
|
||||
};
|
||||
|
||||
std::shared_ptr<SoundStream> LoadSoundStreamFile(const std::filesystem::path& filePath, const SoundStreamParams& parameters)
|
||||
std::shared_ptr<SoundStream> MP3LoadSoundStreamFile(const std::filesystem::path& filePath, const SoundStreamParams& parameters)
|
||||
{
|
||||
std::shared_ptr<minimp3Stream> soundStream = std::make_shared<minimp3Stream>();
|
||||
if (!soundStream->Open(filePath, parameters.forceMono))
|
||||
@@ -321,7 +294,7 @@ namespace Nz
|
||||
return soundStream;
|
||||
}
|
||||
|
||||
std::shared_ptr<SoundStream> LoadSoundStreamMemory(const void* data, std::size_t size, const SoundStreamParams& parameters)
|
||||
std::shared_ptr<SoundStream> MP3LoadSoundStreamMemory(const void* data, std::size_t size, const SoundStreamParams& parameters)
|
||||
{
|
||||
std::shared_ptr<minimp3Stream> soundStream = std::make_shared<minimp3Stream>();
|
||||
if (!soundStream->Open(data, size, parameters.forceMono))
|
||||
@@ -333,7 +306,7 @@ namespace Nz
|
||||
return soundStream;
|
||||
}
|
||||
|
||||
std::shared_ptr<SoundStream> LoadSoundStreamStream(Stream& stream, const SoundStreamParams& parameters)
|
||||
std::shared_ptr<SoundStream> MP3LoadSoundStreamStream(Stream& stream, const SoundStreamParams& parameters)
|
||||
{
|
||||
std::shared_ptr<minimp3Stream> soundStream = std::make_shared<minimp3Stream>();
|
||||
if (!soundStream->Open(stream, parameters.forceMono))
|
||||
@@ -351,9 +324,9 @@ namespace Nz
|
||||
SoundBufferLoader::Entry GetSoundBufferLoader_minimp3()
|
||||
{
|
||||
SoundBufferLoader::Entry loaderEntry;
|
||||
loaderEntry.extensionSupport = IsSupported;
|
||||
loaderEntry.streamChecker = [](Stream& stream, const SoundBufferParams& parameters) { return CheckMp3(stream, parameters); };
|
||||
loaderEntry.streamLoader = LoadSoundBuffer;
|
||||
loaderEntry.extensionSupport = IsMP3Supported;
|
||||
loaderEntry.streamChecker = [](Stream& stream, const SoundBufferParams& parameters) { return CheckMP3(stream, parameters); };
|
||||
loaderEntry.streamLoader = LoadMP3SoundBuffer;
|
||||
|
||||
return loaderEntry;
|
||||
}
|
||||
@@ -361,11 +334,11 @@ namespace Nz
|
||||
SoundStreamLoader::Entry GetSoundStreamLoader_minimp3()
|
||||
{
|
||||
SoundStreamLoader::Entry loaderEntry;
|
||||
loaderEntry.extensionSupport = IsSupported;
|
||||
loaderEntry.streamChecker = [](Stream& stream, const SoundStreamParams& parameters) { return CheckMp3(stream, parameters); };
|
||||
loaderEntry.fileLoader = LoadSoundStreamFile;
|
||||
loaderEntry.memoryLoader = LoadSoundStreamMemory;
|
||||
loaderEntry.streamLoader = LoadSoundStreamStream;
|
||||
loaderEntry.extensionSupport = IsMP3Supported;
|
||||
loaderEntry.streamChecker = [](Stream& stream, const SoundStreamParams& parameters) { return CheckMP3(stream, parameters); };
|
||||
loaderEntry.fileLoader = MP3LoadSoundStreamFile;
|
||||
loaderEntry.memoryLoader = MP3LoadSoundStreamMemory;
|
||||
loaderEntry.streamLoader = MP3LoadSoundStreamStream;
|
||||
|
||||
return loaderEntry;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user