qtdemux: compute framerate from average sample duration

https://bugzilla.gnome.org/show_bug.cgi?id=703350
This commit is contained in:
Matej Knopp 2013-06-30 21:01:20 +02:00 committed by Sebastian Dröge
parent 97015d3c93
commit 4053e1d6ac
2 changed files with 16 additions and 5 deletions

View file

@ -10,7 +10,7 @@ libgstisomp4_la_LIBADD = \
-lgstrtp-@GST_API_VERSION@ \ -lgstrtp-@GST_API_VERSION@ \
-lgsttag-@GST_API_VERSION@ \ -lgsttag-@GST_API_VERSION@ \
-lgstpbutils-@GST_API_VERSION@ \ -lgstpbutils-@GST_API_VERSION@ \
$(GST_BASE_LIBS) $(GST_LIBS) $(ZLIB_LIBS) $(GST_BASE_LIBS) $(GST_LIBS) $(ZLIB_LIBS) $(LIBM)
libgstisomp4_la_LDFLAGS = ${GST_PLUGIN_LDFLAGS} libgstisomp4_la_LDFLAGS = ${GST_PLUGIN_LDFLAGS}
libgstisomp4_la_SOURCES = isomp4-plugin.c gstrtpxqtdepay.c \ libgstisomp4_la_SOURCES = isomp4-plugin.c gstrtpxqtdepay.c \
qtdemux.c qtdemux_types.c qtdemux_dump.c qtdemux_lang.c \ qtdemux.c qtdemux_types.c qtdemux_dump.c qtdemux_lang.c \

View file

@ -70,6 +70,9 @@
#include <stdlib.h> #include <stdlib.h>
#include <string.h> #include <string.h>
#include <math.h>
#include <gst/math-compat.h>
#ifdef HAVE_ZLIB #ifdef HAVE_ZLIB
# include <zlib.h> # include <zlib.h>
#endif #endif
@ -5528,11 +5531,19 @@ gst_qtdemux_configure_stream (GstQTDemux * qtdemux, QtDemuxStream * stream)
stream->fps_n = 0; stream->fps_n = 0;
stream->fps_d = 1; stream->fps_d = 1;
} else { } else {
stream->fps_n = stream->timescale; /* we might need to scale the timescale to get precise framerate */
if (stream->min_duration == 0) const int required_scale = rint (log (10000) / 2.303); /* divide to get log10 */
stream->fps_d = 1; int current_scale = rint (log (stream->timescale) / 2.303);
int factor = pow (10.0, MAX (0, required_scale - current_scale));
stream->fps_n = stream->timescale * factor;
if (stream->duration == 0)
stream->fps_d = factor;
else else
stream->fps_d = stream->min_duration; stream->fps_d =
gst_util_uint64_scale_int_round (factor, stream->duration,
stream->n_samples);
} }
if (stream->caps) { if (stream->caps) {