mirror of
https://github.com/mpv-player/mpv
synced 2024-12-27 09:32:40 +00:00
b74c09efbf
This replaces the two buffers (ao_chain.ao_buffer in the core, and buffer_state.buffers in the AO) with a single queue. Instead of having a byte based buffer, the queue is simply a list of audio frames, as output by the decoder. This should make dataflow simpler and reduce copying. It also attempts to simplify fill_audio_out_buffers(), the function I always hated most, because it's full of subtle and buggy logic. Unfortunately, I got assaulted by corner cases, dumb features (attempt at seamless looping, really?), and other crap, so it got pretty complicated again. fill_audio_out_buffers() is still full of subtle and buggy logic. Maybe it got worse. On the other hand, maybe there really is some progress. Who knows. Originally, the data flow parts was meant to be in f_output_chain, but due to tricky interactions with the playloop code, it's now in the dummy filter in audio.c. At least this improves the way the audio PTS is passed to the encoder in encoding mode. Now it attempts to pass frames directly, along with the pts, which should minimize timestamp problems. But to be honest, encoder mode is one big kludge that shouldn't exist in this way. This commit should be considered pre-alpha code. There are lots of bugs still hiding. |
||
---|---|---|
.. | ||
av_common.c | ||
av_common.h | ||
av_log.c | ||
av_log.h | ||
codecs.c | ||
codecs.h | ||
common.c | ||
common.h | ||
encode_lavc.c | ||
encode_lavc.h | ||
encode.h | ||
global.h | ||
msg_control.h | ||
msg.c | ||
msg.h | ||
playlist.c | ||
playlist.h | ||
recorder.c | ||
recorder.h | ||
stats.c | ||
stats.h | ||
tags.c | ||
tags.h | ||
version.c |