From: Gabriel Francisco Mandaji <gfmandaji@gmail.com>
To: Hans Verkuil <hverkuil@xs4all.nl>,
Mauro Carvalho Chehab <mchehab@kernel.org>,
linux-media@vger.kernel.org, linux-kernel@vger.kernel.org
Cc: lkcamp@lists.libreplanetbr.org
Subject: [PATCH] media: vivid: Improve timestamping
Date: Tue, 9 Oct 2018 21:49:21 -0300 [thread overview]
Message-ID: <20181010004921.GA6532@gfm-note> (raw)
Simulate a more precise timestamp by calculating it based on the
current framerate.
Signed-off-by: Gabriel Francisco Mandaji <gfmandaji@gmail.com>
---
drivers/media/platform/vivid/vivid-core.h | 1 +
drivers/media/platform/vivid/vivid-kthread-cap.c | 24 ++++++++++++++++--------
2 files changed, 17 insertions(+), 8 deletions(-)
diff --git a/drivers/media/platform/vivid/vivid-core.h b/drivers/media/platform/vivid/vivid-core.h
index cd4c823..cbdadd8 100644
--- a/drivers/media/platform/vivid/vivid-core.h
+++ b/drivers/media/platform/vivid/vivid-core.h
@@ -384,6 +384,7 @@ struct vivid_dev {
/* thread for generating video capture stream */
struct task_struct *kthread_vid_cap;
unsigned long jiffies_vid_cap;
+ u64 cap_stream_start;
u32 cap_seq_offset;
u32 cap_seq_count;
bool cap_seq_resync;
diff --git a/drivers/media/platform/vivid/vivid-kthread-cap.c b/drivers/media/platform/vivid/vivid-kthread-cap.c
index f06003b..0793b15 100644
--- a/drivers/media/platform/vivid/vivid-kthread-cap.c
+++ b/drivers/media/platform/vivid/vivid-kthread-cap.c
@@ -416,6 +416,7 @@ static void vivid_fillbuff(struct vivid_dev *dev, struct vivid_buffer *buf)
char str[100];
s32 gain;
bool is_loop = false;
+ u64 soe_time = 0;
if (dev->loop_video && dev->can_loop_video &&
((vivid_is_svid_cap(dev) &&
@@ -426,11 +427,11 @@ static void vivid_fillbuff(struct vivid_dev *dev, struct vivid_buffer *buf)
buf->vb.sequence = dev->vid_cap_seq_count;
/*
- * Take the timestamp now if the timestamp source is set to
- * "Start of Exposure".
+ * Store the current time to calculate the delta if source is set to
+ * "End of Frame".
*/
- if (dev->tstamp_src_is_soe)
- buf->vb.vb2_buf.timestamp = ktime_get_ns();
+ if (!dev->tstamp_src_is_soe)
+ soe_time = ktime_get_ns();
if (dev->field_cap == V4L2_FIELD_ALTERNATE) {
/*
* 60 Hz standards start with the bottom field, 50 Hz standards
@@ -556,12 +557,18 @@ static void vivid_fillbuff(struct vivid_dev *dev, struct vivid_buffer *buf)
}
/*
- * If "End of Frame" is specified at the timestamp source, then take
- * the timestamp now.
+ * If "End of Frame", then calculate the "exposition time" and add
+ * it to the timestamp.
*/
if (!dev->tstamp_src_is_soe)
- buf->vb.vb2_buf.timestamp = ktime_get_ns();
- buf->vb.vb2_buf.timestamp += dev->time_wrap_offset;
+ soe_time = ktime_get_ns() - soe_time;
+ buf->vb.vb2_buf.timestamp = dev->timeperframe_vid_cap.numerator *
+ 1000000000 /
+ dev->timeperframe_vid_cap.denominator *
+ dev->vid_cap_seq_count +
+ dev->cap_stream_start +
+ soe_time +
+ dev->time_wrap_offset;
}
/*
@@ -759,6 +766,7 @@ static int vivid_thread_vid_cap(void *data)
dev->cap_seq_count = 0;
dev->cap_seq_resync = false;
dev->jiffies_vid_cap = jiffies;
+ dev->cap_stream_start = ktime_get_ns();
for (;;) {
try_to_freeze();
--
1.9.1
next reply other threads:[~2018-10-10 8:08 UTC|newest]
Thread overview: 3+ messages / expand[flat|nested] mbox.gz Atom feed top
2018-10-10 0:49 Gabriel Francisco Mandaji [this message]
2018-10-10 1:26 ` [PATCH] media: vivid: Improve timestamping Helen Koike
2018-10-10 12:22 ` Hans Verkuil
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20181010004921.GA6532@gfm-note \
--to=gfmandaji@gmail.com \
--cc=hverkuil@xs4all.nl \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-media@vger.kernel.org \
--cc=lkcamp@lists.libreplanetbr.org \
--cc=mchehab@kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.