diff options
author | Julien Isorce <jisorce@oblong.com> | 2017-12-12 17:30:27 +0000 |
---|---|---|
committer | Julien Isorce <jisorce@oblong.com> | 2017-12-14 09:20:49 +0000 |
commit | 681087819372e57157a13fbf3ac813a3025a2a29 (patch) | |
tree | 89d33c2f883bde2333c6a0784e871bf891fb2172 /omx/gstomxvideo.c | |
parent | 7048134fa9818fc7814942698e87570f31932f26 (diff) | |
download | gst-omx-681087819372e57157a13fbf3ac813a3025a2a29.tar.gz |
omxvideodec: ignore very little variations of the framerate
If less than 1%.
The dynamic format change should not happen when the
resolution does not change and when only the framerate
changes but very slightly, i.e. from 50000/1677=29.81
to 89/3=29.66 so a "percentage change" of less than 1%
(i.e. 100*(29.81-29.66)/29.66 = 0.50 < 1 ). In that case
just ignore it to avoid unnecessary renegotiation.
https://bugzilla.gnome.org/show_bug.cgi?id=759043
Diffstat (limited to 'omx/gstomxvideo.c')
-rw-r--r-- | omx/gstomxvideo.c | 16 |
1 files changed, 16 insertions, 0 deletions
diff --git a/omx/gstomxvideo.c b/omx/gstomxvideo.c index fca0fd5..c06a2f4 100644 --- a/omx/gstomxvideo.c +++ b/omx/gstomxvideo.c @@ -28,6 +28,8 @@ #include "gstomxvideo.h" +#include <math.h> + GST_DEBUG_CATEGORY (gst_omx_video_debug_category); #define GST_CAT_DEFAULT gst_omx_video_debug_category @@ -206,3 +208,17 @@ gst_omx_video_calculate_framerate_q16 (GstVideoInfo * info) return gst_util_uint64_scale_int (1 << 16, info->fps_n, info->fps_d); } + +gboolean +gst_omx_video_is_equal_framerate_q16 (OMX_U32 q16_a, OMX_U32 q16_b) +{ + /* If one of them is 0 use the classic comparison. The value 0 has a special + meaning and is used to indicate the frame rate is unknown, variable, or + is not needed. */ + if (!q16_a || !q16_b) + return q16_a == q16_b; + + /* If the 'percentage change' is less than 1% then consider it equal to avoid + * an unnecessary re-negotiation. */ + return fabs (((gdouble) q16_a) - ((gdouble) q16_b)) / (gdouble) q16_b < 0.01; +} |