diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/main.c | 32 | ||||
-rw-r--r-- | src/pianobar.1 | 4 |
2 files changed, 28 insertions, 8 deletions
@@ -55,6 +55,8 @@ struct aacPlayer { char *url; char finishedPlayback; char doQuit; + char doPause; + CURL *audioFd; }; void dumpBuffer (char *buf, size_t len) { @@ -74,6 +76,16 @@ size_t playCurlCb (void *ptr, size_t size, size_t nmemb, void *stream) { return 0; } + /* FIXME: not the best solution to poll every second, but the easiest one + * I know... (pthread's conditions could be another solution) */ + if (player->doPause == 1) { + curl_easy_pause (player->audioFd, CURLPAUSE_ALL); + while (player->doPause == 1) { + sleep (1); + } + curl_easy_pause (player->audioFd, CURLPAUSE_CONT); + } + /* fill buffer */ if (player->bufferFilled + size*nmemb > sizeof (player->buffer)) { printf ("Buffer overflow!\n"); @@ -171,9 +183,8 @@ size_t playCurlCb (void *ptr, size_t size, size_t nmemb, void *stream) { void *threadPlayUrl (void *data) { struct aacPlayer *player = data; NeAACDecConfigurationPtr conf; - CURL *audioFd; - audioFd = curl_easy_init (); + player->audioFd = curl_easy_init (); player->aacHandle = NeAACDecOpen(); conf = NeAACDecGetCurrentConfiguration(player->aacHandle); @@ -181,15 +192,15 @@ void *threadPlayUrl (void *data) { conf->downMatrix = 1; NeAACDecSetConfiguration(player->aacHandle, conf); - curl_easy_setopt (audioFd, CURLOPT_URL, player->url); - curl_easy_setopt (audioFd, CURLOPT_WRITEFUNCTION, playCurlCb); - curl_easy_setopt (audioFd, CURLOPT_WRITEDATA, player); - curl_easy_setopt (audioFd, CURLOPT_USERAGENT, PACKAGE_STRING); - curl_easy_perform (audioFd); + curl_easy_setopt (player->audioFd, CURLOPT_URL, player->url); + curl_easy_setopt (player->audioFd, CURLOPT_WRITEFUNCTION, playCurlCb); + curl_easy_setopt (player->audioFd, CURLOPT_WRITEDATA, player); + curl_easy_setopt (player->audioFd, CURLOPT_USERAGENT, PACKAGE_STRING); + curl_easy_perform (player->audioFd); NeAACDecClose(player->aacHandle); ao_close(player->audioOutDevice); - curl_easy_cleanup (audioFd); + curl_easy_cleanup (player->audioFd); player->finishedPlayback = 1; @@ -418,6 +429,7 @@ int main (int argc, char **argv) { "d\tdelete current station\n" "l\tlove current song\n" "n\tnext song\n" + "p\tpause/continue\n" "q\tquit\n" "r\trename current station\n" "s\tchange station\n"); @@ -487,6 +499,10 @@ int main (int argc, char **argv) { case 'n': player.doQuit = 1; break; + + case 'p': + player.doPause = !player.doPause; + break; case 'q': doQuit = 1; diff --git a/src/pianobar.1 b/src/pianobar.1 index b3cb227..411d7d0 100644 --- a/src/pianobar.1 +++ b/src/pianobar.1 @@ -45,6 +45,10 @@ Love currently played song. Skip current song. Please be patient. .TP +.B p +Pause/Continue + +.TP .B q Quit .B pianobar. |