From: <wt...@ke...> - 2006-10-31 10:31:35
|
CVS Root: /cvs/gstreamer Module: gst-plugins-bad Changes by: wtay Date: Tue Oct 31 2006 10:31:30 UTC Log message: * gst/qtdemux/qtdemux.c: (gst_qtdemux_get_duration), (gst_qtdemux_handle_src_query), (qtdemux_parse_tree), (qtdemux_parse_trak): Handle unbounded length streams a bit better. Fixes #367696. Modified files: . : ChangeLog gst/qtdemux : qtdemux.c Links: http://freedesktop.org/cgi-bin/viewcvs.cgi/gstreamer/gst-plugins-bad/ChangeLog.diff?r1=1.2294&r2=1.2295 http://freedesktop.org/cgi-bin/viewcvs.cgi/gstreamer/gst-plugins-bad/gst/qtdemux/qtdemux.c.diff?r1=1.173&r2=1.174 ====Begin Diffs==== Index: ChangeLog =================================================================== RCS file: /cvs/gstreamer/gst-plugins-bad/ChangeLog,v retrieving revision 1.2294 retrieving revision 1.2295 diff -u -d -r1.2294 -r1.2295 --- ChangeLog 29 Oct 2006 19:08:00 -0000 1.2294 +++ ChangeLog 31 Oct 2006 10:31:18 -0000 1.2295 @@ -1,3 +1,10 @@ +2006-10-31 Wim Taymans <wi...@fl...> + + * gst/qtdemux/qtdemux.c: (gst_qtdemux_get_duration), + (gst_qtdemux_handle_src_query), (qtdemux_parse_tree), + (qtdemux_parse_trak): + Handle unbounded length streams a bit better. Fixes #367696. 2006-10-29 Tim-Philipp Müller <tim at centricular dot net> * ext/dts/gstdtsdec.c: (gst_dtsdec_handle_frame): Index: qtdemux.c RCS file: /cvs/gstreamer/gst-plugins-bad/gst/qtdemux/qtdemux.c,v retrieving revision 1.173 retrieving revision 1.174 diff -u -d -r1.173 -r1.174 --- qtdemux.c 17 Oct 2006 14:57:17 -0000 1.173 +++ qtdemux.c 31 Oct 2006 10:31:18 -0000 1.174 @@ -558,6 +558,22 @@ } static gboolean +gst_qtdemux_get_duration (GstQTDemux * qtdemux, gint64 * duration) +{ + gboolean res = TRUE; + *duration = GST_CLOCK_TIME_NONE; + if (qtdemux->duration != 0) { + if (qtdemux->duration != G_MAXINT32 && qtdemux->timescale != 0) { + *duration = gst_util_uint64_scale_int (qtdemux->duration, + GST_SECOND, qtdemux->timescale); + } + } + return res; +} +static gboolean gst_qtdemux_handle_src_query (GstPad * pad, GstQuery * query) { gboolean res = FALSE; @@ -572,15 +588,13 @@ } break; case GST_QUERY_DURATION: - if (qtdemux->duration != 0 && qtdemux->timescale != 0) { - gint64 duration; + { + gint64 duration; - duration = gst_util_uint64_scale_int (qtdemux->duration, - GST_SECOND, qtdemux->timescale); + res = gst_qtdemux_get_duration (qtdemux, &duration); - gst_query_set_duration (query, GST_FORMAT_TIME, duration); - res = TRUE; - } + gst_query_set_duration (query, GST_FORMAT_TIME, duration); default: res = FALSE; @@ -3145,12 +3159,10 @@ GST_INFO_OBJECT (qtdemux, "timescale: %d", qtdemux->timescale); GST_INFO_OBJECT (qtdemux, "duration: %d", qtdemux->duration); - if (qtdemux->timescale != 0 && qtdemux->duration != 0) { + if (TRUE) { gint64 duration; - duration = gst_util_uint64_scale_int (qtdemux->duration, - GST_SECOND, qtdemux->timescale); - + gst_qtdemux_get_duration (qtdemux, &duration); gst_segment_set_duration (&qtdemux->segment, GST_FORMAT_TIME, duration); } @@ -3242,7 +3254,7 @@ GST_LOG ("track timescale: %d", stream->timescale); GST_LOG ("track duration: %d", stream->duration); - { + if (qtdemux->duration != G_MAXINT32 && stream->duration != G_MAXINT32) { guint64 tdur1, tdur2; /* don't overflow */ |