linux-media.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Tomi Valkeinen <tomi.valkeinen@ideasonboard.com>
To: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Cc: Pratyush Yadav <p.yadav@ti.com>,
	Lokesh Vutla <lokeshvutla@ti.com>,
	linux-media@vger.kernel.org
Subject: Re: [PATCH v3 32/38] media: ti-vpe: cal: use CSI-2 frame number
Date: Tue, 8 Jun 2021 10:38:04 +0300	[thread overview]
Message-ID: <d72d4f1e-19e1-8e9f-19da-469e88638653@ideasonboard.com> (raw)
In-Reply-To: <YL5OpCAmfrMUibXq@pendragon.ideasonboard.com>

On 07/06/2021 19:51, Laurent Pinchart wrote:
> Hi Tomi,
> 
> On Mon, Jun 07, 2021 at 05:55:05PM +0300, Tomi Valkeinen wrote:
>> On 07/06/2021 16:42, Laurent Pinchart wrote:
>>> On Mon, Jun 07, 2021 at 03:39:45PM +0300, Tomi Valkeinen wrote:
>>>> On 04/06/2021 17:04, Laurent Pinchart wrote:
>>>>> On Mon, May 24, 2021 at 02:09:03PM +0300, Tomi Valkeinen wrote:
>>>>>> 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/
>>>>>
>>>>>> 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.
>>>
>>> Why do you think they could get out of sync (assuming the sensor
>>> supports frame numbers of course, if it always returns 0, that's not
>>> usable for the purpose of synchronization).
>>
>> If there's a requirement that the sequence starts from 0, it doesn't
>> work, as the pixel and metadata video capture may be started at
>> different times. When pixel capture starts, the frame number could be 10
>> and pixel sequence would be 0, but when metadata capture starts, the
>> frame number could be 12, and pixel seq would thus be 2 and meta seq 0.
>>
>> But even if we allow the seq to start from the current frame number,
> 
> Good point. I think we can allow starting at a non-zero value to handle
> this.
> 
>> this doesn't work if the frame number has wrapped between starting the
>> pixel capture and starting the meta capture.
> 
> The timestamp should be enough to handle this, the timestamp difference
> between two wraparounds should be large enough to sync the two streams
> without any risk.

Well, this still won't work, as CAL doesn't know when the sensor's frame 
counter wraps. CAL can detect that the counter has wrapped, but it 
doesn't know if some frames were missed. This leads to the two streams 
getting out of sync.

I'll try to figure out if I can somehow handle the frame counter in a 
shared manner, so that multiple streams that originate from the same 
frame would always use the same sequence numbers for same frame numbers.

  Tomi

  reply	other threads:[~2021-06-08  7:38 UTC|newest]

