[libcamera-devel] [PATCH] android: jpeg: Pass the thumbnail planes correctly to encoder
Hirokazu Honda
hiroh at chromium.org
Wed Sep 8 10:04:02 CEST 2021
Hi Umang,
On Wed, Sep 8, 2021 at 4:54 PM Umang Jain <umang.jain at ideasonboard.com> wrote:
>
> Hi Hiro,
>
> On 9/8/21 1:20 PM, Hirokazu Honda wrote:
> > Hi Umang, thank you for the patch.
> >
> > On Wed, Sep 8, 2021 at 3:23 PM Umang Jain <umang.jain at ideasonboard.com> wrote:
> >> After multi-planar support was introduced for jpeg encoding as well,
> >> EncoderLibJpeg::encode() expects a vector of planes as the source of
> >> framebuffer to be encoded. Currently, this is broken for thumbnail
> >> encoding as the thumbnail generated is directly passed as a single
> >> plane.
> >>
> >> Hence, piece the thumbnail data as planes if the parent Framebuffer is
> >> multi-planar. This fixes the encoding of the corresponding thumbnail.
> >>
> >> Fixes: 894ca69f6043("android: jpeg: Support multi-planar buffers")
> >> Signed-off-by: Umang Jain <umang.jain at ideasonboard.com>
> >> ---
> >> src/android/jpeg/post_processor_jpeg.cpp | 17 +++++++++++------
> >> 1 file changed, 11 insertions(+), 6 deletions(-)
> >>
> >> diff --git a/src/android/jpeg/post_processor_jpeg.cpp b/src/android/jpeg/post_processor_jpeg.cpp
> >> index 68d74842..d896581f 100644
> >> --- a/src/android/jpeg/post_processor_jpeg.cpp
> >> +++ b/src/android/jpeg/post_processor_jpeg.cpp
> >> @@ -66,13 +66,18 @@ void PostProcessorJpeg::generateThumbnail(const FrameBuffer &source,
> >> int ret = thumbnailEncoder_.configure(thCfg);
> >>
> >> if (!rawThumbnail.empty() && !ret) {
> >> - /*
> >> - * \todo Avoid value-initialization of all elements of the
> >> - * vector.
> >> - */
> >> - thumbnail->resize(rawThumbnail.size());
> >> + std::vector<Span<uint8_t>> thumbnailPlanes;
> >> + for (int i = 0; i < source.planes().size(); i++) {
> >> + unsigned int thumbnailSize =
> >> + targetSize.height * targetSize.width;
> >> + Span<uint8_t> plane{
> >> + rawThumbnail.data() + (i * thumbnailSize),
> >> + thumbnailSize
> > This is not correct. Since rawThumbanil is NV12, the second plane size
> > is a half of the first plane size.
>
>
> Oh oops, yes you are right. Forgot to take into consideration :(
>
> Will need to think more a bit hmm!
>
> >> + };
> >> + thumbnailPlanes.push_back(plane);
> >> + }
> > Uhm, I would avoid introducing the dependency how rawThumbnail is
> > created in thumbnailer_.
> > Since this will be resolved by my patch series [1] later, I am fine
> > with this as a temporary solution.
> > By the way, this is related to Launrent's change, should this be a
> > part of the series?
>
>
> The series is merged as far as I can see. And thumbnailing is broken on
> master. So, we need to fix it
>
Oh I didn't realize it. :-)
Let's go ahead then.
-Hiro
> >
> > +Laurent Pinchart for visibility.
> >
> > [1] https://patchwork.libcamera.org/project/libcamera/list/?series=2423
> >
> > -Hiro
> >> - int jpeg_size = thumbnailEncoder_.encode({ rawThumbnail },
> >> + int jpeg_size = thumbnailEncoder_.encode(thumbnailPlanes,
> >> *thumbnail, {}, quality);
> >> thumbnail->resize(jpeg_size);
> >>
> >> --
> >> 2.31.1
> >>
More information about the libcamera-devel
mailing list