summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorHiFiPhile <[email protected]>2024-05-12 18:59:32 +0200
committerHiFiPhile <[email protected]>2024-05-12 19:00:02 +0200
commit67456357c54ee81e8418a9e814df774b1a3dee85 (patch)
tree01a6e048eb2af981d3af3b3b201d3951213ff12f /src
parentd54a1578aadfce059550801ec78f715f249ccb76 (diff)
Fix HS playback on OSX.
Diffstat (limited to 'src')
-rw-r--r--src/class/audio/audio_device.c9
1 files changed, 7 insertions, 2 deletions
diff --git a/src/class/audio/audio_device.c b/src/class/audio/audio_device.c
index 2a786725b..e82d52a5b 100644
--- a/src/class/audio/audio_device.c
+++ b/src/class/audio/audio_device.c
@@ -2050,7 +2050,7 @@ static bool audiod_set_interface(uint8_t rhport, tusb_control_request_t const *
case AUDIO_FEEDBACK_METHOD_FIFO_COUNT:
{
- /* Initialize the threshold level to half filled */
+ // Initialize the threshold level to half filled
uint16_t fifo_lvl_thr;
#if CFG_TUD_AUDIO_ENABLE_DECODING
fifo_lvl_thr = tu_fifo_depth(&audio->rx_supp_ff[0]) / 2;
@@ -2059,11 +2059,16 @@ static bool audiod_set_interface(uint8_t rhport, tusb_control_request_t const *
#endif
audio->feedback.compute.fifo_count.fifo_lvl_thr = fifo_lvl_thr;
audio->feedback.compute.fifo_count.fifo_lvl_avg = ((uint32_t)fifo_lvl_thr) << 16;
- /* Avoid 64bit division */
+ // Avoid 64bit division
uint32_t nominal = ((fb_param.sample_freq / 100) << 16) / (frame_div / 100);
audio->feedback.compute.fifo_count.nom_value = nominal;
audio->feedback.compute.fifo_count.rate_const[0] = (audio->feedback.max_value - nominal) / fifo_lvl_thr;
audio->feedback.compute.fifo_count.rate_const[1] = (nominal - audio->feedback.min_value) / fifo_lvl_thr;
+ // On HS feedback is more sensitive since packet size can vary every MSOF, could cause instability
+ if(tud_speed_get() == TUSB_SPEED_HIGH) {
+ audio->feedback.compute.fifo_count.rate_const[0] /= 8;
+ audio->feedback.compute.fifo_count.rate_const[1] /= 8;
+ }
}
break;