[libcamera-devel] [RFC PATCH 0/2] libcamera: converter: introduce software converter for debayering and AWB
Mattijs Korpershoek
mkorpershoek at baylibre.com
Wed Aug 30 17:01:59 CEST 2023
Hi Jacopo,
On mer., août 30, 2023 at 16:38, Jacopo Mondi <jacopo.mondi at ideasonboard.com> wrote:
> Hi Mattijs,
>
> On Wed, Aug 30, 2023 at 01:30:23PM +0200, Mattijs Korpershoek via libcamera-devel wrote:
>> Hi Andrey,
>>
>> Thank you for this work.
>>
>> I'm very interested by this series, mostly because I would like to add
>> YUYV -> NV12 pixel format conversion in this same class (to simplify
>> some Android use cases I'm working on).
>
> Have you considered using libYUV for such task ? It also feels this
> can be contained in the Android HAL layer where we already use libYUV ?
Yes, using libYUV is what I plan to do for this.
I will look into doing this only in the Android HAL layer but it feels
easier to plumb this conversion as a Converter class.
>
> Thanks
> j
>
>>
>> I'm not familiar enough with the libcamera codebase to judge how well
>> this is implemented but I'm looking forward to see comments on this patchset.
>>
>> On dim., août 06, 2023 at 21:01, Andrey Konovalov via libcamera-devel <libcamera-devel at lists.libcamera.org> wrote:
>>
>> > Here is a draft implementation of Bayer demosaicing which follows the
>> > Converter interface and runs on CPU.
>> >
>> > It also includes a naive version of Grey World AWB. Just for demo purposes
>> > (to make the final image looking a bit nicer). Otherwise, Converter isn't
>> > the right place for AWB - only the statistics should be gathered here,
>> > and the rest belongs to an IPA module.
>> >
>> > Currently this software converter supports single output only, but adding
>> > the second stream for statistics is under consideration.
>> >
>> > As libcamera::Converter currently assumes a media device underneath the
>> > convertor, I wasn't able to avoid hacking the simple pipeline handler to make
>> > it work with the software converter. For the same reason ConverterFactory
>> > is not used for now.
>> >
>> > Only RAW10P format from the sensor is currently supported, but adding more
>> > Bayer formats wouldn't be a problem. Out of 10 bits, only 8 most significant
>> > ones are used to lessen the load on CPU. Simple bilinear interpolation is
>> > used for the same reason.
>> >
>> > AWB simplifications:
>> > - a naive implementation of "Grey World" algorithm: all pixels are used (no
>> > brightest and darkest pixels excluded from the calculations)
>> > - to lessen the load on CPU, works on raw Bayer data and takes red values from
>> > red pixels, blue values from blue, and green values from green pixels only.
>> > - to lessen the load on CPU, the red/green/blue gains calculated from the
>> > current frame data are applied to the next frame. These gains are purely
>> > in software (no V4L2 controls are set).
>> >
>> > No performance analysis or tuning have been done yet. On RB5 board this
>> > software convertor gives:
>> > ~ 5 fps at 3278x2462 (camera sensor runs at 15 fps)
>> > ~ 18..19 fps at 1918x1078 (out of 30 fps)
>> > ~ 18..19 fps at 1638x1230 (out of 30 fps)
>> > ~ 30 fps at 638x478 (out of 30 fps)
>> > (The resolutions above are the output ones; demosaic filter drops 1 pixel
>> > from each side of the frame, so that 3280x2464 from the camera sensor becomes
>> > 3278x2462 etc)
>>
>> Could you detail a bit how this was tested? Did you validate this using
>> "cam" ?
>>
>> Also, is there a reason for testing this with real hardware?
>>
>> Can't this be validated/developped upon the Virtual Media Controller
>> Driver (vimc) ?
>>
>> https://docs.kernel.org/admin-guide/media/vimc.html
>>
>> >
>> > Andrey Konovalov (2):
>> > libcamera: converter: add software converter
>> > [DNI] libcamera: pipeline: simple: a hack to use sotware converter
>> > with qcom-camss
>> >
>> > .../internal/converter/converter_softw.h | 90 ++++
>> > src/libcamera/converter/converter_softw.cpp | 430 ++++++++++++++++++
>> > src/libcamera/converter/meson.build | 3 +-
>> > src/libcamera/pipeline/simple/simple.cpp | 22 +-
>> > 4 files changed, 542 insertions(+), 3 deletions(-)
>> > create mode 100644 include/libcamera/internal/converter/converter_softw.h
>> > create mode 100644 src/libcamera/converter/converter_softw.cpp
>> >
>> > --
>> > 2.34.1
More information about the libcamera-devel
mailing list