summaryrefslogtreecommitdiffstats
path: root/gst/qtdemux/qtdemux_dump.c
diff options
context:
space:
mode:
authorWim Taymans <wim.taymans@gmail.com>2007-04-11 09:53:38 +0000
committerWim Taymans <wim.taymans@gmail.com>2007-04-11 09:53:38 +0000
commit2f97f23897aa416ee783060685147b8373338b0a (patch)
treeb8edfba29c1aa29f38b6acaebc89a53088e8c9d3 /gst/qtdemux/qtdemux_dump.c
parentacddbd83ff23d7016afdcfad5da3d3aa82b63679 (diff)
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.c36
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