Thread overview: 80+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-05-24 11:08 [PATCH v3 00/38] media: ti-vpe: cal: multistream & embedded data support Tomi Valkeinen
2021-05-24 11:08 ` [PATCH v3 01/38] media: ti-vpe: cal: add g/s_parm for legacy API Tomi Valkeinen
2021-05-24 11:08 ` [PATCH v3 02/38] media: ti-vpe: cal: fix error handling in cal_camerarx_create Tomi Valkeinen
2021-06-04 12:12   ` Laurent Pinchart
2021-05-24 11:08 ` [PATCH v3 03/38] media: ti-vpe: cal: remove unused cal_camerarx->dev field Tomi Valkeinen
2021-05-24 11:08 ` [PATCH v3 04/38] media: ti-vpe: cal: rename "sensor" to "source" Tomi Valkeinen
2021-05-24 11:08 ` [PATCH v3 05/38] media: ti-vpe: cal: move global config from cal_ctx_wr_dma_config to runtime resume Tomi Valkeinen
2021-05-24 11:08 ` [PATCH v3 06/38] media: ti-vpe: cal: use v4l2_get_link_freq Tomi Valkeinen
2021-05-24 11:08 ` [PATCH v3 07/38] media: ti-vpe: cal: add cal_ctx_prepare/unprepare Tomi Valkeinen
2021-05-24 11:08 ` [PATCH v3 08/38] media: ti-vpe: cal: change index and cport to u8 Tomi Valkeinen
2021-05-24 11:08 ` [PATCH v3 09/38] media: ti-vpe: cal: Add CSI2 context Tomi Valkeinen
2021-06-04 13:40   ` Laurent Pinchart
2021-05-24 11:08 ` [PATCH v3 10/38] media: ti-vpe: cal: Add pixel processing context Tomi Valkeinen
2021-05-24 11:08 ` [PATCH v3 11/38] media: ti-vpe: cal: rename cal_ctx->index to dma_ctx Tomi Valkeinen
2021-05-24 11:08 ` [PATCH v3 12/38] media: ti-vpe: cal: rename CAL_HL_IRQ_MASK Tomi Valkeinen
2021-05-24 11:08 ` [PATCH v3 13/38] media: ti-vpe: cal: clean up CAL_CSI2_VC_IRQ_* macros Tomi Valkeinen
2021-05-24 11:08 ` [PATCH v3 14/38] media: ti-vpe: cal: catch VC errors Tomi Valkeinen
2021-05-24 11:08 ` [PATCH v3 15/38] media: ti-vpe: cal: remove wait when stopping camerarx Tomi Valkeinen
2021-06-04 13:43   ` Laurent Pinchart
2021-05-24 11:08 ` [PATCH v3 16/38] media: ti-vpe: cal: disable csi2 ctx and pix proc at ctx_stop Tomi Valkeinen
2021-05-24 11:08 ` [PATCH v3 17/38] media: ti-vpe: cal: allocate pix proc dynamically Tomi Valkeinen
2021-05-24 11:08 ` [PATCH v3 18/38] media: ti-vpe: cal: add 'use_pix_proc' field Tomi Valkeinen
2021-05-24 11:08 ` [PATCH v3 19/38] media: ti-vpe: cal: add cal_ctx_wr_dma_enable and fix a race Tomi Valkeinen
2021-05-24 11:08 ` [PATCH v3 20/38] media: ti-vpe: cal: add vc and datatype fields to cal_ctx Tomi Valkeinen
2021-05-24 11:08 ` [PATCH v3 21/38] media: ti-vpe: cal: handle cal_ctx_v4l2_register error Tomi Valkeinen
2021-06-04 13:47   ` Laurent Pinchart
2021-06-07  7:44     ` Tomi Valkeinen
2021-06-07  8:00       ` Laurent Pinchart
2021-06-07  8:53         ` Tomi Valkeinen
2021-06-09 12:36           ` Laurent Pinchart
2021-06-09 14:07             ` Tomi Valkeinen
2021-05-24 11:08 ` [PATCH v3 22/38] media: ti-vpe: cal: set field always to V4L2_FIELD_NONE Tomi Valkeinen
2021-06-04 13:48   ` Laurent Pinchart
2021-05-24 11:08 ` [PATCH v3 23/38] media: ti-vpe: cal: fix typo in a comment Tomi Valkeinen
2021-05-24 11:08 ` [PATCH v3 24/38] media: ti-vpe: cal: add mbus_code support to cal_mc_enum_fmt_vid_cap Tomi Valkeinen
2021-05-24 11:08 ` [PATCH v3 25/38] media: ti-vpe: cal: rename non-MC funcs to cal_legacy_* Tomi Valkeinen
2021-05-24 11:08 ` [PATCH v3 26/38] media: ti-vpe: cal: init ctx->v_fmt correctly in MC mode Tomi Valkeinen
2021-06-04 13:51   ` Laurent Pinchart
2021-05-24 11:08 ` [PATCH v3 27/38] media: ti-vpe: cal: remove cal_camerarx->fmtinfo Tomi Valkeinen
2021-05-24 11:08 ` [PATCH v3 28/38] media: ti-vpe: cal: support 8 DMA contexts Tomi Valkeinen
2021-05-24 11:09 ` [PATCH v3 29/38] media: ti-vpe: cal: cleanup phy iteration in cal_remove Tomi Valkeinen
2021-06-04 13:52   ` Laurent Pinchart
2021-05-24 11:09 ` [PATCH v3 30/38] media: ti-vpe: cal: fix ctx uninitialization Tomi Valkeinen
2021-06-04 13:55   ` Laurent Pinchart
2021-05-24 11:09 ` [PATCH v3 31/38] media: ti-vpe: cal: fix queuing of the initial buffer Tomi Valkeinen
2021-06-04 13:57   ` Laurent Pinchart
2021-05-24 11:09 ` [PATCH v3 32/38] media: ti-vpe: cal: use CSI-2 frame number Tomi Valkeinen
2021-06-04 14:04   ` Laurent Pinchart
2021-06-07 12:39     ` Tomi Valkeinen
2021-06-07 13:42       ` Laurent Pinchart
2021-06-07 14:55         ` Tomi Valkeinen
2021-06-07 16:51           ` Laurent Pinchart
2021-06-08  7:38             ` Tomi Valkeinen [this message]
2021-06-08 12:46               ` Tomi Valkeinen
2021-06-09 12:47                 ` Laurent Pinchart
2021-06-09 14:02                   ` Tomi Valkeinen
2021-05-24 11:09 ` [PATCH v3 33/38] media: ti-vpe: cal: add camerarx locking Tomi Valkeinen
2021-06-04 14:14   ` Laurent Pinchart
2021-06-07 11:55     ` Tomi Valkeinen
2021-06-07 12:21       ` Laurent Pinchart
2021-05-24 11:09 ` [PATCH v3 34/38] media: ti-vpe: cal: add camerarx enable/disable refcounting Tomi Valkeinen
2021-06-04 14:16   ` Laurent Pinchart
2021-05-24 11:09 ` [PATCH v3 35/38] media: ti-vpe: cal: allow more than 1 source pads Tomi Valkeinen
2021-06-04 14:18   ` Laurent Pinchart
2021-05-24 11:09 ` [PATCH v3 36/38] media: ti-vpe: cal: add embedded data support Tomi Valkeinen
2021-05-24 11:09 ` [PATCH v3 37/38] media: ti-vpe: cal: use frame desc to get vc and dt Tomi Valkeinen
2021-06-04 14:25   ` Laurent Pinchart
2021-06-07 12:07     ` Tomi Valkeinen
2021-06-07 12:23       ` Laurent Pinchart
2021-05-24 11:09 ` [PATCH v3 38/38] media: ti-vpe: cal: add multiplexed streams support Tomi Valkeinen
2021-05-27 16:06   ` Pratyush Yadav
2021-05-27 16:10     ` Tomi Valkeinen
2021-05-27 16:30       ` Laurent Pinchart
2021-05-27 16:33         ` Tomi Valkeinen
2021-06-04 11:57           ` Laurent Pinchart
2021-06-06 16:14   ` Laurent Pinchart
2021-06-29  9:12     ` Tomi Valkeinen
2021-08-03 10:21   ` Pratyush Yadav
2021-08-03 14:51     ` Tomi Valkeinen
2021-08-03 16:27       ` Pratyush Yadav

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=d72d4f1e-19e1-8e9f-19da-469e88638653@ideasonboard.com \
    --to=tomi.valkeinen@ideasonboard.com \
    --cc=laurent.pinchart@ideasonboard.com \
    --cc=linux-media@vger.kernel.org \
    --cc=lokeshvutla@ti.com \
    --cc=p.yadav@ti.com \
    /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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).