Thread (80 messages) 80 messages, 3 authors, 2021-08-03

Re: [PATCH v3 32/38] media: ti-vpe: cal: use CSI-2 frame number

From: Tomi Valkeinen <tomi.valkeinen@ideasonboard.com>
Date: 2021-06-07 12:39:48

On 04/06/2021 17:04, Laurent Pinchart wrote:
Hi Tomi,

Thank you for the patch.

On Mon, May 24, 2021 at 02:09:03PM +0300, Tomi Valkeinen wrote:
quoted
The driver fills buf->vb.sequence with an increasing number which is
incremented by the driver. This feels a bit pointless, as the userspace
could as well track that kind of number itself. Instead, lets use the
s/lets/let's/
quoted
frame number provided in the CSI-2 data from the sensor.

Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ideasonboard.com>
---
  drivers/media/platform/ti-vpe/cal.c | 7 +++++--
  drivers/media/platform/ti-vpe/cal.h | 1 -
  2 files changed, 5 insertions(+), 3 deletions(-)
diff --git a/drivers/media/platform/ti-vpe/cal.c b/drivers/media/platform/ti-vpe/cal.c
index 888706187fd1..62c45add4efe 100644
--- a/drivers/media/platform/ti-vpe/cal.c
+++ b/drivers/media/platform/ti-vpe/cal.c
@@ -493,7 +493,6 @@ void cal_ctx_unprepare(struct cal_ctx *ctx)
  
  void cal_ctx_start(struct cal_ctx *ctx)
  {
-	ctx->sequence = 0;
  	ctx->dma.state = CAL_DMA_RUNNING;
  
  	/* Configure the CSI-2, pixel processing and write DMA contexts. */
@@ -586,6 +585,10 @@ static inline void cal_irq_wdma_start(struct cal_ctx *ctx)
  static inline void cal_irq_wdma_end(struct cal_ctx *ctx)
  {
  	struct cal_buffer *buf = NULL;
+	u32 frame_num;
+
+	frame_num = cal_read(ctx->cal, CAL_CSI2_STATUS(ctx->phy->instance,
+						       ctx->csi2_ctx)) & 0xffff;
  
  	spin_lock(&ctx->dma.lock);
  
@@ -607,7 +610,7 @@ static inline void cal_irq_wdma_end(struct cal_ctx *ctx)
  	if (buf) {
  		buf->vb.vb2_buf.timestamp = ktime_get_ns();
  		buf->vb.field = ctx->v_fmt.fmt.pix.field;
-		buf->vb.sequence = ctx->sequence++;
+		buf->vb.sequence = frame_num;
We'll need something a bit more complicated. The CSI-2 frame number is
not mandatory, and when used, it is a 16-bit number starting at 1 and
counting to an unspecified value larger than one, resetting to 1 at the
end of the cycle. The V4L2 sequence number, on the other hand, is a
monotonic counter starting at 0 and wrapping only at 2^32-1. We should
thus keep a software sequence counter and

- increase it by 1 if the frame number is zero
- increase it by frame_num - last_frame_num (with wrap-around of
   frame_num handled) otherwise
Ok... I wonder if we need a new field for this, though. The problem I 
was solving when I changed this to use the CSI-2 frame-number was how to 
associate a pixel frame and a metadata frame.

Their CSI-2 frame-numbers match (as they are from the same original 
CSI-2 frame), so the userspace can use that to figure the matching 
frames. While the above method you suggest should give us identical 
sequence numbers for pixel and metadata, I think it's going a bit away 
from my intended purpose, and possibly risks ending up with different 
sequences for pixel and metadata.

So do we need the sequence number, as it is currently, and something new 
for this buffer matching purpose?

  Tomi
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help