summaryrefslogtreecommitdiffstats
path: root/libmpcodecs
diff options
context:
space:
mode:
Diffstat (limited to 'libmpcodecs')
-rw-r--r--libmpcodecs/dec_audio.c23
1 files changed, 11 insertions, 12 deletions
diff --git a/libmpcodecs/dec_audio.c b/libmpcodecs/dec_audio.c
index 78dddbf05f..cd63b15b25 100644
--- a/libmpcodecs/dec_audio.c
+++ b/libmpcodecs/dec_audio.c
@@ -352,18 +352,10 @@ int init_audio_filters(sh_audio_t *sh_audio, int in_samplerate,
static int filter_n_bytes(sh_audio_t *sh, int len)
{
- int error = 0;
- // Filter
- af_data_t filter_input = {
- .audio = sh->a_buffer,
- .rate = sh->samplerate,
- .nch = sh->channels,
- .format = sh->sample_format
- };
- af_data_t *filter_output;
-
assert(len-1 + sh->audio_out_minsize <= sh->a_buffer_size);
+ int error = 0;
+
// Decode more bytes if needed
while (sh->a_buffer_len < len) {
unsigned char *buf = sh->a_buffer + sh->a_buffer_len;
@@ -378,9 +370,16 @@ static int filter_n_bytes(sh_audio_t *sh, int len)
sh->a_buffer_len += ret;
}
- filter_input.len = len;
+ // Filter
+ af_data_t filter_input = {
+ .audio = sh->a_buffer,
+ .len = len,
+ .rate = sh->samplerate,
+ .nch = sh->channels,
+ .format = sh->sample_format
+ };
af_fix_parameters(&filter_input);
- filter_output = af_play(sh->afilter, &filter_input);
+ af_data_t *filter_output = af_play(sh->afilter, &filter_input);
if (!filter_output)
return -1;
if (sh->a_out_buffer_size < sh->a_out_buffer_len + filter_output->len) {