[libcamera-devel] [PATCH v10 0/8] Colour spaces
Laurent Pinchart
laurent.pinchart at ideasonboard.com
Thu Dec 9 23:11:29 CET 2021
Hi David,
On Thu, Dec 09, 2021 at 10:12:37AM +0000, David Plowman wrote:
> Hi everyone
>
> We're on to version 10 now!
8 more versions to come of age :-D
> Thanks for all the latest round of
> reviews, that's much appreciated. I've adopted pretty much all of
> those suggestions, but I'll try and round up the handful of discussion
> points into this cover note.
I should have read this before reviewing, looks like I've repeated
questions in 8/8 that you're answering below.
> 1. Should we have a "None" Y'CbCr encoding?
>
> I have added one as it bothered me to have "Rec601" in ColorSpace::Raw
> otherwise. I wonder slightly what you should do if a device returns
> V4L2_COLORSPACE_RAW and a non-default YCbCr encoding. What would that
> mean?
Probably that the driver author didn't know what to do.
> Should we turn it into ColorSpace::Raw regardless, or take it at
> face value and let a pipeline handler complain (if it cares)?
Maybe we could handle it when the situation arises.
> For now I've taken the second approach, I suspect that in reality no
> one is really going to care, but we could change that.
>
> 2. std::array in place of std::vector in color_space.cpp
>
> Unfortunately I still can't make the std::array constexpr, because the
> named ColorSpaces within them aren't. And they can't be because
> they're static class members which would have to be initialised within
> the class, only you can't initialise the objects of the class from
> within the declaration...
OK, no worries.
> But I have changed it to std::array anyway (just a const one), aren't
> they in theory marginally cheaper than std::vectors?
Marginally, yes, I think.
> 3. Error messages in v4l2_videodevice.cpp etc.
>
> Should these be in to/fromColorSpace instead? I've left them where
> they are because I can still imagine a pipeline handler calling these
> functions to check the results for themselves, at which point
> functions that spit out messages are just annoying.
I agree that we shouldn't have warning or error messages for situations
that can arise under normal circumstances.
> But I don't feel very strongly about this given that currently no one
> else is calling them, so would be happy enough to change it!
Maybe we could do so to avoid duplication of messages, and change it
later if needed ? The toColorSpace() and fromColorSpace() functions
should be made protected in that case, to make sure we noticed attempts
to use them directly from pipeline handlers.
> 4. Why should the largest output stream determine the color space?
>
> Because it's the biggest, therefore it's the most important. :)
>
> Though to be fair sometimes we use our low resolution output stream
> for image analysis that users never see, so the colour space there
> probably is less important. But in the end we have to pick one of
> them and it doesn't really matter that much which.
If you could capture the rationale in a sentence or two in the patch or
commit message, that would be nice.
> 5. Warnings in the RPi pipeline handler...
>
> I've removed one bunch of warnings on the assurance that validate()
> has been called... Some others I've left in because they really
> shouldn't happen and I am completely paranoid about colour spaces. If
> I could be less anxious about them that would be nice...
There's just one warning message left, that tells if colour spaces have
been adjusted. Isn't that allowed under normal circumstances ?
> 6. Where to call validateColorSpaces?
>
> I've left this where it is. The one thing we're never going to do is
> change raw pixel formats to non-raw ones, and vice versa. And mostly I
> think pixel formats have little to do with colour spaces. There are
> some exceptions (e.g. raw formats imply "raw" colour spaces), and YUV
> type outputs imply using the Y'CbCr encoding matrix which is sort of
> related, but apart from that I think they're mostly distinct.
> (Everyone will now list more exceptions...)
OK, sounds good to me.
> Anyway, thanks again for all the effort that has gone into the many
> reviews!
>
> David Plowman (8):
> libcamera: Add ColorSpace class
> libcamera: stream: Add ColorSpace fields to StreamConfiguration
> libcamera: video_device: Convert between ColorSpace class and V4L2
> formats
> libcamera: video_device: Support passing ColorSpaces to V4L2 video
> devices
> libcamera: v4l2_subdevice: Add colorSpace field to V4L2SubdeviceFormat
> libcamera: v4l2_subdevice: Support passing ColorSpaces to V4L2
> subdevices
> libcamera: Add validateColorSpaces to CameraConfiguration class
> libcamera: pipeline: raspberrypi: Support color spaces
>
> include/libcamera/camera.h | 10 +
> include/libcamera/color_space.h | 70 ++++
> include/libcamera/internal/v4l2_device.h | 8 +
> include/libcamera/internal/v4l2_subdevice.h | 3 +
> include/libcamera/internal/v4l2_videodevice.h | 3 +
> include/libcamera/meson.build | 1 +
> include/libcamera/stream.h | 3 +
> src/libcamera/camera.cpp | 84 +++++
> src/libcamera/camera_sensor.cpp | 1 +
> src/libcamera/color_space.cpp | 318 ++++++++++++++++++
> src/libcamera/meson.build | 1 +
> src/libcamera/pipeline/ipu3/cio2.cpp | 7 +-
> .../pipeline/raspberrypi/raspberrypi.cpp | 40 +++
> src/libcamera/pipeline/simple/simple.cpp | 8 +-
> src/libcamera/stream.cpp | 20 ++
> src/libcamera/v4l2_device.cpp | 194 +++++++++++
> src/libcamera/v4l2_subdevice.cpp | 25 +-
> src/libcamera/v4l2_videodevice.cpp | 32 ++
> 18 files changed, 821 insertions(+), 7 deletions(-)
> create mode 100644 include/libcamera/color_space.h
> create mode 100644 src/libcamera/color_space.cpp
--
Regards,
Laurent Pinchart
More information about the libcamera-devel
mailing list