Spaces:
Running
Running
sdl : fix audio callback (#1523)
Browse files- examples/common-sdl.cpp +7 -4
- examples/common-sdl.h +0 -1
examples/common-sdl.cpp
CHANGED
|
@@ -139,10 +139,13 @@ void audio_async::callback(uint8_t * stream, int len) {
|
|
| 139 |
return;
|
| 140 |
}
|
| 141 |
|
| 142 |
-
|
| 143 |
|
| 144 |
-
|
| 145 |
-
|
|
|
|
|
|
|
|
|
|
| 146 |
|
| 147 |
//fprintf(stderr, "%s: %zu samples, pos %zu, len %zu\n", __func__, n_samples, m_audio_pos, m_audio_len);
|
| 148 |
|
|
@@ -153,7 +156,7 @@ void audio_async::callback(uint8_t * stream, int len) {
|
|
| 153 |
const size_t n0 = m_audio.size() - m_audio_pos;
|
| 154 |
|
| 155 |
memcpy(&m_audio[m_audio_pos], stream, n0 * sizeof(float));
|
| 156 |
-
memcpy(&m_audio[0],
|
| 157 |
|
| 158 |
m_audio_pos = (m_audio_pos + n_samples) % m_audio.size();
|
| 159 |
m_audio_len = m_audio.size();
|
|
|
|
| 139 |
return;
|
| 140 |
}
|
| 141 |
|
| 142 |
+
size_t n_samples = len / sizeof(float);
|
| 143 |
|
| 144 |
+
if (n_samples > m_audio.size()) {
|
| 145 |
+
n_samples = m_audio.size();
|
| 146 |
+
|
| 147 |
+
stream += (len - (n_samples * sizeof(float)));
|
| 148 |
+
}
|
| 149 |
|
| 150 |
//fprintf(stderr, "%s: %zu samples, pos %zu, len %zu\n", __func__, n_samples, m_audio_pos, m_audio_len);
|
| 151 |
|
|
|
|
| 156 |
const size_t n0 = m_audio.size() - m_audio_pos;
|
| 157 |
|
| 158 |
memcpy(&m_audio[m_audio_pos], stream, n0 * sizeof(float));
|
| 159 |
+
memcpy(&m_audio[0], stream + n0 * sizeof(float), (n_samples - n0) * sizeof(float));
|
| 160 |
|
| 161 |
m_audio_pos = (m_audio_pos + n_samples) % m_audio.size();
|
| 162 |
m_audio_len = m_audio.size();
|
examples/common-sdl.h
CHANGED
|
@@ -41,7 +41,6 @@ private:
|
|
| 41 |
std::mutex m_mutex;
|
| 42 |
|
| 43 |
std::vector<float> m_audio;
|
| 44 |
-
std::vector<float> m_audio_new;
|
| 45 |
size_t m_audio_pos = 0;
|
| 46 |
size_t m_audio_len = 0;
|
| 47 |
};
|
|
|
|
| 41 |
std::mutex m_mutex;
|
| 42 |
|
| 43 |
std::vector<float> m_audio;
|
|
|
|
| 44 |
size_t m_audio_pos = 0;
|
| 45 |
size_t m_audio_len = 0;
|
| 46 |
};
|