diff options
-rw-r--r-- | meta-rcar-gen2/recipes-graphics/wayland/weston/0005-gst-record-switch-to-gettime-function-to-CLOCK_MONOT.patch | 68 | ||||
-rw-r--r-- | meta-rcar-gen2/recipes-graphics/wayland/weston_1.9.0.bbappend | 1 |
2 files changed, 69 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 + diff --git a/meta-rcar-gen2/recipes-graphics/wayland/weston_1.9.0.bbappend b/meta-rcar-gen2/recipes-graphics/wayland/weston_1.9.0.bbappend index 533be7e..7a54fcf 100644 --- a/meta-rcar-gen2/recipes-graphics/wayland/weston_1.9.0.bbappend +++ b/meta-rcar-gen2/recipes-graphics/wayland/weston_1.9.0.bbappend @@ -8,5 +8,6 @@ SRC_URI_append = " \ file://0002-Get-DMA-fd-on-bo.patch \ file://0003-Add-gst-recorder-for-h264-output-streaming.patch \ file://0004-Fix-GST-error-complainings.patch \ + file://0005-gst-record-switch-to-gettime-function-to-CLOCK_MONOT.patch \ file://weston.service \ " |