Avoid AL/ALC types in the backends

This commit is contained in:
Chris Robinson 2020-12-17 23:21:45 -08:00
parent 5edd5a11fc
commit 6ae0115bf7
18 changed files with 277 additions and 276 deletions

View File

@ -2130,7 +2130,7 @@ static ALCenum UpdateDeviceParams(ALCdevice *device, const int *attrList)
uint64_t usemask{~sublist.FreeMask};
while(usemask)
{
const ALsizei idx{CountTrailingZeros(usemask)};
const int idx{CountTrailingZeros(usemask)};
ALeffectslot *slot{sublist.EffectSlots + idx};
usemask &= ~(1_u64 << idx);
@ -2153,7 +2153,7 @@ static ALCenum UpdateDeviceParams(ALCdevice *device, const int *attrList)
uint64_t usemask{~sublist.FreeMask};
while(usemask)
{
const ALsizei idx{CountTrailingZeros(usemask)};
const int idx{CountTrailingZeros(usemask)};
ALsource *source{sublist.Sources + idx};
usemask &= ~(1_u64 << idx);
@ -2724,7 +2724,7 @@ START_API_FUNC
END_API_FUNC
static inline ALCsizei NumAttrsForDevice(ALCdevice *device)
static inline int NumAttrsForDevice(ALCdevice *device)
{
if(device->Type == DeviceType::Capture) return 9;
if(device->Type != DeviceType::Loopback) return 29;

View File

@ -56,7 +56,7 @@
namespace {
constexpr ALCchar alsaDevice[] = "ALSA Default";
constexpr char alsaDevice[] = "ALSA Default";
#ifdef HAVE_DYNLOAD
@ -325,7 +325,7 @@ al::vector<DevMap> probe_devices(snd_pcm_stream_t stream)
ERR("snd_ctl_pcm_next_device failed\n");
if(dev < 0) break;
snd_pcm_info_set_device(pcminfo, static_cast<ALuint>(dev));
snd_pcm_info_set_device(pcminfo, static_cast<uint>(dev));
snd_pcm_info_set_subdevice(pcminfo, 0);
snd_pcm_info_set_stream(pcminfo, stream);
if((err=snd_ctl_pcm_info(handle, pcminfo)) < 0)
@ -416,7 +416,7 @@ struct AlsaPlayback final : public BackendBase {
int mixerProc();
int mixerNoMMapProc();
void open(const ALCchar *name) override;
void open(const char *name) override;
bool reset() override;
void start() override;
void stop() override;
@ -510,7 +510,7 @@ int AlsaPlayback::mixerProc()
}
char *WritePtr{static_cast<char*>(areas->addr) + (offset * areas->step / 8)};
mDevice->renderSamples(WritePtr, static_cast<ALuint>(frames), areas->step/samplebits);
mDevice->renderSamples(WritePtr, static_cast<uint>(frames), areas->step/samplebits);
snd_pcm_sframes_t commitres{snd_pcm_mmap_commit(mPcmHandle, offset, frames)};
if(commitres < 0 || static_cast<snd_pcm_uframes_t>(commitres) != frames)
@ -578,7 +578,7 @@ int AlsaPlayback::mixerNoMMapProc()
al::byte *WritePtr{mBuffer.data()};
avail = snd_pcm_bytes_to_frames(mPcmHandle, static_cast<ssize_t>(mBuffer.size()));
std::lock_guard<std::mutex> _{mMutex};
mDevice->renderSamples(WritePtr, static_cast<ALuint>(avail), frame_step);
mDevice->renderSamples(WritePtr, static_cast<uint>(avail), frame_step);
while(avail > 0)
{
snd_pcm_sframes_t ret{snd_pcm_writei(mPcmHandle, WritePtr,
@ -616,7 +616,7 @@ int AlsaPlayback::mixerNoMMapProc()
}
void AlsaPlayback::open(const ALCchar *name)
void AlsaPlayback::open(const char *name)
{
const char *driver{};
if(name)
@ -680,9 +680,9 @@ bool AlsaPlayback::reset()
}
bool allowmmap{!!GetConfigValueBool(mDevice->DeviceName.c_str(), "alsa", "mmap", 1)};
ALuint periodLen{static_cast<ALuint>(mDevice->UpdateSize * 1000000_u64 / mDevice->Frequency)};
ALuint bufferLen{static_cast<ALuint>(mDevice->BufferSize * 1000000_u64 / mDevice->Frequency)};
ALuint rate{mDevice->Frequency};
uint periodLen{static_cast<uint>(mDevice->UpdateSize * 1000000_u64 / mDevice->Frequency)};
uint bufferLen{static_cast<uint>(mDevice->BufferSize * 1000000_u64 / mDevice->Frequency)};
uint rate{mDevice->Frequency};
int err{};
HwParamsPtr hp{CreateHwParams()};
@ -785,8 +785,8 @@ bool AlsaPlayback::reset()
#undef CHECK
sp = nullptr;
mDevice->BufferSize = static_cast<ALuint>(bufferSizeInFrames);
mDevice->UpdateSize = static_cast<ALuint>(periodSizeInFrames);
mDevice->BufferSize = static_cast<uint>(bufferSizeInFrames);
mDevice->UpdateSize = static_cast<uint>(periodSizeInFrames);
mDevice->Frequency = rate;
setDefaultChannelOrder();
@ -869,7 +869,7 @@ struct AlsaCapture final : public BackendBase {
AlsaCapture(ALCdevice *device) noexcept : BackendBase{device} { }
~AlsaCapture() override;
void open(const ALCchar *name) override;
void open(const char *name) override;
void start() override;
void stop() override;
void captureSamples(al::byte *buffer, uint samples) override;
@ -896,7 +896,7 @@ AlsaCapture::~AlsaCapture()
}
void AlsaCapture::open(const ALCchar *name)
void AlsaCapture::open(const char *name)
{
const char *driver{};
if(name)
@ -1017,7 +1017,7 @@ void AlsaCapture::stop()
* snd_pcm_drain is unreliable and snd_pcm_drop drops it. Capture what's
* available now so it'll be available later after the drop.
*/
ALCuint avail{availableSamples()};
uint avail{availableSamples()};
if(!mRing && avail > 0)
{
/* The ring buffer implicitly captures when checking availability.
@ -1088,7 +1088,7 @@ void AlsaCapture::captureSamples(al::byte *buffer, uint samples)
}
buffer = buffer + amt;
samples -= static_cast<ALCuint>(amt);
samples -= static_cast<uint>(amt);
}
if(samples > 0)
std::fill_n(buffer, snd_pcm_frames_to_bytes(mPcmHandle, samples),
@ -1199,10 +1199,10 @@ bool AlsaBackendFactory::init()
if(!alsa_handle)
{
WARN("Failed to load %s\n", "libasound.so.2");
return ALC_FALSE;
return false;
}
error = ALC_FALSE;
error = false;
#define LOAD_FUNC(f) do { \
p##f = reinterpret_cast<decltype(p##f)>(GetSymbol(alsa_handle, #f)); \
if(p##f == nullptr) { \

View File

@ -12,8 +12,6 @@
#include <mmreg.h>
#endif
#include "AL/alc.h"
#include "alcmain.h"
#include "alexcpt.h"
#include "alnumeric.h"

View File

@ -44,7 +44,7 @@
namespace {
static const ALCchar ca_device[] = "CoreAudio Default";
static const char ca_device[] = "CoreAudio Default";
struct CoreAudioPlayback final : public BackendBase {
@ -62,14 +62,14 @@ struct CoreAudioPlayback final : public BackendBase {
inBusNumber, inNumberFrames, ioData);
}
void open(const ALCchar *name) override;
void open(const char *name) override;
bool reset() override;
void start() override;
void stop() override;
AudioUnit mAudioUnit{};
ALuint mFrameSize{0u};
uint mFrameSize{0u};
AudioStreamBasicDescription mFormat{}; // This is the OpenAL format as a CoreAudio ASBD
DEF_NEWDEL(CoreAudioPlayback)
@ -95,7 +95,7 @@ OSStatus CoreAudioPlayback::MixerProc(AudioUnitRenderActionFlags*, const AudioTi
}
void CoreAudioPlayback::open(const ALCchar *name)
void CoreAudioPlayback::open(const char *name)
{
if(!name)
name = ca_device;
@ -171,9 +171,9 @@ bool CoreAudioPlayback::reset()
if(mDevice->Frequency != streamFormat.mSampleRate)
{
mDevice->BufferSize = static_cast<ALuint>(uint64_t{mDevice->BufferSize} *
mDevice->BufferSize = static_cast<uint>(uint64_t{mDevice->BufferSize} *
streamFormat.mSampleRate / mDevice->Frequency);
mDevice->Frequency = static_cast<ALuint>(streamFormat.mSampleRate);
mDevice->Frequency = static_cast<uint>(streamFormat.mSampleRate);
}
/* FIXME: How to tell what channels are what in the output device, and how
@ -309,7 +309,7 @@ struct CoreAudioCapture final : public BackendBase {
inBusNumber, inNumberFrames, ioData);
}
void open(const ALCchar *name) override;
void open(const char *name) override;
void start() override;
void stop() override;
void captureSamples(al::byte *buffer, uint samples) override;
@ -317,7 +317,7 @@ struct CoreAudioCapture final : public BackendBase {
AudioUnit mAudioUnit{0};
ALuint mFrameSize{0u};
uint mFrameSize{0u};
AudioStreamBasicDescription mFormat{}; // This is the OpenAL format as a CoreAudio ASBD
SampleConverterPtr mConverter;
@ -359,7 +359,7 @@ OSStatus CoreAudioCapture::RecordProc(AudioUnitRenderActionFlags*,
}
else
{
const auto remaining = static_cast<ALuint>(inNumberFrames - rec_vec.first.len);
const auto remaining = static_cast<uint>(inNumberFrames - rec_vec.first.len);
audiobuf.list.mNumberBuffers = 2;
audiobuf.list.mBuffers[0].mNumberChannels = mFormat.mChannelsPerFrame;
audiobuf.list.mBuffers[0].mData = rec_vec.first.buf;
@ -382,7 +382,7 @@ OSStatus CoreAudioCapture::RecordProc(AudioUnitRenderActionFlags*,
}
void CoreAudioCapture::open(const ALCchar *name)
void CoreAudioCapture::open(const char *name)
{
AudioStreamBasicDescription requestedFormat; // The application requested format
AudioStreamBasicDescription hardwareFormat; // The hardware format
@ -424,7 +424,7 @@ void CoreAudioCapture::open(const ALCchar *name)
// Turn off AudioUnit output
enableIO = 0;
err = AudioUnitSetProperty(mAudioUnit, kAudioOutputUnitProperty_EnableIO,
kAudioUnitScope_Output, 0, &enableIO, sizeof(ALuint));
kAudioUnitScope_Output, 0, &enableIO, sizeof(enableIO));
if(err != noErr)
throw al::backend_exception{al::backend_error::DeviceError,
"Could not disable audio unit output property: %u", err};
@ -432,7 +432,7 @@ void CoreAudioCapture::open(const ALCchar *name)
// Turn on AudioUnit input
enableIO = 1;
err = AudioUnitSetProperty(mAudioUnit, kAudioOutputUnitProperty_EnableIO,
kAudioUnitScope_Input, 1, &enableIO, sizeof(ALuint));
kAudioUnitScope_Input, 1, &enableIO, sizeof(enableIO));
if(err != noErr)
throw al::backend_exception{al::backend_error::DeviceError,
"Could not enable audio unit input property: %u", err};
@ -598,7 +598,7 @@ void CoreAudioCapture::open(const ALCchar *name)
/* Set up sample converter if needed */
if(outputFormat.mSampleRate != mDevice->Frequency)
mConverter = CreateSampleConverter(mDevice->FmtType, mDevice->FmtType,
mFormat.mChannelsPerFrame, static_cast<ALuint>(hardwareFormat.mSampleRate),
mFormat.mChannelsPerFrame, static_cast<uint>(hardwareFormat.mSampleRate),
mDevice->Frequency, Resampler::FastBSinc24);
mDevice->DeviceName = name;
@ -630,13 +630,13 @@ void CoreAudioCapture::captureSamples(al::byte *buffer, uint samples)
auto rec_vec = mRing->getReadVector();
const void *src0{rec_vec.first.buf};
auto src0len = static_cast<ALuint>(rec_vec.first.len);
auto src0len = static_cast<uint>(rec_vec.first.len);
uint got{mConverter->convert(&src0, &src0len, buffer, samples)};
size_t total_read{rec_vec.first.len - src0len};
if(got < samples && !src0len && rec_vec.second.len > 0)
{
const void *src1{rec_vec.second.buf};
auto src1len = static_cast<ALuint>(rec_vec.second.len);
auto src1len = static_cast<uint>(rec_vec.second.len);
got += mConverter->convert(&src1, &src1len, buffer + got*mFrameSize, samples-got);
total_read += rec_vec.second.len - src1len;
}

View File

@ -229,7 +229,7 @@ FORCE_ALIGN int DSoundPlayback::mixerProc()
}
const size_t FrameStep{mDevice->channelsFromFmt()};
ALuint FrameSize{mDevice->frameSizeFromFmt()};
uint FrameSize{mDevice->frameSizeFromFmt()};
DWORD FragSize{mDevice->UpdateSize * FrameSize};
bool Playing{false};
@ -306,7 +306,7 @@ FORCE_ALIGN int DSoundPlayback::mixerProc()
return 0;
}
void DSoundPlayback::open(const ALCchar *name)
void DSoundPlayback::open(const char *name)
{
HRESULT hr;
if(PlaybackDevices.empty())
@ -474,7 +474,7 @@ retry_open:
if(SUCCEEDED(hr))
{
ALuint num_updates{mDevice->BufferSize / mDevice->UpdateSize};
uint num_updates{mDevice->BufferSize / mDevice->UpdateSize};
if(num_updates > MAX_UPDATES)
num_updates = MAX_UPDATES;
mDevice->BufferSize = mDevice->UpdateSize * num_updates;
@ -502,11 +502,11 @@ retry_open:
{
mNotifies = static_cast<IDirectSoundNotify*>(ptr);
ALuint num_updates{mDevice->BufferSize / mDevice->UpdateSize};
uint num_updates{mDevice->BufferSize / mDevice->UpdateSize};
assert(num_updates <= MAX_UPDATES);
std::array<DSBPOSITIONNOTIFY,MAX_UPDATES> nots;
for(ALuint i{0};i < num_updates;++i)
for(uint i{0};i < num_updates;++i)
{
nots[i].dwOffset = i * mDevice->UpdateSize * OutputType.Format.nBlockAlign;
nots[i].hEventNotify = mNotifyEvent;
@ -562,7 +562,7 @@ struct DSoundCapture final : public BackendBase {
DSoundCapture(ALCdevice *device) noexcept : BackendBase{device} { }
~DSoundCapture() override;
void open(const ALCchar *name) override;
void open(const char *name) override;
void start() override;
void stop() override;
void captureSamples(al::byte *buffer, uint samples) override;
@ -593,7 +593,7 @@ DSoundCapture::~DSoundCapture()
}
void DSoundCapture::open(const ALCchar *name)
void DSoundCapture::open(const char *name)
{
HRESULT hr;
if(CaptureDevices.empty())
@ -684,7 +684,7 @@ void DSoundCapture::open(const ALCchar *name)
InputType.Format.cbSize = sizeof(WAVEFORMATEXTENSIBLE) - sizeof(WAVEFORMATEX);
}
ALuint samples{mDevice->BufferSize};
uint samples{mDevice->BufferSize};
samples = maxu(samples, 100 * mDevice->Frequency / 1000);
DSCBUFFERDESC DSCBDescription{};

View File

@ -46,7 +46,7 @@
namespace {
constexpr ALCchar jackDevice[] = "JACK Default";
constexpr char jackDevice[] = "JACK Default";
#ifdef HAVE_DYNLOAD
@ -214,7 +214,7 @@ struct JackPlayback final : public BackendBase {
int mixerProc();
void open(const ALCchar *name) override;
void open(const char *name) override;
bool reset() override;
void start() override;
void stop() override;
@ -266,7 +266,7 @@ int JackPlayback::process(jack_nframes_t numframes) noexcept
if LIKELY(mPlaying.load(std::memory_order_acquire))
{
auto data = mRing->getReadVector();
jack_nframes_t todo{minu(numframes, static_cast<ALuint>(data.first.len))};
jack_nframes_t todo{minu(numframes, static_cast<uint>(data.first.len))};
auto write_first = [&data,numchans,todo](float *outbuf) -> float*
{
const float *RESTRICT in = reinterpret_cast<float*>(data.first.buf);
@ -283,7 +283,7 @@ int JackPlayback::process(jack_nframes_t numframes) noexcept
std::transform(out.begin(), out.begin()+numchans, out.begin(), write_first);
total += todo;
todo = minu(numframes-total, static_cast<ALuint>(data.second.len));
todo = minu(numframes-total, static_cast<uint>(data.second.len));
if(todo > 0)
{
auto write_second = [&data,numchans,todo](float *outbuf) -> float*
@ -334,11 +334,11 @@ int JackPlayback::mixerProc()
}
auto data = mRing->getWriteVector();
auto todo = static_cast<ALuint>(data.first.len + data.second.len);
size_t todo{data.first.len + data.second.len};
todo -= todo%mDevice->UpdateSize;
ALuint len1{minu(static_cast<ALuint>(data.first.len), todo)};
ALuint len2{minu(static_cast<ALuint>(data.second.len), todo-len1)};
const auto len1 = static_cast<uint>(minz(data.first.len, todo));
const auto len2 = static_cast<uint>(minz(data.second.len, todo-len1));
std::lock_guard<std::mutex> _{mMutex};
mDevice->renderSamples(data.first.buf, len1, frame_step);
@ -351,7 +351,7 @@ int JackPlayback::mixerProc()
}
void JackPlayback::open(const ALCchar *name)
void JackPlayback::open(const char *name)
{
mPortPattern.clear();
@ -406,7 +406,7 @@ bool JackPlayback::reset()
mDevice->BufferSize = mDevice->UpdateSize * 2;
const char *devname{mDevice->DeviceName.c_str()};
ALuint bufsize{ConfigValueUInt(devname, "jack", "buffer-size").value_or(mDevice->UpdateSize)};
uint bufsize{ConfigValueUInt(devname, "jack", "buffer-size").value_or(mDevice->UpdateSize)};
bufsize = maxu(NextPowerOf2(bufsize), mDevice->UpdateSize);
mDevice->BufferSize = bufsize + mDevice->UpdateSize;
@ -487,7 +487,7 @@ void JackPlayback::start()
mDevice->UpdateSize = jack_get_buffer_size(mClient);
mDevice->BufferSize = mDevice->UpdateSize * 2;
ALuint bufsize{ConfigValueUInt(devname, "jack", "buffer-size").value_or(mDevice->UpdateSize)};
uint bufsize{ConfigValueUInt(devname, "jack", "buffer-size").value_or(mDevice->UpdateSize)};
bufsize = maxu(NextPowerOf2(bufsize), mDevice->UpdateSize);
mDevice->BufferSize = bufsize + mDevice->UpdateSize;

View File

@ -43,7 +43,7 @@ using std::chrono::seconds;
using std::chrono::milliseconds;
using std::chrono::nanoseconds;
constexpr ALCchar nullDevice[] = "No Output";
constexpr char nullDevice[] = "No Output";
struct NullBackend final : public BackendBase {
@ -51,7 +51,7 @@ struct NullBackend final : public BackendBase {
int mixerProc();
void open(const ALCchar *name) override;
void open(const char *name) override;
bool reset() override;
void start() override;
void stop() override;
@ -106,7 +106,7 @@ int NullBackend::mixerProc()
}
void NullBackend::open(const ALCchar *name)
void NullBackend::open(const char *name)
{
if(!name)
name = nullDevice;

View File

@ -25,7 +25,7 @@ struct OboePlayback final : public BackendBase, public oboe::AudioStreamCallback
oboe::DataCallbackResult onAudioReady(oboe::AudioStream *oboeStream, void *audioData,
int32_t numFrames) override;
void open(const ALCchar *name) override;
void open(const char *name) override;
bool reset() override;
void start() override;
void stop() override;
@ -55,7 +55,7 @@ oboe::DataCallbackResult OboePlayback::onAudioReady(oboe::AudioStream *oboeStrea
}
void OboePlayback::open(const ALCchar *name)
void OboePlayback::open(const char *name)
{
if(!name)
name = device_name;

View File

@ -54,7 +54,7 @@ namespace {
#define VCALL0(obj, func) ((*(obj))->func((obj) EXTRACT_VCALL_ARGS
constexpr ALCchar opensl_device[] = "OpenSL";
constexpr char opensl_device[] = "OpenSL";
SLuint32 GetChannelMask(DevFmtChannels chans)
@ -153,7 +153,7 @@ struct OpenSLPlayback final : public BackendBase {
int mixerProc();
void open(const ALCchar *name) override;
void open(const char *name) override;
bool reset() override;
void start() override;
void stop() override;
@ -266,10 +266,10 @@ int OpenSLPlayback::mixerProc()
std::unique_lock<std::mutex> dlock{mMutex};
auto data = mRing->getWriteVector();
mDevice->renderSamples(data.first.buf,
static_cast<ALuint>(data.first.len*mDevice->UpdateSize), frame_step);
static_cast<uint>(data.first.len)*mDevice->UpdateSize, frame_step);
if(data.second.len > 0)
mDevice->renderSamples(data.second.buf,
static_cast<ALuint>(data.second.len*mDevice->UpdateSize), frame_step);
static_cast<uint>(data.second.len)*mDevice->UpdateSize, frame_step);
size_t todo{data.first.len + data.second.len};
mRing->writeAdvance(todo);
@ -301,7 +301,7 @@ int OpenSLPlayback::mixerProc()
}
void OpenSLPlayback::open(const ALCchar *name)
void OpenSLPlayback::open(const char *name)
{
if(!name)
name = opensl_device;
@ -525,7 +525,7 @@ bool OpenSLPlayback::reset()
}
if(SL_RESULT_SUCCESS == result)
{
const ALuint num_updates{mDevice->BufferSize / mDevice->UpdateSize};
const uint num_updates{mDevice->BufferSize / mDevice->UpdateSize};
mRing = RingBuffer::Create(num_updates, mFrameSize*mDevice->UpdateSize, true);
}
@ -630,7 +630,7 @@ struct OpenSLCapture final : public BackendBase {
static void processC(SLAndroidSimpleBufferQueueItf bq, void *context) noexcept
{ static_cast<OpenSLCapture*>(context)->process(bq); }
void open(const ALCchar *name) override;
void open(const char *name) override;
void start() override;
void stop() override;
void captureSamples(al::byte *buffer, uint samples) override;
@ -671,7 +671,7 @@ void OpenSLCapture::process(SLAndroidSimpleBufferQueueItf) noexcept
}
void OpenSLCapture::open(const ALCchar* name)
void OpenSLCapture::open(const char* name)
{
if(!name)
name = opensl_device;
@ -695,16 +695,16 @@ void OpenSLCapture::open(const ALCchar* name)
{
mFrameSize = mDevice->frameSizeFromFmt();
/* Ensure the total length is at least 100ms */
ALuint length{maxu(mDevice->BufferSize, mDevice->Frequency/10)};
uint length{maxu(mDevice->BufferSize, mDevice->Frequency/10)};
/* Ensure the per-chunk length is at least 10ms, and no more than 50ms. */
ALuint update_len{clampu(mDevice->BufferSize/3, mDevice->Frequency/100,
uint update_len{clampu(mDevice->BufferSize/3, mDevice->Frequency/100,
mDevice->Frequency/100*5)};
ALuint num_updates{(length+update_len-1) / update_len};
uint num_updates{(length+update_len-1) / update_len};
mRing = RingBuffer::Create(num_updates, update_len*mFrameSize, false);
mDevice->UpdateSize = update_len;
mDevice->BufferSize = static_cast<ALuint>(mRing->writeSpace() * update_len);
mDevice->BufferSize = static_cast<uint>(mRing->writeSpace() * update_len);
}
if(SL_RESULT_SUCCESS == result)
{
@ -805,7 +805,7 @@ void OpenSLCapture::open(const ALCchar* name)
}
if(SL_RESULT_SUCCESS == result)
{
const ALuint chunk_size{mDevice->UpdateSize * mFrameSize};
const uint chunk_size{mDevice->UpdateSize * mFrameSize};
auto data = mRing->getWriteVector();
for(size_t i{0u};i < data.first.len && SL_RESULT_SUCCESS == result;i++)
@ -882,16 +882,16 @@ void OpenSLCapture::captureSamples(al::byte *buffer, uint samples)
}
}
const ALuint update_size{mDevice->UpdateSize};
const ALuint chunk_size{update_size * mFrameSize};
const uint update_size{mDevice->UpdateSize};
const uint chunk_size{update_size * mFrameSize};
/* Read the desired samples from the ring buffer then advance its read
* pointer.
*/
auto data = mRing->getReadVector();
for(ALCuint i{0};i < samples;)
for(uint i{0};i < samples;)
{
const ALCuint rem{minu(samples - i, update_size - mSplOffset)};
const uint rem{minu(samples - i, update_size - mSplOffset)};
std::copy_n(data.first.buf + mSplOffset*mFrameSize, rem*mFrameSize, buffer + i*mFrameSize);
mSplOffset += rem;

View File

@ -45,6 +45,7 @@
#include "alcmain.h"
#include "alconfig.h"
#include "albyte.h"
#include "alexcpt.h"
#include "almalloc.h"
#include "alnumeric.h"
@ -215,9 +216,9 @@ done:
#endif
ALCuint log2i(ALCuint x)
uint log2i(uint x)
{
ALCuint y{0};
uint y{0};
while(x > 1)
{
x >>= 1;
@ -233,14 +234,14 @@ struct OSSPlayback final : public BackendBase {
int mixerProc();
void open(const ALCchar *name) override;
void open(const char *name) override;
bool reset() override;
void start() override;
void stop() override;
int mFd{-1};
al::vector<ALubyte> mMixData;
al::vector<al::byte> mMixData;
std::atomic<bool> mKillNow{true};
std::thread mThread;
@ -262,10 +263,10 @@ int OSSPlayback::mixerProc()
althrd_setname(MIXER_THREAD_NAME);
const size_t frame_step{mDevice->channelsFromFmt()};
const ALuint frame_size{mDevice->frameSizeFromFmt()};
const size_t frame_size{mDevice->frameSizeFromFmt()};
while(!mKillNow.load(std::memory_order_acquire) &&
mDevice->Connected.load(std::memory_order_acquire))
while(!mKillNow.load(std::memory_order_acquire)
&& mDevice->Connected.load(std::memory_order_acquire))
{
pollfd pollitem{};
pollitem.fd = mFd;
@ -286,9 +287,9 @@ int OSSPlayback::mixerProc()
continue;
}
ALubyte *write_ptr{mMixData.data()};
al::byte *write_ptr{mMixData.data()};
size_t to_write{mMixData.size()};
mDevice->renderSamples(write_ptr, static_cast<ALuint>(to_write/frame_size), frame_step);
mDevice->renderSamples(write_ptr, static_cast<uint>(to_write/frame_size), frame_step);
while(to_write > 0 && !mKillNow.load(std::memory_order_acquire))
{
ssize_t wrote{write(mFd, write_ptr, to_write)};
@ -310,7 +311,7 @@ int OSSPlayback::mixerProc()
}
void OSSPlayback::open(const ALCchar *name)
void OSSPlayback::open(const char *name)
{
const char *devname{DefaultPlayback.c_str()};
if(!name)
@ -360,13 +361,13 @@ bool OSSPlayback::reset()
break;
}
ALuint periods{mDevice->BufferSize / mDevice->UpdateSize};
ALuint numChannels{mDevice->channelsFromFmt()};
ALuint ossSpeed{mDevice->Frequency};
ALuint frameSize{numChannels * mDevice->bytesFromFmt()};
uint periods{mDevice->BufferSize / mDevice->UpdateSize};
uint numChannels{mDevice->channelsFromFmt()};
uint ossSpeed{mDevice->Frequency};
uint frameSize{numChannels * mDevice->bytesFromFmt()};
/* According to the OSS spec, 16 bytes (log2(16)) is the minimum. */
ALuint log2FragmentSize{maxu(log2i(mDevice->UpdateSize*frameSize), 4)};
ALuint numFragmentsLogSize{(periods << 16) | log2FragmentSize};
uint log2FragmentSize{maxu(log2i(mDevice->UpdateSize*frameSize), 4)};
uint numFragmentsLogSize{(periods << 16) | log2FragmentSize};
audio_buf_info info{};
const char *err;
@ -406,8 +407,8 @@ bool OSSPlayback::reset()
}
mDevice->Frequency = ossSpeed;
mDevice->UpdateSize = static_cast<ALuint>(info.fragsize) / frameSize;
mDevice->BufferSize = static_cast<ALuint>(info.fragments) * mDevice->UpdateSize;
mDevice->UpdateSize = static_cast<uint>(info.fragsize) / frameSize;
mDevice->BufferSize = static_cast<uint>(info.fragments) * mDevice->UpdateSize;
setDefaultChannelOrder();
@ -445,7 +446,7 @@ struct OSScapture final : public BackendBase {
int recordProc();
void open(const ALCchar *name) override;
void open(const char *name) override;
void start() override;
void stop() override;
void captureSamples(al::byte *buffer, uint samples) override;
@ -474,7 +475,7 @@ int OSScapture::recordProc()
SetRTPriority();
althrd_setname(RECORD_THREAD_NAME);
const ALuint frame_size{mDevice->frameSizeFromFmt()};
const size_t frame_size{mDevice->frameSizeFromFmt()};
while(!mKillNow.load(std::memory_order_acquire))
{
pollfd pollitem{};
@ -506,7 +507,7 @@ int OSScapture::recordProc()
mDevice->handleDisconnect("Failed reading capture samples: %s", strerror(errno));
break;
}
mRing->writeAdvance(static_cast<ALuint>(amt)/frame_size);
mRing->writeAdvance(static_cast<size_t>(amt)/frame_size);
}
}
@ -514,7 +515,7 @@ int OSScapture::recordProc()
}
void OSScapture::open(const ALCchar *name)
void OSScapture::open(const char *name)
{
const char *devname{DefaultCapture.c_str()};
if(!name)
@ -559,13 +560,13 @@ void OSScapture::open(const ALCchar *name)
"%s capture samples not supported", DevFmtTypeString(mDevice->FmtType)};
}
ALuint periods{4};
ALuint numChannels{mDevice->channelsFromFmt()};
ALuint frameSize{numChannels * mDevice->bytesFromFmt()};
ALuint ossSpeed{mDevice->Frequency};
uint periods{4};
uint numChannels{mDevice->channelsFromFmt()};
uint frameSize{numChannels * mDevice->bytesFromFmt()};
uint ossSpeed{mDevice->Frequency};
/* according to the OSS spec, 16 bytes are the minimum */
ALuint log2FragmentSize{maxu(log2i(mDevice->BufferSize * frameSize / periods), 4)};
ALuint numFragmentsLogSize{(periods << 16) | log2FragmentSize};
uint log2FragmentSize{maxu(log2i(mDevice->BufferSize * frameSize / periods), 4)};
uint numFragmentsLogSize{(periods << 16) | log2FragmentSize};
audio_buf_info info{};
#define CHECKERR(func) if((func) < 0) { \

View File

@ -39,7 +39,7 @@
namespace {
constexpr ALCchar pa_device[] = "PortAudio Default";
constexpr char pa_device[] = "PortAudio Default";
#ifdef HAVE_DYNLOAD
@ -86,14 +86,14 @@ struct PortPlayback final : public BackendBase {
framesPerBuffer, timeInfo, statusFlags);
}
void open(const ALCchar *name) override;
void open(const char *name) override;
bool reset() override;
void start() override;
void stop() override;
PaStream *mStream{nullptr};
PaStreamParameters mParams{};
ALuint mUpdateSize{0u};
uint mUpdateSize{0u};
DEF_NEWDEL(PortPlayback)
};
@ -110,13 +110,13 @@ PortPlayback::~PortPlayback()
int PortPlayback::writeCallback(const void*, void *outputBuffer, unsigned long framesPerBuffer,
const PaStreamCallbackTimeInfo*, const PaStreamCallbackFlags) noexcept
{
mDevice->renderSamples(outputBuffer, static_cast<ALuint>(framesPerBuffer),
static_cast<ALuint>(mParams.channelCount));
mDevice->renderSamples(outputBuffer, static_cast<uint>(framesPerBuffer),
static_cast<uint>(mParams.channelCount));
return 0;
}
void PortPlayback::open(const ALCchar *name)
void PortPlayback::open(const char *name)
{
if(!name)
name = pa_device;
@ -177,7 +177,7 @@ retry_open:
bool PortPlayback::reset()
{
const PaStreamInfo *streamInfo{Pa_GetStreamInfo(mStream)};
mDevice->Frequency = static_cast<ALuint>(streamInfo->sampleRate);
mDevice->Frequency = static_cast<uint>(streamInfo->sampleRate);
mDevice->UpdateSize = mUpdateSize;
if(mParams.sampleFormat == paInt8)
@ -240,7 +240,7 @@ struct PortCapture final : public BackendBase {
framesPerBuffer, timeInfo, statusFlags);
}
void open(const ALCchar *name) override;
void open(const char *name) override;
void start() override;
void stop() override;
void captureSamples(al::byte *buffer, uint samples) override;
@ -271,7 +271,7 @@ int PortCapture::readCallback(const void *inputBuffer, void*, unsigned long fram
}
void PortCapture::open(const ALCchar *name)
void PortCapture::open(const char *name)
{
if(!name)
name = pa_device;
@ -279,9 +279,9 @@ void PortCapture::open(const ALCchar *name)
throw al::backend_exception{al::backend_error::NoDevice, "Device name \"%s\" not found",
name};
ALuint samples{mDevice->BufferSize};
uint samples{mDevice->BufferSize};
samples = maxu(samples, 100 * mDevice->Frequency / 1000);
ALuint frame_size{mDevice->frameSizeFromFmt()};
uint frame_size{mDevice->frameSizeFromFmt()};
mRing = RingBuffer::Create(samples, frame_size, false);

View File

@ -286,7 +286,7 @@ al::optional<Channel> ChannelFromPulse(pa_channel_position_t chan)
void SetChannelOrderFromMap(ALCdevice *device, const pa_channel_map &chanmap)
{
device->RealOut.ChannelIndex.fill(INVALID_CHANNEL_INDEX);
for(ALuint i{0};i < chanmap.channels;++i)
for(uint i{0};i < chanmap.channels;++i)
{
if(auto label = ChannelFromPulse(chanmap.map[i]))
device->RealOut.ChannelIndex[*label] = i;
@ -719,7 +719,7 @@ struct PulsePlayback final : public BackendBase {
static void streamMovedCallbackC(pa_stream *stream, void *pdata) noexcept
{ static_cast<PulsePlayback*>(pdata)->streamMovedCallback(stream); }
void open(const ALCchar *name) override;
void open(const char *name) override;
bool reset() override;
void start() override;
void stop() override;
@ -735,7 +735,7 @@ struct PulsePlayback final : public BackendBase {
pa_stream *mStream{nullptr};
pa_context *mContext{nullptr};
ALuint mFrameSize{0u};
uint mFrameSize{0u};
DEF_NEWDEL(PulsePlayback)
};
@ -788,7 +788,7 @@ void PulsePlayback::streamWriteCallback(pa_stream *stream, size_t nbytes) noexce
buflen = minz(buflen, nbytes);
nbytes -= buflen;
mDevice->renderSamples(buf, static_cast<ALuint>(buflen/mFrameSize), mSpec.channels);
mDevice->renderSamples(buf, static_cast<uint>(buflen/mFrameSize), mSpec.channels);
int ret{pa_stream_write(stream, buf, buflen, free_func, 0, PA_SEEK_RELATIVE)};
if UNLIKELY(ret != PA_OK)
@ -857,7 +857,7 @@ void PulsePlayback::streamMovedCallback(pa_stream *stream) noexcept
}
void PulsePlayback::open(const ALCchar *name)
void PulsePlayback::open(const char *name)
{
const char *pulse_name{nullptr};
const char *dev_name{nullptr};
@ -899,7 +899,7 @@ void PulsePlayback::open(const ALCchar *name)
BackendType::Playback);
pa_stream_set_moved_callback(mStream, &PulsePlayback::streamMovedCallbackC, this);
mFrameSize = static_cast<ALuint>(pa_frame_size(pa_stream_get_sample_spec(mStream)));
mFrameSize = static_cast<uint>(pa_frame_size(pa_stream_get_sample_spec(mStream)));
mDeviceName = pa_stream_get_device_name(mStream);
if(!dev_name)
@ -1007,7 +1007,7 @@ bool PulsePlayback::reset()
if(pa_sample_spec_valid(&mSpec) == 0)
throw al::backend_exception{al::backend_error::DeviceError, "Invalid sample spec"};
const ALuint frame_size{static_cast<ALuint>(pa_frame_size(&mSpec))};
const auto frame_size = static_cast<uint>(pa_frame_size(&mSpec));
mAttr.maxlength = ~0u;
mAttr.tlength = mDevice->BufferSize * frame_size;
mAttr.prebuf = 0u;
@ -1021,7 +1021,7 @@ bool PulsePlayback::reset()
pa_stream_set_moved_callback(mStream, &PulsePlayback::streamMovedCallbackC, this);
mSpec = *(pa_stream_get_sample_spec(mStream));
mFrameSize = static_cast<ALuint>(pa_frame_size(&mSpec));
mFrameSize = static_cast<uint>(pa_frame_size(&mSpec));
if(mDevice->Frequency != mSpec.rate)
{
@ -1029,10 +1029,10 @@ bool PulsePlayback::reset()
* accordingly.
*/
const auto scale = static_cast<double>(mSpec.rate) / mDevice->Frequency;
const ALuint perlen{static_cast<ALuint>(clampd(scale*mDevice->UpdateSize + 0.5, 64.0,
8192.0))};
const ALuint buflen{static_cast<ALuint>(clampd(scale*mDevice->BufferSize + 0.5, perlen*2,
std::numeric_limits<int>::max()/mFrameSize))};
const auto perlen = static_cast<uint>(clampd(scale*mDevice->UpdateSize + 0.5, 64.0,
8192.0));
const auto buflen = static_cast<uint>(clampd(scale*mDevice->BufferSize + 0.5, perlen*2,
std::numeric_limits<int>::max()/mFrameSize));
mAttr.maxlength = ~0u;
mAttr.tlength = buflen * mFrameSize;
@ -1148,7 +1148,7 @@ struct PulseCapture final : public BackendBase {
static void streamMovedCallbackC(pa_stream *stream, void *pdata) noexcept
{ static_cast<PulseCapture*>(pdata)->streamMovedCallback(stream); }
void open(const ALCchar *name) override;
void open(const char *name) override;
void start() override;
void stop() override;
void captureSamples(al::byte *buffer, uint samples) override;
@ -1212,7 +1212,7 @@ void PulseCapture::streamMovedCallback(pa_stream *stream) noexcept
}
void PulseCapture::open(const ALCchar *name)
void PulseCapture::open(const char *name)
{
const char *pulse_name{nullptr};
if(name)
@ -1288,8 +1288,8 @@ void PulseCapture::open(const ALCchar *name)
if(pa_sample_spec_valid(&mSpec) == 0)
throw al::backend_exception{al::backend_error::DeviceError, "Invalid sample format"};
const ALuint frame_size{static_cast<ALuint>(pa_frame_size(&mSpec))};
const ALuint samples{maxu(mDevice->BufferSize, 100 * mDevice->Frequency / 1000)};
const auto frame_size = static_cast<uint>(pa_frame_size(&mSpec));
const uint samples{maxu(mDevice->BufferSize, 100 * mDevice->Frequency / 1000)};
mAttr.minreq = ~0u;
mAttr.prebuf = ~0u;
mAttr.maxlength = samples * frame_size;

View File

@ -46,7 +46,7 @@ namespace {
#define DEVNAME_PREFIX ""
#endif
constexpr ALCchar defaultDeviceName[] = DEVNAME_PREFIX "Default Device";
constexpr char defaultDeviceName[] = DEVNAME_PREFIX "Default Device";
struct Sdl2Backend final : public BackendBase {
Sdl2Backend(ALCdevice *device) noexcept : BackendBase{device} { }
@ -56,7 +56,7 @@ struct Sdl2Backend final : public BackendBase {
static void audioCallbackC(void *ptr, Uint8 *stream, int len) noexcept
{ static_cast<Sdl2Backend*>(ptr)->audioCallback(stream, len); }
void open(const ALCchar *name) override;
void open(const char *name) override;
bool reset() override;
void start() override;
void stop() override;
@ -86,7 +86,7 @@ void Sdl2Backend::audioCallback(Uint8 *stream, int len) noexcept
mDevice->renderSamples(stream, ulen / mFrameSize, mDevice->channelsFromFmt());
}
void Sdl2Backend::open(const ALCchar *name)
void Sdl2Backend::open(const char *name)
{
SDL_AudioSpec want{}, have{};

View File

@ -42,7 +42,7 @@
namespace {
static const ALCchar sndio_device[] = "SndIO Default";
static const char sndio_device[] = "SndIO Default";
struct SndioPlayback final : public BackendBase {
@ -51,7 +51,7 @@ struct SndioPlayback final : public BackendBase {
int mixerProc();
void open(const ALCchar *name) override;
void open(const char *name) override;
bool reset() override;
void start() override;
void stop() override;
@ -95,7 +95,7 @@ int SndioPlayback::mixerProc()
al::byte *WritePtr{mBuffer.data()};
size_t len{mBuffer.size()};
mDevice->renderSamples(WritePtr, static_cast<ALuint>(len)/frameSize, frameStep);
mDevice->renderSamples(WritePtr, static_cast<uint>(len/frameSize), frameStep);
while(len > 0 && !mKillNow.load(std::memory_order_acquire))
{
size_t wrote{sio_write(mSndHandle, WritePtr, len)};
@ -115,7 +115,7 @@ int SndioPlayback::mixerProc()
}
void SndioPlayback::open(const ALCchar *name)
void SndioPlayback::open(const char *name)
{
if(!name)
name = sndio_device;
@ -294,7 +294,7 @@ struct SndioCapture final : public BackendBase {
int recordProc();
void open(const ALCchar *name) override;
void open(const char *name) override;
void start() override;
void stop() override;
void captureSamples(al::byte *buffer, uint samples) override;
@ -322,10 +322,10 @@ int SndioCapture::recordProc()
SetRTPriority();
althrd_setname(RECORD_THREAD_NAME);
const ALuint frameSize{mDevice->frameSizeFromFmt()};
const uint frameSize{mDevice->frameSizeFromFmt()};
while(!mKillNow.load(std::memory_order_acquire) &&
mDevice->Connected.load(std::memory_order_acquire))
while(!mKillNow.load(std::memory_order_acquire)
&& mDevice->Connected.load(std::memory_order_acquire))
{
auto data = mRing->getWriteVector();
size_t todo{data.first.len + data.second.len};
@ -364,7 +364,7 @@ int SndioCapture::recordProc()
}
void SndioCapture::open(const ALCchar *name)
void SndioCapture::open(const char *name)
{
if(!name)
name = sndio_device;

View File

@ -39,6 +39,7 @@
#include <functional>
#include "alcmain.h"
#include "albyte.h"
#include "alexcpt.h"
#include "alu.h"
#include "alconfig.h"
@ -52,7 +53,7 @@
namespace {
constexpr ALCchar solaris_device[] = "Solaris Default";
constexpr char solaris_device[] = "Solaris Default";
std::string solaris_driver{"/dev/audio"};
@ -63,14 +64,14 @@ struct SolarisBackend final : public BackendBase {
int mixerProc();
void open(const ALCchar *name) override;
void open(const char *name) override;
bool reset() override;
void start() override;
void stop() override;
int mFd{-1};
al::vector<ALubyte> mBuffer;
al::vector<al::byte> mBuffer;
std::atomic<bool> mKillNow{true};
std::thread mThread;
@ -91,10 +92,10 @@ int SolarisBackend::mixerProc()
althrd_setname(MIXER_THREAD_NAME);
const size_t frame_step{mDevice->channelsFromFmt()};
const ALuint frame_size{mDevice->frameSizeFromFmt()};
const uint frame_size{mDevice->frameSizeFromFmt()};
while(!mKillNow.load(std::memory_order_acquire) &&
mDevice->Connected.load(std::memory_order_acquire))
while(!mKillNow.load(std::memory_order_acquire)
&& mDevice->Connected.load(std::memory_order_acquire))
{
pollfd pollitem{};
pollitem.fd = mFd;
@ -115,9 +116,9 @@ int SolarisBackend::mixerProc()
continue;
}
ALubyte *write_ptr{mBuffer.data()};
al::byte *write_ptr{mBuffer.data()};
size_t to_write{mBuffer.size()};
mDevice->renderSamples(write_ptr, static_cast<ALuint>(to_write/frame_size), frame_step);
mDevice->renderSamples(write_ptr, static_cast<uint>(to_write/frame_size), frame_step);
while(to_write > 0 && !mKillNow.load(std::memory_order_acquire))
{
ssize_t wrote{write(mFd, write_ptr, to_write)};
@ -139,7 +140,7 @@ int SolarisBackend::mixerProc()
}
void SolarisBackend::open(const ALCchar *name)
void SolarisBackend::open(const char *name)
{
if(!name)
name = solaris_device;
@ -164,7 +165,7 @@ bool SolarisBackend::reset()
if(mDevice->FmtChans != DevFmtMono)
mDevice->FmtChans = DevFmtStereo;
ALuint numChannels{mDevice->channelsFromFmt()};
uint numChannels{mDevice->channelsFromFmt()};
info.play.channels = numChannels;
switch(mDevice->FmtType)
@ -189,7 +190,7 @@ bool SolarisBackend::reset()
break;
}
ALuint frameSize{numChannels * mDevice->bytesFromFmt()};
uint frameSize{numChannels * mDevice->bytesFromFmt()};
info.play.buffer_size = mDevice->BufferSize * frameSize;
if(ioctl(mFd, AUDIO_SETINFO, &info) < 0)
@ -222,7 +223,7 @@ bool SolarisBackend::reset()
setDefaultChannelOrder();
mBuffer.resize(mDevice->UpdateSize * mDevice->frameSizeFromFmt());
std::fill(mBuffer.begin(), mBuffer.end(), 0);
std::fill(mBuffer.begin(), mBuffer.end(), al::byte{});
return true;
}

View File

@ -122,10 +122,10 @@ constexpr DWORD X71Mask{MaskFromTopBits(X7DOT1)};
/* Scales the given reftime value, rounding the result. */
inline ALuint RefTime2Samples(const ReferenceTime &val, ALuint srate)
inline uint RefTime2Samples(const ReferenceTime &val, uint srate)
{
const auto retval = (val*srate + ReferenceTime{seconds{1}}/2) / seconds{1};
return static_cast<ALuint>(mini64(retval, std::numeric_limits<ALuint>::max()));
return static_cast<uint>(mini64(retval, std::numeric_limits<uint>::max()));
}
@ -596,12 +596,12 @@ int WasapiProxy::messageHandler(std::promise<HRESULT> *promise)
promise = nullptr;
TRACE("Starting message loop\n");
ALuint deviceCount{0};
uint deviceCount{0};
Msg msg;
while(popMessage(msg))
{
TRACE("Got message \"%s\" (0x%04x, this=%p)\n",
MessageStr[static_cast<size_t>(msg.mType)], static_cast<int>(msg.mType),
MessageStr[static_cast<size_t>(msg.mType)], static_cast<uint>(msg.mType),
decltype(std::declval<void*>()){msg.mProxy});
switch(msg.mType)
@ -670,7 +670,7 @@ int WasapiProxy::messageHandler(std::promise<HRESULT> *promise)
continue;
default:
ERR("Unexpected message: %u\n", static_cast<unsigned int>(msg.mType));
ERR("Unexpected message: %u\n", static_cast<uint>(msg.mType));
msg.mPromise.set_value(E_FAIL);
continue;
}
@ -687,7 +687,7 @@ struct WasapiPlayback final : public BackendBase, WasapiProxy {
int mixerProc();
void open(const ALCchar *name) override;
void open(const char *name) override;
HRESULT openProxy() override;
void closeProxy() override;
@ -744,7 +744,7 @@ FORCE_ALIGN int WasapiPlayback::mixerProc()
SetRTPriority();
althrd_setname(MIXER_THREAD_NAME);
const ALuint update_size{mDevice->UpdateSize};
const uint update_size{mDevice->UpdateSize};
const UINT32 buffer_len{mDevice->BufferSize};
while(!mKillNow.load(std::memory_order_relaxed))
{
@ -758,7 +758,7 @@ FORCE_ALIGN int WasapiPlayback::mixerProc()
}
mPadding.store(written, std::memory_order_relaxed);
ALuint len{buffer_len - written};
uint len{buffer_len - written};
if(len < update_size)
{
DWORD res{WaitForSingleObjectEx(mNotifyEvent, 2000, FALSE)};
@ -792,7 +792,7 @@ FORCE_ALIGN int WasapiPlayback::mixerProc()
}
void WasapiPlayback::open(const ALCchar *name)
void WasapiPlayback::open(const char *name)
{
HRESULT hr{S_OK};
@ -1225,7 +1225,7 @@ struct WasapiCapture final : public BackendBase, WasapiProxy {
int recordProc();
void open(const ALCchar *name) override;
void open(const char *name) override;
HRESULT openProxy() override;
void closeProxy() override;
@ -1311,10 +1311,10 @@ FORCE_ALIGN int WasapiCapture::recordProc()
if(mSampleConv)
{
const void *srcdata{rdata};
ALuint srcframes{numsamples};
uint srcframes{numsamples};
dstframes = mSampleConv->convert(&srcdata, &srcframes, data.first.buf,
static_cast<ALuint>(minz(data.first.len, INT_MAX)));
static_cast<uint>(minz(data.first.len, INT_MAX)));
if(srcframes > 0 && dstframes == data.first.len && data.second.len > 0)
{
/* If some source samples remain, all of the first dest
@ -1322,12 +1322,12 @@ FORCE_ALIGN int WasapiCapture::recordProc()
* dest block, do another run for the second block.
*/
dstframes += mSampleConv->convert(&srcdata, &srcframes, data.second.buf,
static_cast<ALuint>(minz(data.second.len, INT_MAX)));
static_cast<uint>(minz(data.second.len, INT_MAX)));
}
}
else
{
const auto framesize = static_cast<ALuint>(mDevice->frameSizeFromFmt());
const uint framesize{mDevice->frameSizeFromFmt()};
size_t len1{minz(data.first.len, numsamples)};
size_t len2{minz(data.second.len, numsamples-len1)};
@ -1360,7 +1360,7 @@ FORCE_ALIGN int WasapiCapture::recordProc()
}
void WasapiCapture::open(const ALCchar *name)
void WasapiCapture::open(const char *name)
{
HRESULT hr{S_OK};
@ -1639,7 +1639,7 @@ HRESULT WasapiCapture::resetProxy()
if(mDevice->FmtChans == DevFmtMono && InputType.Format.nChannels != 1)
{
ALuint chanmask{(1u<<InputType.Format.nChannels) - 1u};
uint chanmask{(1u<<InputType.Format.nChannels) - 1u};
/* Exclude LFE from the downmix. */
if((InputType.dwChannelMask&SPEAKER_LOW_FREQUENCY))
{
@ -1799,7 +1799,7 @@ bool WasapiBackendFactory::init()
catch(...) {
}
return SUCCEEDED(InitResult) ? ALC_TRUE : ALC_FALSE;
return SUCCEEDED(InitResult);
}
bool WasapiBackendFactory::querySupport(BackendType type)

View File

@ -56,37 +56,40 @@ using std::chrono::seconds;
using std::chrono::milliseconds;
using std::chrono::nanoseconds;
constexpr ALCchar waveDevice[] = "Wave File Writer";
using ubyte = unsigned char;
using ushort = unsigned short;
constexpr ALubyte SUBTYPE_PCM[]{
constexpr char waveDevice[] = "Wave File Writer";
constexpr ubyte SUBTYPE_PCM[]{
0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x80, 0x00, 0x00, 0xaa,
0x00, 0x38, 0x9b, 0x71
};
constexpr ALubyte SUBTYPE_FLOAT[]{
constexpr ubyte SUBTYPE_FLOAT[]{
0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x80, 0x00, 0x00, 0xaa,
0x00, 0x38, 0x9b, 0x71
};
constexpr ALubyte SUBTYPE_BFORMAT_PCM[]{
constexpr ubyte SUBTYPE_BFORMAT_PCM[]{
0x01, 0x00, 0x00, 0x00, 0x21, 0x07, 0xd3, 0x11, 0x86, 0x44, 0xc8, 0xc1,
0xca, 0x00, 0x00, 0x00
};
constexpr ALubyte SUBTYPE_BFORMAT_FLOAT[]{
constexpr ubyte SUBTYPE_BFORMAT_FLOAT[]{
0x03, 0x00, 0x00, 0x00, 0x21, 0x07, 0xd3, 0x11, 0x86, 0x44, 0xc8, 0xc1,
0xca, 0x00, 0x00, 0x00
};
void fwrite16le(ALushort val, FILE *f)
void fwrite16le(ushort val, FILE *f)
{
ALubyte data[2]{ static_cast<ALubyte>(val&0xff), static_cast<ALubyte>((val>>8)&0xff) };
ubyte data[2]{ static_cast<ubyte>(val&0xff), static_cast<ubyte>((val>>8)&0xff) };
fwrite(data, 1, 2, f);
}
void fwrite32le(ALuint val, FILE *f)
void fwrite32le(uint val, FILE *f)
{
ALubyte data[4]{ static_cast<ALubyte>(val&0xff), static_cast<ALubyte>((val>>8)&0xff),
static_cast<ALubyte>((val>>16)&0xff), static_cast<ALubyte>((val>>24)&0xff) };
ubyte data[4]{ static_cast<ubyte>(val&0xff), static_cast<ubyte>((val>>8)&0xff),
static_cast<ubyte>((val>>16)&0xff), static_cast<ubyte>((val>>24)&0xff) };
fwrite(data, 1, 4, f);
}
@ -97,7 +100,7 @@ struct WaveBackend final : public BackendBase {
int mixerProc();
void open(const ALCchar *name) override;
void open(const char *name) override;
bool reset() override;
void start() override;
void stop() override;
@ -127,7 +130,7 @@ int WaveBackend::mixerProc()
althrd_setname(MIXER_THREAD_NAME);
const size_t frameStep{mDevice->channelsFromFmt()};
const ALuint frameSize{mDevice->frameSizeFromFmt()};
const size_t frameSize{mDevice->frameSizeFromFmt()};
int64_t done{0};
auto start = std::chrono::steady_clock::now();
@ -151,25 +154,25 @@ int WaveBackend::mixerProc()
if /*constexpr*/(!IS_LITTLE_ENDIAN)
{
const ALuint bytesize{mDevice->bytesFromFmt()};
const uint bytesize{mDevice->bytesFromFmt()};
if(bytesize == 2)
{
ALushort *samples = reinterpret_cast<ALushort*>(mBuffer.data());
ushort *samples = reinterpret_cast<ushort*>(mBuffer.data());
const size_t len{mBuffer.size() / 2};
for(size_t i{0};i < len;i++)
{
const ALushort samp{samples[i]};
samples[i] = static_cast<ALushort>((samp>>8) | (samp<<8));
const ushort samp{samples[i]};
samples[i] = static_cast<ushort>((samp>>8) | (samp<<8));
}
}
else if(bytesize == 4)
{
ALuint *samples = reinterpret_cast<ALuint*>(mBuffer.data());
uint *samples = reinterpret_cast<uint*>(mBuffer.data());
const size_t len{mBuffer.size() / 4};
for(size_t i{0};i < len;i++)
{
const ALuint samp{samples[i]};
const uint samp{samples[i]};
samples[i] = (samp>>24) | ((samp>>8)&0x0000ff00) |
((samp<<8)&0x00ff0000) | (samp<<24);
}
@ -202,7 +205,7 @@ int WaveBackend::mixerProc()
return 0;
}
void WaveBackend::open(const ALCchar *name)
void WaveBackend::open(const char *name)
{
const char *fname{GetConfigValue(nullptr, "wave", "file", "")};
if(!fname[0]) throw al::backend_exception{al::backend_error::NoDevice,
@ -231,8 +234,8 @@ void WaveBackend::open(const ALCchar *name)
bool WaveBackend::reset()
{
ALuint channels=0, bytes=0, chanmask=0;
int isbformat = 0;
uint channels{0}, bytes{0}, chanmask{0};
bool isbformat{false};
size_t val;
fseek(mFile, 0, SEEK_SET);
@ -275,7 +278,7 @@ bool WaveBackend::reset()
mDevice->mAmbiOrder = minu(mDevice->mAmbiOrder, 3);
mDevice->mAmbiLayout = DevAmbiLayout::FuMa;
mDevice->mAmbiScale = DevAmbiScaling::FuMa;
isbformat = 1;
isbformat = true;
chanmask = 0;
break;
}
@ -295,19 +298,19 @@ bool WaveBackend::reset()
// 16-bit val, format type id (extensible: 0xFFFE)
fwrite16le(0xFFFE, mFile);
// 16-bit val, channel count
fwrite16le(static_cast<ALushort>(channels), mFile);
fwrite16le(static_cast<ushort>(channels), mFile);
// 32-bit val, frequency
fwrite32le(mDevice->Frequency, mFile);
// 32-bit val, bytes per second
fwrite32le(mDevice->Frequency * channels * bytes, mFile);
// 16-bit val, frame size
fwrite16le(static_cast<ALushort>(channels * bytes), mFile);
fwrite16le(static_cast<ushort>(channels * bytes), mFile);
// 16-bit val, bits per sample
fwrite16le(static_cast<ALushort>(bytes * 8), mFile);
fwrite16le(static_cast<ushort>(bytes * 8), mFile);
// 16-bit val, extra byte count
fwrite16le(22, mFile);
// 16-bit val, valid bits per sample
fwrite16le(static_cast<ALushort>(bytes * 8), mFile);
fwrite16le(static_cast<ushort>(bytes * 8), mFile);
// 32-bit val, channel mask
fwrite32le(chanmask, mFile);
// 16 byte GUID, sub-type format
@ -328,7 +331,7 @@ bool WaveBackend::reset()
setDefaultWFXChannelOrder();
const ALuint bufsize{mDevice->frameSizeFromFmt() * mDevice->UpdateSize};
const uint bufsize{mDevice->frameSizeFromFmt() * mDevice->UpdateSize};
mBuffer.resize(bufsize);
return true;
@ -357,9 +360,9 @@ void WaveBackend::stop()
{
long dataLen{size - mDataStart};
if(fseek(mFile, mDataStart-4, SEEK_SET) == 0)
fwrite32le(static_cast<ALuint>(dataLen), mFile); // 'data' header len
fwrite32le(static_cast<uint>(dataLen), mFile); // 'data' header len
if(fseek(mFile, 4, SEEK_SET) == 0)
fwrite32le(static_cast<ALuint>(size-8), mFile); // 'WAVE' header len
fwrite32le(static_cast<uint>(size-8), mFile); // 'WAVE' header len
}
}

View File

@ -66,9 +66,9 @@ void ProbePlaybackDevices(void)
{
PlaybackDevices.clear();
ALuint numdevs{waveOutGetNumDevs()};
UINT numdevs{waveOutGetNumDevs()};
PlaybackDevices.reserve(numdevs);
for(ALuint i{0};i < numdevs;i++)
for(UINT i{0};i < numdevs;++i)
{
std::string dname;
@ -97,9 +97,9 @@ void ProbeCaptureDevices(void)
{
CaptureDevices.clear();
ALuint numdevs{waveInGetNumDevs()};
UINT numdevs{waveInGetNumDevs()};
CaptureDevices.reserve(numdevs);
for(ALuint i{0};i < numdevs;i++)
for(UINT i{0};i < numdevs;++i)
{
std::string dname;
@ -135,14 +135,14 @@ struct WinMMPlayback final : public BackendBase {
int mixerProc();
void open(const ALCchar *name) override;
void open(const char *name) override;
bool reset() override;
void start() override;
void stop() override;
std::atomic<ALuint> mWritable{0u};
std::atomic<uint> mWritable{0u};
al::semaphore mSem;
ALuint mIdx{0u};
uint mIdx{0u};
std::array<WAVEHDR,4> mWaveBuffer{};
HWAVEOUT mOutHdl{nullptr};
@ -184,10 +184,10 @@ FORCE_ALIGN int WinMMPlayback::mixerProc()
const size_t frame_step{mDevice->channelsFromFmt()};
while(!mKillNow.load(std::memory_order_acquire) &&
mDevice->Connected.load(std::memory_order_acquire))
while(!mKillNow.load(std::memory_order_acquire)
&& mDevice->Connected.load(std::memory_order_acquire))
{
ALsizei todo = mWritable.load(std::memory_order_acquire);
uint todo{mWritable.load(std::memory_order_acquire)};
if(todo < 1)
{
mSem.wait();
@ -203,14 +203,14 @@ FORCE_ALIGN int WinMMPlayback::mixerProc()
mWritable.fetch_sub(1, std::memory_order_acq_rel);
waveOutWrite(mOutHdl, &waveHdr, sizeof(WAVEHDR));
} while(--todo);
mIdx = static_cast<ALuint>(widx);
mIdx = static_cast<uint>(widx);
}
return 0;
}
void WinMMPlayback::open(const ALCchar *name)
void WinMMPlayback::open(const char *name)
{
if(PlaybackDevices.empty())
ProbePlaybackDevices();
@ -263,7 +263,7 @@ retry_open:
bool WinMMPlayback::reset()
{
mDevice->BufferSize = static_cast<ALuint>(uint64_t{mDevice->BufferSize} *
mDevice->BufferSize = static_cast<uint>(uint64_t{mDevice->BufferSize} *
mFormat.nSamplesPerSec / mDevice->Frequency);
mDevice->BufferSize = (mDevice->BufferSize+3) & ~0x3u;
mDevice->UpdateSize = mDevice->BufferSize / 4;
@ -297,7 +297,7 @@ bool WinMMPlayback::reset()
return false;
}
ALuint chanmask{};
uint chanmask{};
if(mFormat.nChannels == 2)
{
mDevice->FmtChans = DevFmtStereo;
@ -315,7 +315,7 @@ bool WinMMPlayback::reset()
}
setChannelOrderFromWFXMask(chanmask);
ALuint BufferSize{mDevice->UpdateSize * mDevice->frameSizeFromFmt()};
uint BufferSize{mDevice->UpdateSize * mDevice->frameSizeFromFmt()};
al_free(mWaveBuffer[0].lpData);
mWaveBuffer[0] = WAVEHDR{};
@ -337,9 +337,8 @@ void WinMMPlayback::start()
try {
std::for_each(mWaveBuffer.begin(), mWaveBuffer.end(),
[this](WAVEHDR &waveHdr) -> void
{ waveOutPrepareHeader(mOutHdl, &waveHdr, static_cast<UINT>(sizeof(WAVEHDR))); }
);
mWritable.store(static_cast<ALuint>(mWaveBuffer.size()), std::memory_order_release);
{ waveOutPrepareHeader(mOutHdl, &waveHdr, sizeof(WAVEHDR)); });
mWritable.store(static_cast<uint>(mWaveBuffer.size()), std::memory_order_release);
mKillNow.store(false, std::memory_order_release);
mThread = std::thread{std::mem_fn(&WinMMPlayback::mixerProc), this};
@ -360,8 +359,7 @@ void WinMMPlayback::stop()
mSem.wait();
std::for_each(mWaveBuffer.begin(), mWaveBuffer.end(),
[this](WAVEHDR &waveHdr) -> void
{ waveOutUnprepareHeader(mOutHdl, &waveHdr, sizeof(WAVEHDR)); }
);
{ waveOutUnprepareHeader(mOutHdl, &waveHdr, sizeof(WAVEHDR)); });
mWritable.store(0, std::memory_order_release);
}
@ -376,15 +374,15 @@ struct WinMMCapture final : public BackendBase {
int captureProc();
void open(const ALCchar *name) override;
void open(const char *name) override;
void start() override;
void stop() override;
void captureSamples(al::byte *buffer, uint samples) override;
uint availableSamples() override;
std::atomic<ALuint> mReadable{0u};
std::atomic<uint> mReadable{0u};
al::semaphore mSem;
ALuint mIdx{0};
uint mIdx{0};
std::array<WAVEHDR,4> mWaveBuffer{};
HWAVEIN mInHdl{nullptr};
@ -429,7 +427,7 @@ int WinMMCapture::captureProc()
while(!mKillNow.load(std::memory_order_acquire) &&
mDevice->Connected.load(std::memory_order_acquire))
{
ALuint todo{mReadable.load(std::memory_order_acquire)};
uint todo{mReadable.load(std::memory_order_acquire)};
if(todo < 1)
{
mSem.wait();
@ -445,14 +443,14 @@ int WinMMCapture::captureProc()
mReadable.fetch_sub(1, std::memory_order_acq_rel);
waveInAddBuffer(mInHdl, &waveHdr, sizeof(WAVEHDR));
} while(--todo);
mIdx = static_cast<ALuint>(widx);
mIdx = static_cast<uint>(widx);
}
return 0;
}
void WinMMCapture::open(const ALCchar *name)
void WinMMCapture::open(const char *name)
{
if(CaptureDevices.empty())
ProbeCaptureDevices();
@ -519,8 +517,8 @@ void WinMMCapture::open(const ALCchar *name)
// Allocate circular memory buffer for the captured audio
// Make sure circular buffer is at least 100ms in size
ALuint CapturedDataSize{mDevice->BufferSize};
CapturedDataSize = static_cast<ALuint>(maxz(CapturedDataSize, BufferSize*mWaveBuffer.size()));
uint CapturedDataSize{mDevice->BufferSize};
CapturedDataSize = static_cast<uint>(maxz(CapturedDataSize, BufferSize*mWaveBuffer.size()));
mRing = RingBuffer::Create(CapturedDataSize, mFormat.nBlockAlign, false);