mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2025-01-29 18:48:44 +00:00
qtdemux: compute framerate from average sample duration
https://bugzilla.gnome.org/show_bug.cgi?id=703350
This commit is contained in:
parent
97015d3c93
commit
4053e1d6ac
2 changed files with 16 additions and 5 deletions
|
@ -10,7 +10,7 @@ libgstisomp4_la_LIBADD = \
|
|||
-lgstrtp-@GST_API_VERSION@ \
|
||||
-lgsttag-@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_SOURCES = isomp4-plugin.c gstrtpxqtdepay.c \
|
||||
qtdemux.c qtdemux_types.c qtdemux_dump.c qtdemux_lang.c \
|
||||
|
|
|
@ -70,6 +70,9 @@
|
|||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
|
||||
#include <math.h>
|
||||
#include <gst/math-compat.h>
|
||||
|
||||
#ifdef HAVE_ZLIB
|
||||
# include <zlib.h>
|
||||
#endif
|
||||
|
@ -5528,11 +5531,19 @@ gst_qtdemux_configure_stream (GstQTDemux * qtdemux, QtDemuxStream * stream)
|
|||
stream->fps_n = 0;
|
||||
stream->fps_d = 1;
|
||||
} else {
|
||||
stream->fps_n = stream->timescale;
|
||||
if (stream->min_duration == 0)
|
||||
stream->fps_d = 1;
|
||||
/* we might need to scale the timescale to get precise framerate */
|
||||
const int required_scale = rint (log (10000) / 2.303); /* divide to get log10 */
|
||||
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
|
||||
stream->fps_d = stream->min_duration;
|
||||
stream->fps_d =
|
||||
gst_util_uint64_scale_int_round (factor, stream->duration,
|
||||
stream->n_samples);
|
||||
}
|
||||
|
||||
if (stream->caps) {
|
||||
|
|
Loading…
Reference in a new issue