mirror of https://github.com/mpv-player/mpv
core: audio: if audio pts is missing return MP_NOPTS_VALUE
Change written_audio_pts() and playing_audio_pts() to return MP_NOPTS_VALUE if no reasonable pts estimate is available. Before they returned some incorrect value typically around zero (but not necessarily exactly that).
This commit is contained in:
parent
b33bb28ea3
commit
f1bb6fde32
|
@ -779,7 +779,7 @@ void ds_free_packs(demux_stream_t *ds)
|
||||||
ds->current = NULL;
|
ds->current = NULL;
|
||||||
ds->buffer = NULL;
|
ds->buffer = NULL;
|
||||||
ds->buffer_pos = ds->buffer_size;
|
ds->buffer_pos = ds->buffer_size;
|
||||||
ds->pts = 0;
|
ds->pts = MP_NOPTS_VALUE;
|
||||||
ds->pts_bytes = 0;
|
ds->pts_bytes = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1855,6 +1855,9 @@ static double written_audio_pts(struct MPContext *mpctx)
|
||||||
// but not accurately known in sh_audio->i_bps.
|
// but not accurately known in sh_audio->i_bps.
|
||||||
|
|
||||||
a_pts = d_audio->pts;
|
a_pts = d_audio->pts;
|
||||||
|
if (a_pts == MP_NOPTS_VALUE)
|
||||||
|
return a_pts;
|
||||||
|
|
||||||
// ds_tell_pts returns bytes read after last timestamp from
|
// ds_tell_pts returns bytes read after last timestamp from
|
||||||
// demuxing layer, decoder might use sh_audio->a_in_buffer for bytes
|
// demuxing layer, decoder might use sh_audio->a_in_buffer for bytes
|
||||||
// it has read but not decoded
|
// it has read but not decoded
|
||||||
|
@ -1885,8 +1888,10 @@ static double written_audio_pts(struct MPContext *mpctx)
|
||||||
// Return pts value corresponding to currently playing audio.
|
// Return pts value corresponding to currently playing audio.
|
||||||
double playing_audio_pts(struct MPContext *mpctx)
|
double playing_audio_pts(struct MPContext *mpctx)
|
||||||
{
|
{
|
||||||
return written_audio_pts(mpctx) - mpctx->opts.playback_speed *
|
double pts = written_audio_pts(mpctx);
|
||||||
ao_get_delay(mpctx->ao);
|
if (pts == MP_NOPTS_VALUE)
|
||||||
|
return pts;
|
||||||
|
return pts - mpctx->opts.playback_speed * ao_get_delay(mpctx->ao);
|
||||||
}
|
}
|
||||||
|
|
||||||
static bool is_av_sub(int type)
|
static bool is_av_sub(int type)
|
||||||
|
|
Loading…
Reference in New Issue