[libcamera-devel] [PATCH] android: jpeg: Pass the thumbnail planes correctly to encoder
Umang Jain
umang.jain at ideasonboard.com
Wed Sep 8 09:54:08 CEST 2021
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
>
> +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