diff options
author | Wim Taymans <wim.taymans@gmail.com> | 2007-04-11 09:53:38 +0000 |
---|---|---|
committer | Wim Taymans <wim.taymans@gmail.com> | 2007-04-11 09:53:38 +0000 |
commit | 54260af4c9042d98531907c3a149eea03b5283cd (patch) | |
tree | b3a8f0237b90f9b724bd384e5a4afbb2bc164147 /gst/qtdemux/qtdemux_dump.c | |
parent | 8db0d2bcab91315deaf53f97fb8e3213d7e6ff6d (diff) | |
download | gst-plugins-bad-54260af4c9042d98531907c3a149eea03b5283cd.tar.gz gst-plugins-bad-54260af4c9042d98531907c3a149eea03b5283cd.tar.bz2 gst-plugins-bad-54260af4c9042d98531907c3a149eea03b5283cd.zip |
gst/qtdemux/: Handle version 1 mdhd atoms to get extended precision durations.
Original commit message from CVS:
* gst/qtdemux/qtdemux.c: (gst_qtdemux_get_duration),
(qtdemux_parse_samples), (qtdemux_parse_segments),
(qtdemux_parse_trak), (qtdemux_parse_tree):
* gst/qtdemux/qtdemux_dump.c: (qtdemux_dump_mdhd):
Handle version 1 mdhd atoms to get extended precision durations.
Fixes #426972.
Diffstat (limited to 'gst/qtdemux/qtdemux_dump.c')
-rw-r--r-- | gst/qtdemux/qtdemux_dump.c | 36 |
1 files changed, 29 insertions, 7 deletions
diff --git a/gst/qtdemux/qtdemux_dump.c b/gst/qtdemux/qtdemux_dump.c index 357a5b15..391d67a0 100644 --- a/gst/qtdemux/qtdemux_dump.c +++ b/gst/qtdemux/qtdemux_dump.c @@ -83,14 +83,36 @@ qtdemux_dump_elst (GstQTDemux * qtdemux, guint8 * buffer, int depth) void qtdemux_dump_mdhd (GstQTDemux * qtdemux, guint8 * buffer, int depth) { - GST_LOG ("%*s version/flags: %08x", depth, "", QT_UINT32 (buffer + 8)); - GST_LOG ("%*s creation time: %u", depth, "", QT_UINT32 (buffer + 12)); - GST_LOG ("%*s modify time: %u", depth, "", QT_UINT32 (buffer + 16)); - GST_LOG ("%*s time scale: 1/%u sec", depth, "", QT_UINT32 (buffer + 20)); - GST_LOG ("%*s duration: %u", depth, "", QT_UINT32 (buffer + 24)); - GST_LOG ("%*s language: %u", depth, "", QT_UINT16 (buffer + 28)); - GST_LOG ("%*s quality: %u", depth, "", QT_UINT16 (buffer + 30)); + guint32 version; + guint64 duration, ctime, mtime; + guint32 time_scale; + guint16 language, quality; + + version = QT_UINT32 (buffer + 8); + GST_LOG ("%*s version/flags: %08x", depth, "", version); + + if (version == 0x01000000) { + ctime = QT_UINT64 (buffer + 12); + mtime = QT_UINT64 (buffer + 20); + time_scale = QT_UINT32 (buffer + 28); + duration = QT_UINT64 (buffer + 32); + language = QT_UINT16 (buffer + 40); + quality = QT_UINT16 (buffer + 42); + } else { + ctime = QT_UINT32 (buffer + 12); + mtime = QT_UINT32 (buffer + 16); + time_scale = QT_UINT32 (buffer + 20); + duration = QT_UINT32 (buffer + 24); + language = QT_UINT16 (buffer + 28); + quality = QT_UINT16 (buffer + 30); + } + GST_LOG ("%*s creation time: %" G_GUINT64_FORMAT, depth, "", ctime); + GST_LOG ("%*s modify time: %" G_GUINT64_FORMAT, depth, "", mtime); + GST_LOG ("%*s time scale: 1/%u sec", depth, "", time_scale); + GST_LOG ("%*s duration: %" G_GUINT64_FORMAT, depth, "", duration); + GST_LOG ("%*s language: %u", depth, "", language); + GST_LOG ("%*s quality: %u", depth, "", quality); } void |