All of lore.kernel.org
 help / color / mirror / Atom feed
From: Sakari Ailus <sakari.ailus@linux.intel.com>
To: Mikhail Rudenko <mike.rudenko@gmail.com>
Cc: Dave Stevenson <dave.stevenson@raspberrypi.com>,
	Mauro Carvalho Chehab <mchehab@kernel.org>,
	Rob Herring <robh+dt@kernel.org>,
	Krzysztof Kozlowski <krzysztof.kozlowski+dt@linaro.org>,
	Hans Verkuil <hverkuil-cisco@xs4all.nl>,
	Jacopo Mondi <jacopo@jmondi.org>, Shawn Tu <shawnx.tu@intel.com>,
	Jimmy Su <jimmy.su@intel.com>, Arnd Bergmann <arnd@arndb.de>,
	Arec Kao <arec.kao@intel.com>,
	Laurent Pinchart <laurent.pinchart@ideasonboard.com>,
	Marek Vasut <marex@denx.de>,
	linux-media@vger.kernel.org, devicetree@vger.kernel.org,
	linux-kernel@vger.kernel.org
Subject: Re: [PATCH v2 0/2] Add Omnivision OV4689 image sensor driver
Date: Mon, 19 Sep 2022 10:31:02 +0000	[thread overview]
Message-ID: <YyhE5voxRz7gEYHY@paasikivi.fi.intel.com> (raw)
In-Reply-To: <87wn9zreic.fsf@gmail.com>

Hi Mikhail,

On Mon, Sep 19, 2022 at 10:01:06AM +0300, Mikhail Rudenko wrote:
> 
> Hi Sakari,
> 
> On 2022-09-19 at 06:40 GMT, Sakari Ailus <sakari.ailus@linux.intel.com> wrote:
> 
> > Hi Mikhail,
> >
> > On Fri, Sep 16, 2022 at 12:27:42AM +0300, Mikhail Rudenko wrote:
> >>
> >> Hi Dave,
> >>
> >> On 2022-09-14 at 10:58 +01, Dave Stevenson <dave.stevenson@raspberrypi.com> wrote:
> >> > Hi Mikhail
> >> >
> >> > On Sun, 11 Sept 2022 at 21:02, Mikhail Rudenko <mike.rudenko@gmail.com> wrote:
> >> >>
> >> >> Hello,
> >> >>
> >> >> this series implements support for Omnivision OV4689 image
> >> >> sensor. The Omnivision OV4689 is a high performance, 1/3-inch, 4
> >> >> megapixel image sensor. Ihis chip supports high frame rate speeds up
> >> >> to 90 fps at 2688x1520 resolution. It is programmable through an I2C
> >> >> interface, and sensor output is sent via 1/2/4 lane MIPI CSI-2
> >> >> connection.
> >> >>
> >> >> The driver is based on Rockchip BSP kernel [1]. It implements 4-lane CSI-2
> >> >> and single 2688x1520 @ 30 fps mode. The driver was tested on Rockchip
> >> >> 3399-based FriendlyElec NanoPi M4 board with MCAM400 camera
> >> >> module.
> >> >> While porting the driver, I stumbled upon two issues:
> [snip]
> >> >> (2) The original driver exposes analog gain range 0x0 - 0x7ff, but the
> >> >> gain is not linear across that range. Instead, it is piecewise linear
> >> >> (and discontinuous). 0x0-0xff register values result in 0x-2x gain,
> >> >> 0x100-0x1ff to 0x-4x, 0x300-0x3ff to 0x-8x, and 0x700-0x7ff to 0x-16x,
> >> >> with more linear segments in between. Rockchip's camera engine code
> >> >> chooses one of the above segments depenging on the desired gain
> >> >> value. The question is, how should we proceed keeping in mind
> >> >> libcamera use case? Should the whole 0x0-0x7ff be exposed as-is and
> >> >> libcamera will do the mapping, or the driver will do the mapping
> >> >> itself and expose some logical gain units not tied to the actual gain
> >> >> register value? Meanwhile, this driver conservatively exposes only
> >> >> 0x0-0xf8 gain register range.
> >> >
> >> > The datasheet linked above says "for the gain formula, please contact
> >> > your local OmniVision FAE" :-(
> >> > I would assume that the range is from 1x rather than 0x - people
> >> > rarely want a totally black image that 0x would give. Or is it ranges
> >> > of 1x - 2x, 2x - 4x, 4x - 8x, and 8x - 16x?
> >>
> >> A picture is worth a thousand words, so I've attached the results of my
> >> experimentation with the gain register. They were obtained with Rockchip
> >> 3399, with AEC, AGC and black level subtraction disabled. The image was
> >> converted from 10-bit RGGB to 8-bit YUV 4:2:0 by the Rockchip ISP.
> >
> > Based on that it looks like their medication may have been a little too
> > strong.
> >
> > Could this be implemented so that the control value would be linear linear
> > but its range would correspond 1x--16x values?
> >
> > libcamera will be able to cope with that.
> >
> 
> According to the following fragment of the Rockchip camera engine sensor
> configuration file for ov4689 [1]
> 
>     <Linear index="1" type="double" size="[4 7]">
>        [1 2 128 0 1 128 255
>         2 4 64 -248 1 376 504
>         4 8 32 -756 1 884 1012
>         8 16 16 -1784 1 1912 2040]
>     </Linear>,
> 
> it uses gain register value range 128-255 for gain 1x-2x, 376-504 for
> gain 2x-4x, 884-1024 for 4x-8x, and 1912-2040 for 8x-16x. Do you suggest
> to implement this calculation in the sensor driver and expose some
> linear "logical" gain to userspace (ranging, e.g., 128-2048 for gains
> 1x-16x)?

