summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRuslan Migirov <trapi78@gmail.com>2023-11-28 13:25:36 +0200
committerJeff Long <willcode4@gmail.com>2023-12-02 20:13:31 -0500
commit4efa6fbb4a3cddf3ad9f983f4730f8116a5df985 (patch)
tree936efd14d9d7be0e862b7fa253826caaa7dc317e
parentgr-uhd: RFNoC Rx-Streamer: Add start stream options (diff)
downloadgnuradio-4efa6fbb4a3cddf3ad9f983f4730f8116a5df985.tar.xz
gnuradio-4efa6fbb4a3cddf3ad9f983f4730f8116a5df985.zip
Remove 'friend' from 'read_wavein' callback function (#6971)
Resolves build issue in MSYS2 MinGW64 environment Signed-off-by: Ruslan Migirov <trapi78@gmail.com> (cherry picked from commit 9b22fd38b8259f33928c7b3ff7868e0bc4b60d1e) Signed-off-by: Jeff Long <willcode4@gmail.com>
-rw-r--r--gr-audio/lib/windows/windows_source.cc21
-rw-r--r--gr-audio/lib/windows/windows_source.h20
2 files changed, 27 insertions, 14 deletions
diff --git a/gr-audio/lib/windows/windows_source.cc b/gr-audio/lib/windows/windows_source.cc
index ad494417e..21999fb11 100644
--- a/gr-audio/lib/windows/windows_source.cc
+++ b/gr-audio/lib/windows/windows_source.cc
@@ -321,25 +321,30 @@ int windows_source::open_wavein_device(void)
return 0;
}
-static void CALLBACK read_wavein(
+void CALLBACK windows_source::read_wavein(
HWAVEIN hwi, UINT uMsg, DWORD_PTR dwInstance, DWORD_PTR dwParam1, DWORD_PTR dwParam2)
{
- // Ignore WIM_OPEN and WIM_CLOSE messages
if (uMsg == WIM_DATA) {
- if (!dwInstance) {
+ windows_source* source = reinterpret_cast<windows_source*>(dwInstance);
+ if (!source) {
gr::logger_ptr logger;
logger->error("callback function missing buffer queue: {:s}",
strerror(errno));
+ return;
}
- LPWAVEHDR lp_wave_hdr = (LPWAVEHDR)dwParam1; // The new audio data
- windows_source* source = (windows_source*)dwInstance;
+
+ LPWAVEHDR lp_wave_hdr =
+ reinterpret_cast<LPWAVEHDR>(dwParam1); // The new audio data
+
{
- std::lock_guard<std::mutex> lock(source->buffer_queue_mutex);
- if (source->buffer_queue.size() < MAX_QUEUE_SIZE) {
- source->buffer_queue.push(lp_wave_hdr); // Add the buffer to the queue
+ std::lock_guard<std::mutex> lock(source->get_buffer_queue_mutex());
+ auto& buffer_queue = source->get_buffer_queue();
+ if (buffer_queue.size() < MAX_QUEUE_SIZE) {
+ buffer_queue.push(lp_wave_hdr); // Add the buffer to the queue
}
}
}
}
+
} /* namespace audio */
} /* namespace gr */
diff --git a/gr-audio/lib/windows/windows_source.h b/gr-audio/lib/windows/windows_source.h
index fa206f1b5..444c69ea6 100644
--- a/gr-audio/lib/windows/windows_source.h
+++ b/gr-audio/lib/windows/windows_source.h
@@ -11,8 +11,12 @@
#ifndef INCLUDED_AUDIO_WINDOWS_SOURCE_H
#define INCLUDED_AUDIO_WINDOWS_SOURCE_H
+#ifndef WIN32_LEAN_AND_MEAN
#define WIN32_LEAN_AND_MEAN
+#endif
+#ifndef NOMINMAX
#define NOMINMAX // stops windef.h defining max/min under cygwin
+#endif
#include <mmsystem.h>
#include <windows.h>
@@ -51,11 +55,11 @@ protected:
UINT find_device(std::string szDeviceName);
std::queue<LPWAVEHDR> buffer_queue;
std::mutex buffer_queue_mutex;
- friend static void CALLBACK read_wavein(HWAVEIN hwi,
- UINT uMsg,
- DWORD_PTR dwInstance,
- DWORD_PTR dwParam1,
- DWORD_PTR dwParam2);
+ static void CALLBACK read_wavein(HWAVEIN hwi,
+ UINT uMsg,
+ DWORD_PTR dwInstance,
+ DWORD_PTR dwParam1,
+ DWORD_PTR dwParam2);
public:
windows_source(int sampling_freq, const std::string device_name = "");
@@ -64,9 +68,13 @@ public:
int work(int noutput_items,
gr_vector_const_void_star& input_items,
gr_vector_void_star& output_items);
+
+ std::mutex& get_buffer_queue_mutex() { return buffer_queue_mutex; }
+
+ std::queue<LPWAVEHDR>& get_buffer_queue() { return buffer_queue; }
};
-static void CALLBACK read_wavein(
+void CALLBACK read_wavein(
HWAVEIN hwi, UINT uMsg, DWORD_PTR dwInstance, DWORD_PTR dwParam1, DWORD_PTR dwParam2);
} /* namespace audio */