diff options
Diffstat (limited to 'audio/decode')
-rw-r--r-- | audio/decode/dec_audio.c | 53 | ||||
-rw-r--r-- | audio/decode/dec_audio.h | 5 |
2 files changed, 4 insertions, 54 deletions
diff --git a/audio/decode/dec_audio.c b/audio/decode/dec_audio.c index 4b8ae7949c..29674f3e0e 100644 --- a/audio/decode/dec_audio.c +++ b/audio/decode/dec_audio.c @@ -164,57 +164,13 @@ void audio_uninit(struct dec_audio *d_audio) { if (!d_audio) return; - if (d_audio->afilter) { - MP_VERBOSE(d_audio, "Uninit audio filters...\n"); - af_destroy(d_audio->afilter); - d_audio->afilter = NULL; - } + MP_VERBOSE(d_audio, "Uninit audio filters...\n"); + af_destroy(d_audio->afilter); uninit_decoder(d_audio); talloc_free(d_audio->decode_buffer); talloc_free(d_audio); } - -int audio_init_filters(struct dec_audio *d_audio, int in_samplerate, - int *out_samplerate, struct mp_chmap *out_channels, - int *out_format) -{ - if (!d_audio->afilter) - d_audio->afilter = af_new(d_audio->global); - struct af_stream *afs = d_audio->afilter; - - // input format: same as codec's output format: - mp_audio_buffer_get_format(d_audio->decode_buffer, &afs->input); - // Sample rate can be different when adjusting playback speed - afs->input.rate = in_samplerate; - - // output format: same as ao driver's input format (if missing, fallback to input) - afs->output.rate = *out_samplerate; - mp_audio_set_channels(&afs->output, out_channels); - mp_audio_set_format(&afs->output, *out_format); - - afs->replaygain_data = d_audio->replaygain_data; - - char *s_from = mp_audio_config_to_str(&afs->input); - char *s_to = mp_audio_config_to_str(&afs->output); - MP_VERBOSE(d_audio, "Building audio filter chain for %s -> %s...\n", s_from, s_to); - talloc_free(s_from); - talloc_free(s_to); - - // let's autoprobe it! - if (af_init(afs) != 0) { - af_destroy(afs); - d_audio->afilter = NULL; - return 0; // failed :( - } - - *out_samplerate = afs->output.rate; - *out_channels = afs->output.channels; - *out_format = afs->output.format; - - return 1; -} - /* Decode packets until we know the audio format. Then reinit the buffer. * Returns AD_OK on success, negative AD_* code otherwise. * Also returns AD_OK if already initialized (and does nothing). @@ -304,7 +260,7 @@ static int filter_n_bytes(struct dec_audio *da, struct mp_audio_buffer *outbuf, int audio_decode(struct dec_audio *d_audio, struct mp_audio_buffer *outbuf, int minsamples) { - if (!d_audio->afilter) + if (d_audio->afilter->initialized < 1) return AD_ERR; // Indicates that a filter seems to be buffering large amounts of data @@ -354,8 +310,7 @@ void audio_reset_decoding(struct dec_audio *d_audio) { if (d_audio->ad_driver) d_audio->ad_driver->control(d_audio, ADCTRL_RESET, NULL); - if (d_audio->afilter) - af_control_all(d_audio->afilter, AF_CONTROL_RESET, NULL); + af_control_all(d_audio->afilter, AF_CONTROL_RESET, NULL); d_audio->pts = MP_NOPTS_VALUE; d_audio->pts_offset = 0; if (d_audio->decode_buffer) diff --git a/audio/decode/dec_audio.h b/audio/decode/dec_audio.h index b76ff0b95c..08fa87e8a7 100644 --- a/audio/decode/dec_audio.h +++ b/audio/decode/dec_audio.h @@ -36,7 +36,6 @@ struct dec_audio { struct mp_audio_buffer *decode_buffer; struct af_stream *afilter; char *decoder_desc; - struct replaygain_data *replaygain_data; int init_retries; // set by decoder struct mp_audio decoded; // decoded audio set by last decode_packet() call @@ -65,8 +64,4 @@ int initial_audio_decode(struct dec_audio *d_audio); void audio_reset_decoding(struct dec_audio *d_audio); void audio_uninit(struct dec_audio *d_audio); -int audio_init_filters(struct dec_audio *d_audio, int in_samplerate, - int *out_samplerate, struct mp_chmap *out_channels, - int *out_format); - #endif /* MPLAYER_DEC_AUDIO_H */ |