weston: Fix gst-record uses MONOTONIC time for IVI-Cluster system 91/9691/2
authorHarunobu Kurokawa <harunobu.kurokawa.dn@renesas.com>
Sat, 10 Jun 2017 04:30:33 +0000 (13:30 +0900)
committerJan-Simon Moeller <jsmoeller@linuxfoundation.org>
Thu, 15 Jun 2017 09:44:46 +0000 (09:44 +0000)
gst-record plugin uses gettimeofday to adapt gst buffer duration.
When WLAN network access internet, system timer is changed by NTP, then
the gst plugin system stopped.

This patch change to use MONOTONIC timer to detect buffer time frame.

--
The patch is same as
https://gerrit.automotivelinux.org/gerrit/#/c/9417/

Change-Id: I2761b0f9dc3bed58d8556966acc54f9dc13d0556
Signed-off-by: Harunobu Kurokawa <harunobu.kurokawa.dn@renesas.com>
recipes-graphics/wayland/weston/0005-gst-record-switch-to-gettime-function-to-CLOCK_MONOT.patch [new file with mode: 0644]
recipes-graphics/wayland/weston_1.11.0.bbappend

diff --git a/recipes-graphics/wayland/weston/0005-gst-record-switch-to-gettime-function-to-CLOCK_MONOT.patch b/recipes-graphics/wayland/weston/0005-gst-record-switch-to-gettime-function-to-CLOCK_MONOT.patch
new file mode 100644 (file)
index 0000000..fff96d4
--- /dev/null
@@ -0,0 +1,64 @@
+From 725eeebe45149c1340d68a24da50b301955146fc Mon Sep 17 00:00:00 2001
+From: Harunobu Kurokawa <harunobu.kurokawa.dn@renesas.com>
+Date: Sat, 10 Jun 2017 11:23:02 +0900
+Subject: [PATCH] gst-record: switch to gettime function to CLOCK_MONOTONIC
+
+When system time is changed (e.g. from NTP) and buffer duration
+is bigger, the gst-record stops. It should use the CLOCK_MONOTONIC time.
+
+This patch is updated from
+https://gerrit.automotivelinux.org/gerrit/#/c/9417/
+
+Signed-off-by: Harunobu Kurokawa <harunobu.kurokawa.dn@renesas.com>
+---
+ src/gst-recorder.c | 14 +++++++++-----
+ 1 file changed, 9 insertions(+), 5 deletions(-)
+
+diff --git a/src/gst-recorder.c b/src/gst-recorder.c
+index 441e294..ed1526d 100644
+--- a/src/gst-recorder.c
++++ b/src/gst-recorder.c
+@@ -102,8 +102,9 @@ struct gst_recorder {
+       /* bus */
+       GstBus *bus;
+       /* timestamp */
++      GstClock   *clock;
+       GstClockTime timestamp;
+-      uint32_t ts_last_frame;
++      GstClockTime ts_last_frame;
+       /* to be removed */
+       guint callback_tag;
+@@ -1036,6 +1037,9 @@ gst_recorder_create(struct gst_recorder_settings *settings)
+               goto err_gst_stop;
+       }
++      /* set clock time */
++      r->clock = gst_element_get_clock (GST_ELEMENT_CAST (r->appsrc));
++
+       weston_log("gst_recorder_create done\n");
+       return r;
+@@ -1071,15 +1075,15 @@ gst_recorder_destroy(struct gst_recorder *r)
+ static int
+ gst_recorder_set_timestamp(struct gst_recorder *r, GstBuffer *buffer)
+ {
+-      uint32_t cur_time = weston_compositor_get_time();
++      GstClockTime cur_time = gst_clock_get_time(r->clock);
+       if (r->timestamp == 0) {
+               /* first frame assume around DEFAULT_FPS FPS */
+               GST_BUFFER_DURATION(buffer) = gst_util_uint64_scale_int(1, GST_SECOND, DEFAULT_FPS);
+       } else {
+-              uint32_t delta = cur_time - r->ts_last_frame;
+-              /* delta in mS */
+-              GST_BUFFER_DURATION(buffer) = gst_util_uint64_scale_int(delta, GST_SECOND, 1000);
++              GstClockTime delta = cur_time - r->ts_last_frame;
++              /* delta in nS */
++              GST_BUFFER_DURATION(buffer) = delta;
+       }
+       r->timestamp += GST_BUFFER_DURATION(buffer);
+-- 
+2.9.2
+
index 25cf791..df79249 100644 (file)
@@ -5,4 +5,5 @@ SRC_URI_append_m3ulcb = " \
     file://0002-Add-gst-recorder-for-h264-output-streaming.patch \
     file://0003-gst-recorder-Use-USERPTR-instead-of-DMABUF-for-VSP-o.patch \
     file://0004-gst-record-Specify-bytesused-and-length-of-VSP-input.patch \
+    file://0005-gst-record-switch-to-gettime-function-to-CLOCK_MONOT.patch \
 "