player: don't wake up decoder after every frame

The decoder was woken up after each chunk which had been played.  That
caused a lot of superfluous context switches.  Wake up the decoder
only when a certain amount of the buffer has been consumed.  This
formula is somewhat arbitrary, and has to be proven experimentally.
This commit is contained in:
Max Kellermann 2008-10-10 16:47:57 +02:00
parent f41fe1e0b5
commit 17d9c1708b

View File

@ -339,7 +339,13 @@ static void do_play(void)
sizeToTime) < 0)
break;
ob_shift();
notify_signal(&dc.notify);
/* this formula should prevent that the
decoder gets woken up with each chunk; it
is more efficient to make it decode a
larger block at a time */
if (ob_available() <= (pc.buffered_before_play + ob.size * 3) / 4)
notify_signal(&dc.notify);
} else if (!ob_is_empty() && (int)ob.begin == next) {
/* at the beginning of a new song */