diff options
author | Bruno Morais <brunosmmm@gmail.com> | 2019-06-06 16:48:23 +0200 |
---|---|---|
committer | Lars-Dominik Braun <lars@6xq.net> | 2019-06-06 16:49:33 +0200 |
commit | 4594810abea6fa50643c0923a9ee9075e59922ce (patch) | |
tree | e9e60bbcd131192dcc3b5f6a0b40aa727c6f1173 /src/player.c | |
parent | ef051f835a6393bf3cdfc1ce76943f6db22751c4 (diff) | |
download | pianobar-4594810abea6fa50643c0923a9ee9075e59922ce.tar.gz pianobar-4594810abea6fa50643c0923a9ee9075e59922ce.tar.bz2 pianobar-4594810abea6fa50643c0923a9ee9075e59922ce.zip |
Add audio resampling
Fixes #683
Diffstat (limited to 'src/player.c')
-rw-r--r-- | src/player.c | 15 |
1 files changed, 12 insertions, 3 deletions
diff --git a/src/player.c b/src/player.c index 17fe7ed..848d58b 100644 --- a/src/player.c +++ b/src/player.c @@ -254,6 +254,15 @@ static bool openStream (player_t * const player) { return true; } +/* Get output sample rate. Default to stream sample rate + */ +static int getSampleRate (const player_t * const player) { + AVCodecParameters const * const cp = player->st->codecpar; + return player->settings->sampleRate == 0 ? + cp->sample_rate : + player->settings->sampleRate; +} + /* setup filter chain */ static bool openFilter (player_t * const player) { @@ -289,8 +298,8 @@ static bool openFilter (player_t * const player) { /* aformat: convert float samples into something more usable */ AVFilterContext *fafmt = NULL; - snprintf (strbuf, sizeof (strbuf), "sample_fmts=%s", - av_get_sample_fmt_name (avformat)); + snprintf (strbuf, sizeof (strbuf), "sample_fmts=%s:sample_rates=%d", + av_get_sample_fmt_name (avformat), getSampleRate (player)); if ((ret = avfilter_graph_create_filter (&fafmt, avfilter_get_by_name ("aformat"), "format", strbuf, NULL, player->fgraph)) < 0) { @@ -328,7 +337,7 @@ static bool openDevice (player_t * const player) { aoFmt.bits = av_get_bytes_per_sample (avformat) * 8; assert (aoFmt.bits > 0); aoFmt.channels = cp->channels; - aoFmt.rate = cp->sample_rate; + aoFmt.rate = getSampleRate (player); aoFmt.byte_format = AO_FMT_NATIVE; int driver = ao_default_driver_id (); |