summaryrefslogtreecommitdiffstats
path: root/meta-rcar-gen2/recipes-graphics/wayland/weston/0005-gst-record-switch-to-gettime-function-to-CLOCK_MONOT.patch
diff options
context:
space:
mode:
Diffstat (limited to 'meta-rcar-gen2/recipes-graphics/wayland/weston/0005-gst-record-switch-to-gettime-function-to-CLOCK_MONOT.patch')
-rw-r--r--meta-rcar-gen2/recipes-graphics/wayland/weston/0005-gst-record-switch-to-gettime-function-to-CLOCK_MONOT.patch68
1 files changed, 68 insertions, 0 deletions
diff --git a/meta-rcar-gen2/recipes-graphics/wayland/weston/0005-gst-record-switch-to-gettime-function-to-CLOCK_MONOT.patch b/meta-rcar-gen2/recipes-graphics/wayland/weston/0005-gst-record-switch-to-gettime-function-to-CLOCK_MONOT.patch
new file mode 100644
index 0000000..ae87cde
--- /dev/null
+++ b/meta-rcar-gen2/recipes-graphics/wayland/weston/0005-gst-record-switch-to-gettime-function-to-CLOCK_MONOT.patch
@@ -0,0 +1,68 @@
+From 7d6cc173fb04597a05e846c5d17962de7ec388d4 Mon Sep 17 00:00:00 2001
+From: Harunobu Kurokawa <harunobu.kurokawa.dn@renesas.com>
+Date: Tue, 16 May 2017 21:50: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.
+
+v2:
+ Need to use gst_clock_get_time function. Thus, GstClockTime is nsec
+timescale, it should be convert uint64_t by GST_TIME_AS_MSECONDS.
+
+v3:
+ Need to use gst_clock_get_time function and GstClockTime.
+
+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 91ba0c7..1a06a39 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;
+
+@@ -1042,6 +1043,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;
+@@ -1077,15 +1081,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
+