From 642ce15ef770dd5dbea7c7ee16cbf45f6e86feae Mon Sep 17 00:00:00 2001 From: Uoti Urpala Date: Sat, 13 Nov 2010 15:48:26 +0200 Subject: 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. --- libmpdemux/demuxer.c | 8 ++------ libmpdemux/demuxer.h | 2 +- mplayer.c | 8 ++++---- 3 files changed, 7 insertions(+), 11 deletions(-) diff --git a/libmpdemux/demuxer.c b/libmpdemux/demuxer.c index 4d8e64e7c8..fe4dc18d23 100644 --- a/libmpdemux/demuxer.c +++ b/libmpdemux/demuxer.c @@ -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; diff --git a/libmpdemux/demuxer.h b/libmpdemux/demuxer.h index cf77514aa0..e8878e3bed 100644 --- a/libmpdemux/demuxer.h +++ b/libmpdemux/demuxer.h @@ -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. diff --git a/mplayer.c b/mplayer.c index 87e759ac92..83c6328b5d 100644 --- a/mplayer.c +++ b/mplayer.c @@ -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; } -- cgit v1.2.3