]> Repos - portaudio/commitdiff
Moved hotplug function prototypes from random locations to new header file src/common...
authorRoss Bencina <rossb@audiomulch.com>
Fri, 2 Sep 2016 10:52:42 +0000 (20:52 +1000)
committerRoss Bencina <rossb@audiomulch.com>
Fri, 2 Sep 2016 10:52:42 +0000 (20:52 +1000)
src/common/pa_front.c
src/common/pa_hotplug.h [new file with mode: 0644]
src/os/win/pa_win_hotplug.c

index e552569a17330019c2698662aa9d0a51521c160c..615b39ea11903f3498067b451f85212c4f25939a 100644 (file)
 #include "pa_stream.h"
 #include "pa_trace.h" /* still usefull?*/
 #include "pa_debugprint.h"
+#include "pa_hotplug.h"
 
 #ifndef PA_SVN_REVISION
 #include "pa_svnrevision.h"
 #endif
 
-extern void PaUtil_InitializeHotPlug();
-extern void PaUtil_TerminateHotPlug();
-
 
 /**
  * This is incremented if we make incompatible API changes.
@@ -866,6 +864,37 @@ done:
     return result;
 }
 
+
+PaError Pa_SetDevicesChangedCallback( void *userData, PaStreamFinishedCallback* devicesChangedCallback )
+{
+    PaUtil_LockHotPlug();
+    devicesChangedCallback_ = devicesChangedCallback;
+    devicesChangedCallbackUserData_ = userData;
+    PaUtil_UnlockHotPlug();
+    return paNoError;
+}
+
+/* Called by platform hotplug implementation whenever a OS audio device change has been detected */
+void PaUtil_DevicesChanged(unsigned state, void* pData)
+{
+    (void)state;
+    (void)pData;
+    PaUtil_LockHotPlug();
+    if (devicesChangedCallback_)
+    {
+        (devicesChangedCallback_)(devicesChangedCallbackUserData_);
+    }
+    PaUtil_UnlockHotPlug();
+}
+
+static PaDeviceConnectionId nextDeviceConnectionId_ = 1000;
+
+PaDeviceConnectionId PaUtil_MakeDeviceConnectionId( void )
+{
+    return nextDeviceConnectionId_++;
+}
+
+
 const PaDeviceInfo* Pa_GetDeviceInfo( PaDeviceIndex device )
 {
     int hostSpecificDeviceIndex;
@@ -1927,37 +1956,4 @@ PaError Pa_GetSampleSize( PaSampleFormat format )
     PA_LOGAPI_EXIT_PAERROR_OR_T_RESULT( "Pa_GetSampleSize", "int: %d", result );
 
     return (PaError) result;
-}
-
-extern void PaUtil_LockHotPlug();
-extern void PaUtil_UnlockHotPlug();
-
-
-PaError Pa_SetDevicesChangedCallback( void *userData, PaStreamFinishedCallback* devicesChangedCallback )
-{
-    PaUtil_LockHotPlug();
-    devicesChangedCallback_ = devicesChangedCallback;
-    devicesChangedCallbackUserData_ = userData;
-    PaUtil_UnlockHotPlug();
-    return paNoError;
-}
-
-/* Called whenever a OS audio device change has been detected */
-void PaUtil_DevicesChanged(unsigned state, void* pData)
-{
-    (void)state;
-    (void)pData;
-    PaUtil_LockHotPlug();
-    if (devicesChangedCallback_)
-    {
-        (devicesChangedCallback_)(devicesChangedCallbackUserData_);
-    }
-    PaUtil_UnlockHotPlug();
-}
-
-static PaDeviceConnectionId nextDeviceConnectionId_ = 1000;
-
-PaDeviceConnectionId PaUtil_MakeDeviceConnectionId( void )
-{
-    return nextDeviceConnectionId_++;
-}
+}
\ No newline at end of file
diff --git a/src/common/pa_hotplug.h b/src/common/pa_hotplug.h
new file mode 100644 (file)
index 0000000..703849a
--- /dev/null
@@ -0,0 +1,98 @@
+#ifndef PA_HOTPLUG_H
+#define PA_HOTPLUG_H
+/*
+ * $Id$
+ * Portable Audio I/O Library
+ * hotplug interface and utilities
+ *
+ * Based on the Open Source API proposed by Ross Bencina
+ * Copyright (c) 1999-2016 Ross Bencina, Phil Burk
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining
+ * a copy of this software and associated documentation files
+ * (the "Software"), to deal in the Software without restriction,
+ * including without limitation the rights to use, copy, modify, merge,
+ * publish, distribute, sublicense, and/or sell copies of the Software,
+ * and to permit persons to whom the Software is furnished to do so,
+ * subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be
+ * included in all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+ * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR
+ * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF
+ * CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+ * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+ */
+
+/*
+ * The text above constitutes the entire PortAudio license; however,
+ * the PortAudio community also makes the following non-binding requests:
+ *
+ * Any person wishing to distribute modifications to the Software is
+ * requested to send the modifications to the original developer so that
+ * they can be incorporated into the canonical version. It is also
+ * requested that these non-binding requests be included along with the
+ * license above.
+ */
+
+/** @file
+ @ingroup common_src
+
+ @brief Utilities for implementing hotplug support.
+*/
+
+#include "portaudio.h"
+
+#ifdef __cplusplus
+extern "C"
+{
+#endif /* __cplusplus */
+
+/** Init/terminate hotplug notification engine.
+
+    At the moment there is on hotplug implementation per platform.
+    It is responsible for posting devices changed notifications
+    by calling PaUtil_DevicesChanged.
+
+    Once we support multiple notification mechanisms we'll probably
+    have the host APIs init and terminate their own notification
+    engines (using reference counting?) e.g. wasapi will have its own,
+    but other windows APIs will use the global windows notifier.
+
+    Implemented in pa_win_hotplug.c
+*/
+void PaUtil_InitializeHotPlug();
+void PaUtil_TerminateHotPlug();
+
+
+/** Invoke the client's registered devices changed notification.
+
+  @param first  0 = unknown, 1 = insertion, 2 = removal
+  @param second Host specific device change info (in windows it is the (unicode) device path)
+
+  Parameters are currently ignored. TODO REVIEW
+
+  Implemented in pa_front.c
+*/
+void PaUtil_DevicesChanged(unsigned, void*);
+
+
+/** Lock/unlock a mutex used to protect the devices changed callback.
+  Used by pa_front.c to synchronise notification callbacks and client
+  requests to set/clear the device callback.
+
+  Coded like this because we don't have a cross-platform mutex.
+
+  Implemented in pa_win_hotplug.c
+*/
+void PaUtil_LockHotPlug();
+void PaUtil_UnlockHotPlug();
+
+#ifdef __cplusplus
+}
+#endif /* __cplusplus */
+#endif /* PA_HOTPLUG_H */
index 9257c0c0863e8dd267079c879f50d2250269bdfa..093c08744c7385d897123a3b87524b4f068d46cf 100644 (file)
@@ -1,4 +1,44 @@
-
+/*
+ * $Id$
+ * Portable Audio I/O Library
+ * Hotplug interface and utilities
+ * Copyright (c) 2011-2016 Robert Bielik
+ *
+ * Based on the Open Source API proposed by Ross Bencina
+ * Copyright (c) 1999-2016 Ross Bencina, Phil Burk
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining
+ * a copy of this software and associated documentation files
+ * (the "Software"), to deal in the Software without restriction,
+ * including without limitation the rights to use, copy, modify, merge,
+ * publish, distribute, sublicense, and/or sell copies of the Software,
+ * and to permit persons to whom the Software is furnished to do so,
+ * subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be
+ * included in all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+ * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR
+ * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF
+ * CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+ * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+ */
+
+/*
+ * The text above constitutes the entire PortAudio license; however,
+ * the PortAudio community also makes the following non-binding requests:
+ *
+ * Any person wishing to distribute modifications to the Software is
+ * requested to send the modifications to the original developer so that
+ * they can be incorporated into the canonical version. It is also
+ * requested that these non-binding requests be included along with the
+ * license above.
+ */
+
+#include "pa_hotplug.h"
 #include "pa_util.h"
 #include "pa_debugprint.h"
 #include "pa_allocation.h"
 #pragma comment( lib, "setupapi.lib" )
 #endif
 
-
-/* Implemented in pa_front.c
-  @param first  0 = unknown, 1 = insertion, 2 = removal
-  @param second Host specific device change info (in windows it is the (unicode) device path)
-*/
-extern void PaUtil_DevicesChanged(unsigned, void*);
-
 /* use CreateThread for CYGWIN/Windows Mobile, _beginthreadex for all others */
 #if !defined(__CYGWIN__) && !defined(_WIN32_WCE)
 #define CREATE_THREAD_FUNCTION (HANDLE)_beginthreadex