#include <glibmm.h>
#include "coreaudio_pcmio.h"
+using namespace ARDOUR;
+
/* abstraction for deprecated CoreAudio */
static OSStatus GetPropertyWrapper (
return -1;
}
- int numRates = size / sizeof(AudioValueRange);
+ uint32_t numRates = size / sizeof(AudioValueRange);
AudioValueRange* supportedRates = new AudioValueRange[numRates];
err = GetPropertyWrapper (_device_ids[device_id], 0, false, kAudioDevicePropertyAvailableNominalSampleRates, &size, supportedRates);
/* query number of inputs */
err = GetPropertyInfoWrapper (_device_ids[device_id], 0, input, kAudioDevicePropertyStreamConfiguration, &size);
if (kAudioHardwareNoError != err) {
- fprintf(stderr, "CoreaAudioPCM: kAudioDevicePropertyStreamConfiguration failed: %i\n", err);
+ fprintf(stderr, "CoreaAudioPCM: kAudioDevicePropertyStreamConfiguration failed\n");
return 0;
}
err = GetPropertyWrapper (_device_ids[device_id], 0, input, kAudioDevicePropertyStreamConfiguration, &size, bufferList);
if(kAudioHardwareNoError != err) {
- fprintf(stderr, "CoreaAudioPCM: kAudioDevicePropertyStreamConfiguration failed: %i\n", err);
+ fprintf(stderr, "CoreaAudioPCM: kAudioDevicePropertyStreamConfiguration failed\n");
free(bufferList);
return 0;
}
return;
}
#ifndef NDEBUG
- printf(" ^ Stream %d latency: %d\n", i, stream_latency);
+ printf(" ^ Stream %u latency: %u\n", (unsigned int)i, (unsigned int)stream_latency);
#endif
latencies.push_back(stream_latency);
}
}
#ifndef NDEBUG
- printf("%s Latency systemic+safetyoffset = %d + %d\n",
- input ? "Input" : "Output", lat0, latS);
+ printf("%s Latency systemic+safetyoffset = %u + %u\n",
+ input ? "Input" : "Output", (unsigned int)lat0, (unsigned int)latS);
#endif
latency = lat0 + latS;
}
int
-CoreAudioPCM::set_device_sample_rate (AudioDeviceID device_id, float rate, bool input)
+CoreAudioPCM::set_device_sample_rate (uint32_t device_id, float rate, bool input)
{
return set_device_sample_rate_id(_device_ids[device_id], rate, input);
}
err = GetPropertyWrapper (_device_ids[idx], 0, 0, kAudioDevicePropertyDeviceName, &size, deviceName);
if (kAudioHardwareNoError != err) {
- fprintf(stderr, "CoreAudioPCM: device name query failed: %i\n", err);
+ fprintf(stderr, "CoreAudioPCM: device name query failed\n");
continue;
}
_device_ins[idx] = inputChannelCount;
_device_outs[idx] = outputChannelCount;
#ifndef NDEBUG
- printf("CoreAudio Device: #%ld (id:%u) '%s' in:%d out:%d\n", idx, _device_ids[idx], deviceName, inputChannelCount, outputChannelCount);
+ printf("CoreAudio Device: #%ld (id:%lu) '%s' in:%u out:%u\n", idx,
+ (long unsigned int)_device_ids[idx],
+ deviceName,
+ (unsigned int)inputChannelCount, (unsigned int)outputChannelCount);
#endif
if (outputChannelCount > 0 || inputChannelCount > 0) {
_devices.insert (std::pair<size_t, std::string> (idx, dn));
static void PrintStreamDesc (AudioStreamBasicDescription *inDesc)
{
printf ("- - - - - - - - - - - - - - - - - - - -\n");
- printf (" Sample Rate:%f", inDesc->mSampleRate);
- printf (" Format ID:%.*s\n", (int)sizeof(inDesc->mFormatID), (char*)&inDesc->mFormatID);
- printf (" Format Flags:%X\n", inDesc->mFormatFlags);
- printf (" Bytes per Packet:%d\n", inDesc->mBytesPerPacket);
- printf (" Frames per Packet:%d\n", inDesc->mFramesPerPacket);
- printf (" Bytes per Frame:%d\n", inDesc->mBytesPerFrame);
- printf (" Channels per Frame:%d\n", inDesc->mChannelsPerFrame);
- printf (" Bits per Channel:%d\n", inDesc->mBitsPerChannel);
+ printf (" Sample Rate:%.2f", inDesc->mSampleRate);
+ printf (" Format ID:%.*s\n", (int)sizeof(inDesc->mFormatID), (char*)&inDesc->mFormatID);
+ printf (" Format Flags:%X\n", (unsigned int)inDesc->mFormatFlags);
+ printf (" Bytes per Packet:%d\n", (int)inDesc->mBytesPerPacket);
+ printf (" Frames per Packet:%d\n", (int)inDesc->mFramesPerPacket);
+ printf (" Bytes per Frame:%d\n", (int)inDesc->mBytesPerFrame);
+ printf (" Channels per Frame:%d\n", (int)inDesc->mChannelsPerFrame);
+ printf (" Bits per Channel:%d\n", (int)inDesc->mBitsPerChannel);
printf ("- - - - - - - - - - - - - - - - - - - -\n");
}
#endif
CoreAudioPCM::pcm_start (
uint32_t device_id_in, uint32_t device_id_out,
uint32_t sample_rate, uint32_t samples_per_period,
- int (process_callback (void*)), void *process_arg)
+ int (process_callback (void*, const uint32_t, const uint64_t)), void *process_arg)
{
assert(_device_ids);
/* prepare buffers for input */
if (_capture_channels > 0) {
- _input_audio_buffer_list = (AudioBufferList*)malloc(sizeof(UInt32) + _capture_channels * sizeof(AudioBuffer));
+ _input_audio_buffer_list = (AudioBufferList*)malloc(sizeof(AudioBufferList) + (_capture_channels - 1) * sizeof(AudioBuffer));
assert(_input_audio_buffer_list);
if (!_input_audio_buffer_list) { errorMsg="Out of Memory."; goto error; }
}
if (_samples_per_period < inNumberFrames) {
#ifndef NDEBUG
- printf("samples per period exceeds configured value, skip cycle. %d < %d\n", _samples_per_period, inNumberFrames);
+ printf("samples per period exceeds configured value, cycle skipped (%u < %u)\n",
+ (unsigned int)_samples_per_period, (unsigned int)inNumberFrames);
#endif
for (uint32_t i = 0; _playback_channels > 0 && i < ioData->mNumberBuffers; ++i) {
float* ob = (float*) ioData->mBuffers[i].mData;
assert(_playback_channels == 0 || ioData->mNumberBuffers == _playback_channels);
+ UInt64 cur_cycle_start = AudioGetCurrentHostTime ();
_cur_samples_per_period = inNumberFrames;
-
if (_capture_channels > 0) {
_input_audio_buffer_list->mNumberBuffers = _capture_channels;
for (uint32_t i = 0; i < _capture_channels; ++i) {
int rv = -1;
if (_process_callback) {
- rv = _process_callback(_process_arg);
+ rv = _process_callback(_process_arg, inNumberFrames, cur_cycle_start);
}
_in_process = false;