mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2024-11-20 08:41:07 +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@ \
|
-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 \
|
||||||
|
|
|
@ -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) {
|
||||||
|
|
Loading…
Reference in a new issue