Yes. This way the user space can somehow work without knowing this special
implementation, even though the granularity changes over the range. I guess
the granularity would need to be known in libcamera but that's a separate
issue.

-- 
Sakari Ailus

  reply	other threads:[~2022-09-19 10:48 UTC|newest]

Thread overview: 41+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-09-11 20:01 [PATCH v2 0/2] Add Omnivision OV4689 image sensor driver Mikhail Rudenko
2022-09-11 20:01 ` [PATCH v2 1/2] media: dt-bindings: media: i2c: document OV4689 DT bindings Mikhail Rudenko
2022-09-12 10:55   ` Krzysztof Kozlowski
2022-09-15 12:16     ` Mikhail Rudenko
2022-09-16  9:42       ` Krzysztof Kozlowski
2022-09-13 14:05   ` Tommaso Merciai
2022-09-15 20:11     ` Mikhail Rudenko
2022-09-16 13:15       ` Tommaso Merciai
2022-09-16 13:42         ` Mikhail Rudenko
2022-09-19 13:16           ` Laurent Pinchart
2022-09-11 20:01 ` [PATCH v2 2/2] media: i2c: add support for ov4689 Mikhail Rudenko
2022-09-11 22:52   ` kernel test robot
2022-09-12 10:56   ` Krzysztof Kozlowski
2022-09-15 20:40     ` Mikhail Rudenko
2022-09-16  9:43       ` Krzysztof Kozlowski
2022-09-16 21:51         ` Sakari Ailus
2022-09-14 15:51   ` Tommaso Merciai
2022-09-15 20:50     ` Mikhail Rudenko
2022-09-16 13:34       ` Tommaso Merciai
2022-09-16 13:44         ` Mikhail Rudenko
2022-09-19  7:08           ` Tommaso Merciai
2022-09-19  6:33         ` Sakari Ailus
2022-09-19  7:11           ` Tommaso Merciai
2022-09-22  9:53   ` Sakari Ailus
2022-09-22 15:23     ` Mikhail Rudenko
2022-09-22 20:39       ` Sakari Ailus
2022-09-22 10:54   ` Dave Stevenson
2022-09-22 14:56     ` Mikhail Rudenko
2022-09-14  9:58 ` [PATCH v2 0/2] Add Omnivision OV4689 image sensor driver Dave Stevenson
2022-09-15 21:27   ` Mikhail Rudenko
2022-09-19  6:40     ` Sakari Ailus
2022-09-19  7:01       ` Mikhail Rudenko
2022-09-19 10:31         ` Sakari Ailus [this message]
2022-09-19 13:49           ` Laurent Pinchart
2022-09-20 15:55             ` Mikhail Rudenko
2022-09-20 20:31             ` Mikhail Rudenko
2022-09-21 13:16               ` Sakari Ailus
2022-09-22  9:53 ` Sakari Ailus
2022-09-22 10:43   ` Dave Stevenson
2022-09-22 15:13     ` Mikhail Rudenko
2022-09-26 10:47     ` Mikhail Rudenko

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=YyhE5voxRz7gEYHY@paasikivi.fi.intel.com \
    --to=sakari.ailus@linux.intel.com \
    --cc=arec.kao@intel.com \
    --cc=arnd@arndb.de \
    --cc=dave.stevenson@raspberrypi.com \
    --cc=devicetree@vger.kernel.org \
    --cc=hverkuil-cisco@xs4all.nl \
    --cc=jacopo@jmondi.org \
    --cc=jimmy.su@intel.com \
    --cc=krzysztof.kozlowski+dt@linaro.org \
    --cc=laurent.pinchart@ideasonboard.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-media@vger.kernel.org \
    --cc=marex@denx.de \
    --cc=mchehab@kernel.org \
    --cc=mike.rudenko@gmail.com \
    --cc=robh+dt@kernel.org \
    --cc=shawnx.tu@intel.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 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.