Commits


implement seeking This adds the internal management of the seeking, as well as the decoder backends bits.


bits, rate and channels are unsigned match the struct sio_par


declare local functions as static


keep track of current position and total duration


improving error reporting makes the player process optionally send back a string describing the failure to provide a better and more coincise error message. This turns the syslog message(s): amused: unknown file type amused: failed to play, skipping /home/op/pics/phos.jpg into: amused: unknown file type; skipping /home/op/pics/phos.jpg


don't sio_start if we're not stopped


don't POLLIN, we only care about POLLOUT


don't change params if they're the same avoids a sio_stop in the common case of switching from song that needs similar params (such as tracks in the same album.)


inline player_init


switch to a non-blocking usage of sndio


free the imsg in player after handling, plugs a memory leak


inline player_enqueue


s/audio_init/player_init was the only function to disrespect the player_* namespace (well, excepting play). while here also don't mark those two as static, they were the only static functions in the file. I'm not trying to enforcing private symbols here.


no need to sio_setpar during initialization we don't know what format the music will be so we have to stop and set the parameters in player_setup. there's no point in setting bogus parameter in audio_init.


consume all enqueued messages before calling imsg_read player_dispatch reads only one imsg from the ibuf. Next time it's called, the other messages on the ibuf (if any) are discarded and new ones are read. This can cause the player process to go out-of-sync with the main process if multiple messages were "bundled" in the same chunk. To avoid this, always try to imsg_read before. If it succeedes, we read process the equeued messages one by one, if it fails then we poll for new data and call imsg_read to process them and retry. This fixes a bug where amused could be "confused" by running $ amused pause ; amused stop ; amused play in a loop a few times. This bug and the repro were reported two months ago by Dirk-Wilhelm Peters, thanks! (and sorry it took so long to understand and fix the issue)