diff options
author | wm4 <wm4@nowhere> | 2016-01-19 22:24:26 +0100 |
---|---|---|
committer | wm4 <wm4@nowhere> | 2016-01-19 22:24:38 +0100 |
commit | 30031edce3bb79051a125183c8dc152ba4e78e66 (patch) | |
tree | b041672d79d6e93423a65e33260ba13eca23695d /audio/decode/dec_audio.c | |
parent | c365b44e19e1ab1cdb0d2aaca5360108d6da862a (diff) | |
download | mpv-30031edce3bb79051a125183c8dc152ba4e78e66.tar.bz2 mpv-30031edce3bb79051a125183c8dc152ba4e78e66.tar.xz |
audio: move direct packet reading from decoders to common code
Another bit of preparation.
Diffstat (limited to 'audio/decode/dec_audio.c')
-rw-r--r-- | audio/decode/dec_audio.c | 20 |
1 files changed, 15 insertions, 5 deletions
diff --git a/audio/decode/dec_audio.c b/audio/decode/dec_audio.c index f774ed1abd..f97636e475 100644 --- a/audio/decode/dec_audio.c +++ b/audio/decode/dec_audio.c @@ -161,13 +161,23 @@ void audio_uninit(struct dec_audio *d_audio) uninit_decoder(d_audio); af_destroy(d_audio->afilter); talloc_free(d_audio->waiting); + talloc_free(d_audio->packet); talloc_free(d_audio); } static int decode_new_frame(struct dec_audio *da) { while (!da->waiting) { - int ret = da->ad_driver->decode_packet(da, &da->waiting); + if (!da->packet) { + if (demux_read_packet_async(da->header, &da->packet) == 0) + return AD_WAIT; + } + + int ret = da->ad_driver->decode_packet(da, da->packet, &da->waiting); + if (ret < 0 || (da->packet && da->packet->len == 0)) { + talloc_free(da->packet); + da->packet = NULL; + } if (ret < 0) return ret; @@ -285,8 +295,8 @@ void audio_reset_decoding(struct dec_audio *d_audio) d_audio->pts = MP_NOPTS_VALUE; d_audio->pts_offset = 0; d_audio->pts_reset = false; - if (d_audio->waiting) { - talloc_free(d_audio->waiting); - d_audio->waiting = NULL; - } + talloc_free(d_audio->waiting); + d_audio->waiting = NULL; + talloc_free(d_audio->packet); + d_audio->packet = NULL; } |