1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
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
|