From 7d12bdc8bc99c82929d4a313479f97a3693b23d2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Josef=20S=C3=B6ntgen?= Date: Tue, 1 Sep 2015 13:49:00 +0200 Subject: [PATCH] dde_bsd: change packet processing Instead of looping the whole queue, the driver now loops on the first invalid packet. In any case it will send a progress signal to its client. Fixes #1666. --- repos/dde_bsd/src/drivers/audio/main.cc | 22 +++++++++++++--------- 1 file changed, 13 insertions(+), 9 deletions(-) diff --git a/repos/dde_bsd/src/drivers/audio/main.cc b/repos/dde_bsd/src/drivers/audio/main.cc index 720b18e0b..f182e4f2d 100644 --- a/repos/dde_bsd/src/drivers/audio/main.cc +++ b/repos/dde_bsd/src/drivers/audio/main.cc @@ -103,9 +103,6 @@ class Audio_out::Out if (full_right) channel_right->alloc_submit(); - - channel_left->progress_submit(); - channel_right->progress_submit(); } void _play_silence() @@ -137,17 +134,24 @@ class Audio_out::Out /* send to driver */ if (int err = Audio::play(data, sizeof(data))) PWRN("Error %d during playback", err); + + p_left->invalidate(); + p_right->invalidate(); + + p_left->mark_as_played(); + p_right->mark_as_played(); + + _advance_position(p_left, p_right); } else { _play_silence(); } - p_left->invalidate(); - p_right->invalidate(); - p_left->mark_as_played(); - p_right->mark_as_played(); - - _advance_position(p_left, p_right); + /* always report when a period has passed */ + Session_component *channel_left = channel_acquired[LEFT]; + Session_component *channel_right = channel_acquired[RIGHT]; + channel_left->progress_submit(); + channel_right->progress_submit(); } /*