interpret CoreMidi unique ID as unsigned for consistency.
[ardour.git] / libs / backends / coreaudio / coreaudio_pcmio.cc
index 10edbe5aca5886bb280238b713d1c30ed4d2080e..0b31a9a3ffff27a250b8d8aa1880e82248277984 100644 (file)
@@ -19,6 +19,8 @@
 #include <glibmm.h>
 #include "coreaudio_pcmio.h"
 
+using namespace ARDOUR;
+
 /* abstraction for deprecated CoreAudio */
 
 static OSStatus GetPropertyWrapper (
@@ -293,7 +295,7 @@ CoreAudioPCM::available_sample_rates(uint32_t device_id, std::vector<float>& sam
                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);
@@ -369,7 +371,7 @@ CoreAudioPCM::available_channels(uint32_t device_id, bool input)
        /* 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;
        }
 
@@ -380,7 +382,7 @@ CoreAudioPCM::available_channels(uint32_t device_id, bool input)
        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;
        }
@@ -431,7 +433,7 @@ CoreAudioPCM::get_stream_latencies(uint32_t device_id, bool input, std::vector<u
                        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);
        }
@@ -461,8 +463,8 @@ CoreAudioPCM::get_latency(uint32_t device_id, bool input)
        }
 
 #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;
 
@@ -558,7 +560,7 @@ CoreAudioPCM::set_device_sample_rate_id (AudioDeviceID id, float rate, bool inpu
 }
 
 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);
 }
@@ -607,7 +609,7 @@ CoreAudioPCM::discover()
                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;
                }
 
@@ -619,7 +621,10 @@ CoreAudioPCM::discover()
                        _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));
@@ -721,14 +726,14 @@ CoreAudioPCM::pcm_stop ()
 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
@@ -762,7 +767,7 @@ int
 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);
@@ -910,7 +915,7 @@ CoreAudioPCM::pcm_start (
 
        /* 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; }
        }
@@ -1080,7 +1085,8 @@ CoreAudioPCM::render_callback (
 
        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;
@@ -1091,9 +1097,9 @@ CoreAudioPCM::render_callback (
 
        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) {
@@ -1123,7 +1129,7 @@ CoreAudioPCM::render_callback (
        int rv = -1;
 
        if (_process_callback) {
-               rv = _process_callback(_process_arg);
+               rv = _process_callback(_process_arg, inNumberFrames, cur_cycle_start);
        }
 
        _in_process = false;