summaryrefslogtreecommitdiffstats
path: root/player
diff options
context:
space:
mode:
Diffstat (limited to 'player')
-rw-r--r--player/audio.c12
-rw-r--r--player/command.c4
2 files changed, 8 insertions, 8 deletions
diff --git a/player/audio.c b/player/audio.c
index 413cbf4a32..e3dbe6577c 100644
--- a/player/audio.c
+++ b/player/audio.c
@@ -192,6 +192,7 @@ void reinit_audio_chain(struct MPContext *mpctx)
mpctx->d_audio->global = mpctx->global;
mpctx->d_audio->opts = opts;
mpctx->d_audio->header = sh;
+ mpctx->d_audio->pool = mp_audio_pool_create(mpctx->d_audio);
mpctx->d_audio->afilter = af_new(mpctx->global);
mpctx->d_audio->afilter->replaygain_data = sh->audio->replaygain_data;
mpctx->ao_buffer = mp_audio_buffer_create(NULL);
@@ -207,8 +208,7 @@ void reinit_audio_chain(struct MPContext *mpctx)
}
assert(mpctx->d_audio);
- struct mp_audio in_format;
- mp_audio_buffer_get_format(mpctx->d_audio->decode_buffer, &in_format);
+ struct mp_audio in_format = mpctx->d_audio->decode_format;
if (!mp_audio_config_valid(&in_format)) {
// We don't know the audio format yet - so configure it later as we're
@@ -238,7 +238,7 @@ void reinit_audio_chain(struct MPContext *mpctx)
}
// filter input format: same as codec's output format:
- mp_audio_buffer_get_format(mpctx->d_audio->decode_buffer, &afs->input);
+ afs->input = in_format;
// Determine what the filter chain outputs. recreate_audio_filters() also
// needs this for testing whether playback speed is changed by resampling
@@ -304,8 +304,7 @@ double written_audio_pts(struct MPContext *mpctx)
if (!d_audio)
return MP_NOPTS_VALUE;
- struct mp_audio in_format;
- mp_audio_buffer_get_format(d_audio->decode_buffer, &in_format);
+ struct mp_audio in_format = d_audio->decode_format;
if (!mp_audio_config_valid(&in_format) || d_audio->afilter->initialized < 1)
return MP_NOPTS_VALUE;
@@ -324,7 +323,8 @@ double written_audio_pts(struct MPContext *mpctx)
// Subtract data in buffers between decoder and audio out.
// Decoded but not filtered
- a_pts -= mp_audio_buffer_seconds(d_audio->decode_buffer);
+ if (d_audio->waiting)
+ a_pts -= d_audio->waiting->samples / (double)in_format.rate;
// Data buffered in audio filters, measured in seconds of "missing" output
double buffered_output = af_calc_delay(d_audio->afilter);
diff --git a/player/command.c b/player/command.c
index 04c0c4d789..3513d99afc 100644
--- a/player/command.c
+++ b/player/command.c
@@ -1550,7 +1550,7 @@ static int mp_property_samplerate(void *ctx, struct m_property *prop,
MPContext *mpctx = ctx;
struct mp_audio fmt = {0};
if (mpctx->d_audio)
- mp_audio_buffer_get_format(mpctx->d_audio->decode_buffer, &fmt);
+ fmt = mpctx->d_audio->decode_format;
if (!fmt.rate)
return M_PROPERTY_UNAVAILABLE;
if (action == M_PROPERTY_PRINT) {
@@ -1567,7 +1567,7 @@ static int mp_property_channels(void *ctx, struct m_property *prop,
MPContext *mpctx = ctx;
struct mp_audio fmt = {0};
if (mpctx->d_audio)
- mp_audio_buffer_get_format(mpctx->d_audio->decode_buffer, &fmt);
+ fmt = mpctx->d_audio->decode_format;
if (!fmt.channels.num)
return M_PROPERTY_UNAVAILABLE;
switch (action) {