summaryrefslogtreecommitdiffstats
path: root/libmpdemux/demuxer.c
diff options
context:
space:
mode:
authorUoti Urpala <uau@glyph.nonexistent.invalid>2011-01-24 00:29:01 +0200
committerUoti Urpala <uau@glyph.nonexistent.invalid>2011-01-26 20:39:04 +0200
commit304cafd31dfaeee853e138a460b7ba82e65ed420 (patch)
tree8c5945cccb2dfc34424f56f941120e4375108354 /libmpdemux/demuxer.c
parenta248c2c7a137517061e6271f22b84d43bcd7191d (diff)
downloadmpv-304cafd31dfaeee853e138a460b7ba82e65ed420.tar.bz2
mpv-304cafd31dfaeee853e138a460b7ba82e65ed420.tar.xz
demux_mkv, chapters: change millisecond arithmetic to ns
demux_mkv kept various integer timestamps in millisecond units. Matroska timestamp arithmetic is however specified in nanoseconds (even though files typically use 1 ms precision), and using ms units instead of that only made things more complex. Based on the demux_mkv example the general demuxer-level chapter structure also used ms units. Change the demux_mkv arithmetic and demuxer chapter structures to use nanoseconds instead. This also fixes a seeking problem in demux_mkv with files using a TimecodeScale other than the usual 1000000 (confusion between ms and TimecodeScale*ns units).
Diffstat (limited to 'libmpdemux/demuxer.c')
-rw-r--r--libmpdemux/demuxer.c12
1 files changed, 6 insertions, 6 deletions
diff --git a/libmpdemux/demuxer.c b/libmpdemux/demuxer.c
index eb548d4614..098c631631 100644
--- a/libmpdemux/demuxer.c
+++ b/libmpdemux/demuxer.c
@@ -1316,9 +1316,9 @@ int demuxer_add_chapter(demuxer_t *demuxer, struct bstr name,
talloc_strdup(demuxer->chapters, mp_gtext("unknown"));
mp_msg(MSGT_IDENTIFY, MSGL_INFO, "ID_CHAPTER_ID=%d\n", demuxer->num_chapters);
- mp_msg(MSGT_IDENTIFY, MSGL_INFO, "ID_CHAPTER_%d_START=%"PRIu64"\n", demuxer->num_chapters, start);
+ mp_msg(MSGT_IDENTIFY, MSGL_INFO, "ID_CHAPTER_%d_START=%"PRIu64"\n", demuxer->num_chapters, start / 1000000);
if (end)
- mp_msg(MSGT_IDENTIFY, MSGL_INFO, "ID_CHAPTER_%d_END=%"PRIu64"\n", demuxer->num_chapters, end);
+ mp_msg(MSGT_IDENTIFY, MSGL_INFO, "ID_CHAPTER_%d_END=%"PRIu64"\n", demuxer->num_chapters, end / 1000000);
if (name.start)
mp_msg(MSGT_IDENTIFY, MSGL_INFO, "ID_CHAPTER_%d_NAME=%.*s\n", demuxer->num_chapters, BSTR_P(name));
@@ -1371,7 +1371,7 @@ int demuxer_seek_chapter(demuxer_t *demuxer, int chapter, double *seek_pts,
if (chapter < 0)
chapter = 0;
- *seek_pts = demuxer->chapters[chapter].start / 1000.0;
+ *seek_pts = demuxer->chapters[chapter].start / 1e9;
if (chapter_name)
*chapter_name = talloc_strdup(NULL, demuxer->chapters[chapter].name);
@@ -1388,7 +1388,7 @@ int demuxer_get_current_chapter(demuxer_t *demuxer, double time_now)
&chapter) == STREAM_UNSUPPORTED)
chapter = -2;
} else {
- uint64_t now = time_now * 1000 + 0.5;
+ uint64_t now = time_now * 1e9 + 0.5;
for (chapter = demuxer->num_chapters - 1; chapter >= 0; --chapter) {
if (demuxer->chapters[chapter].start <= now)
break;
@@ -1431,8 +1431,8 @@ float demuxer_chapter_time(demuxer_t *demuxer, int chapter, float *end)
if (demuxer->num_chapters && demuxer->chapters && chapter >= 0
&& chapter < demuxer->num_chapters) {
if (end)
- *end = demuxer->chapters[chapter].end / 1000.0;
- return demuxer->chapters[chapter].start / 1000.0;
+ *end = demuxer->chapters[chapter].end / 1e9;
+ return demuxer->chapters[chapter].start / 1e9;
}
return -1.0;
}