Fixed mac sound backend initialization.
authorArmin Novak <armin.novak@thincast.com>
Thu, 3 May 2018 14:12:12 +0000 (16:12 +0200)
committerArmin Novak <armin.novak@thincast.com>
Thu, 3 May 2018 14:12:12 +0000 (16:12 +0200)
channels/rdpsnd/client/mac/rdpsnd_mac.c

index db98057..ce8a83c 100644 (file)
@@ -85,8 +85,8 @@ static BOOL rdpsnd_mac_set_format(rdpsndDevicePlugin* device, const AUDIO_FORMAT
        mac->audioFormat.mFramesPerPacket = 1;
        mac->audioFormat.mChannelsPerFrame = format->nChannels;
        mac->audioFormat.mBitsPerChannel = format->wBitsPerSample;
-       mac->audioFormat.mBytesPerFrame = (format->wBitsPerSample * format->nChannels) / 8;
-       mac->audioFormat.mBytesPerPacket = format->nBlockAlign;
+       mac->audioFormat.mBytesPerFrame = mac->audioFormat.mBitsPerChannel * mac->audioFormat.mChannelsPerFrame / 8;
+       mac->audioFormat.mBytesPerPacket = mac->audioFormat.mBytesPerFrame * mac->audioFormat.mFramesPerPacket;
        mac->audioFormat.mReserved = 0;
 
        switch (format->wFormatTag)
@@ -104,13 +104,69 @@ static BOOL rdpsnd_mac_set_format(rdpsndDevicePlugin* device, const AUDIO_FORMAT
                        break;
 
                default:
-                       break;
+                       return FALSE;
        }
 
        rdpsnd_print_audio_format(format);
        return TRUE;
 }
 
+static char *FormatError(OSStatus st)
+{
+               switch (st) {
+                       case kAudioFileUnspecifiedError:
+                               return "kAudioFileUnspecifiedError";
+
+                       case kAudioFileUnsupportedFileTypeError:
+                               return "kAudioFileUnsupportedFileTypeError";
+
+                       case kAudioFileUnsupportedDataFormatError:
+                               return "kAudioFileUnsupportedDataFormatError";
+
+                       case kAudioFileUnsupportedPropertyError:
+                               return "kAudioFileUnsupportedPropertyError";
+
+                       case kAudioFileBadPropertySizeError:
+                               return "kAudioFileBadPropertySizeError";
+
+                       case kAudioFilePermissionsError:
+                               return "kAudioFilePermissionsError";
+
+                       case kAudioFileNotOptimizedError:
+                               return "kAudioFileNotOptimizedError";
+
+                       case kAudioFileInvalidChunkError:
+                               return "kAudioFileInvalidChunkError";
+
+                       case kAudioFileDoesNotAllow64BitDataSizeError:
+                               return "kAudioFileDoesNotAllow64BitDataSizeError";
+
+                       case kAudioFileInvalidPacketOffsetError:
+                               return "kAudioFileInvalidPacketOffsetError";
+
+                       case kAudioFileInvalidFileError:
+                               return "kAudioFileInvalidFileError";
+
+                       case kAudioFileOperationNotSupportedError:
+                               return "kAudioFileOperationNotSupportedError";
+
+                       case kAudioFileNotOpenError:
+                               return "kAudioFileNotOpenError";
+
+                       case kAudioFileEndOfFileError:
+                               return "kAudioFileEndOfFileError";
+
+                       case kAudioFilePositionError:
+                               return "kAudioFilePositionError";
+
+                       case kAudioFileFileNotFoundError:
+                               return "kAudioFileFileNotFoundError";
+
+                       default:
+                               return "unknown error";
+               }
+}
+
 static BOOL rdpsnd_mac_open(rdpsndDevicePlugin* device, const AUDIO_FORMAT* format, UINT32 latency)
 {
        int index;
@@ -128,10 +184,10 @@ static BOOL rdpsnd_mac_open(rdpsndDevicePlugin* device, const AUDIO_FORMAT* form
        status = AudioQueueNewOutput(&(mac->audioFormat),
                                     mac_audio_queue_output_cb, mac,
                                     NULL, NULL, 0, &(mac->audioQueue));
-
        if (status != 0)
        {
-               WLog_ERR(TAG, "AudioQueueNewOutput failure\n");
+               const char* err = FormatError(status);
+               WLog_ERR(TAG, "AudioQueueNewOutput failure %s", err);
                return FALSE;
        }