mirror of
https://github.com/mpv-player/mpv.git
synced 2026-10-29 07:06:59 +08:00
core: give pts as parameter to demuxer_get_current_chapter()
demuxer_get_current_chapter() accessed sh_video/sh_audio pts fields to determine playback position. demux layer shouldn't access those and the values used weren't quite correct anyway. Give the playback position as a parameter to the demux layer function instead. Also change the top-level get_current_chapter() to use get_current_time() in the timeline case where it didn't refer to demux layer.
This commit is contained in:
@@ -1462,7 +1462,7 @@ int demuxer_seek_chapter(demuxer_t *demuxer, int chapter, double *seek_pts,
|
||||
}
|
||||
}
|
||||
|
||||
int demuxer_get_current_chapter(demuxer_t *demuxer)
|
||||
int demuxer_get_current_chapter(demuxer_t *demuxer, double time_now)
|
||||
{
|
||||
int chapter = -2;
|
||||
if (!demuxer->num_chapters || !demuxer->chapters) {
|
||||
@@ -1470,11 +1470,7 @@ int demuxer_get_current_chapter(demuxer_t *demuxer)
|
||||
&chapter) == STREAM_UNSUPPORTED)
|
||||
chapter = -2;
|
||||
} else {
|
||||
sh_video_t *sh_video = demuxer->video->sh;
|
||||
sh_audio_t *sh_audio = demuxer->audio->sh;
|
||||
uint64_t now;
|
||||
now = (sh_video ? sh_video->pts : (sh_audio ? sh_audio->pts : 0))
|
||||
* 1000 + 0.5;
|
||||
uint64_t now = time_now * 1000 + 0.5;
|
||||
for (chapter = demuxer->num_chapters - 1; chapter >= 0; --chapter) {
|
||||
if (demuxer->chapters[chapter].start <= now)
|
||||
break;
|
||||
|
||||
@@ -451,7 +451,7 @@ int demuxer_seek_chapter(demuxer_t *demuxer, int chapter, double *seek_pts,
|
||||
char **chapter_name);
|
||||
|
||||
/// Get current chapter index if available.
|
||||
int demuxer_get_current_chapter(demuxer_t *demuxer);
|
||||
int demuxer_get_current_chapter(demuxer_t *demuxer, double time_now);
|
||||
/// Get chapter name by index if available.
|
||||
char *demuxer_chapter_name(demuxer_t *demuxer, int chapter);
|
||||
/// Get chapter display name by index.
|
||||
|
||||
@@ -2915,12 +2915,12 @@ int get_percent_pos(struct MPContext *mpctx)
|
||||
// -2 is no chapters, -1 is before first chapter
|
||||
int get_current_chapter(struct MPContext *mpctx)
|
||||
{
|
||||
if (!mpctx->chapters || !mpctx->sh_video)
|
||||
double current_pts = get_current_time(mpctx);
|
||||
if (!mpctx->chapters)
|
||||
return FFMAX(mpctx->last_chapter_seek,
|
||||
demuxer_get_current_chapter(mpctx->demuxer));
|
||||
demuxer_get_current_chapter(mpctx->demuxer, current_pts));
|
||||
|
||||
int i;
|
||||
double current_pts = mpctx->sh_video->pts;
|
||||
for (i = 1; i < mpctx->num_chapters; i++)
|
||||
if (current_pts < mpctx->chapters[i].start)
|
||||
break;
|
||||
@@ -3913,7 +3913,7 @@ if((stream_dump_type)&&(stream_dump_type<4)){
|
||||
&& stream_dump_type==2) fwrite(&in_size,1,4,f);
|
||||
if(in_size>0) fwrite(start,in_size,1,f);
|
||||
if (opts->chapterrange[1] > 0) {
|
||||
int cur_chapter = demuxer_get_current_chapter(mpctx->demuxer);
|
||||
int cur_chapter = demuxer_get_current_chapter(mpctx->demuxer, 0);
|
||||
if(cur_chapter!=-1 && cur_chapter+1 > opts->chapterrange[1])
|
||||
break;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user