Commits


don't send the song' path to the player process we're not relying anymore on the file extension, so this information is useless for the player.


don't call player_sendeof on IMSG_STOP the refactoring introduced this error where we call report an EOF upon IMSG_STOP, making the player infinitely loop.


add a simple filetype detector instead of relying on file extension just a bit of "magic" :) Flac are easy, they always start with "fLaC". mp3 are weird because they either start with "ID3" (but this theoretically only ensures that's a tagged file, not an mp3) or 0xFF 0xFB. Ogg Opus should have a magic sequence "OpusHead" somewhere near the start of the file but also have the ogg' "OggS" magic bytes. I hope it's enough to distinguish between Ogg Opus and Vorbis. Another option would be to refactor play_oggvorbis/opus to not close the file on failure and try in cascade the play_* functions, but it's more complex and this solution seems to be enough.


don't leak file descriptor on player_playnext failure


refactor player_playnext: return status code let the caller decide to call senderr or sendeof.


be slightly more informative on failures


pledge audio too while for my particular use-case this has always worked with only "stdio recvfd", sio_open(3) mentions that if no further sio_open calls are made all pledges can be dropped except for "audio", so let's keep it.


remove the got_stop hack now player_playnext has enough information to decide wheter to call player_senderr or player_sendeof.


drop functions prototypes private to player.c and move hdl there too


refactor the player_shouldstop/sio_write dance in a function


change the log debug string for player_setup now it includes all the params, not only the rate


fix player wrt unknown files


allow changing sample bit size


support setting the number of channels for flac and vorbis


implement `load' command