mirror of
https://git.libcamera.org/libcamera/libcamera.git
synced 2025-07-17 17:35:06 +03:00
android: jpeg: Split and pass the thumbnail planes to encoder
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, we are passing a contiguous buffer which is treated as only one plane (instead of two, as thumbnail is NV12). Hence, split the thumbnail data into respective planes according to NV12. This fixes a crash in encoding of thumbnails. Fixes: 894ca69f6043("android: jpeg: Support multi-planar buffers") Signed-off-by: Umang Jain <umang.jain@ideasonboard.com> Reviewed-by: Hirokazu Honda <hiroh@chromium.org> Reviewed-by: Jacopo Mondi <jacopo@jmondi.org>
This commit is contained in:
parent
3d297f7ac8
commit
e355ca0087
1 changed files with 16 additions and 1 deletions
|
@ -72,7 +72,22 @@ void PostProcessorJpeg::generateThumbnail(const FrameBuffer &source,
|
||||||
*/
|
*/
|
||||||
thumbnail->resize(rawThumbnail.size());
|
thumbnail->resize(rawThumbnail.size());
|
||||||
|
|
||||||
int jpeg_size = thumbnailEncoder_.encode({ rawThumbnail },
|
/*
|
||||||
|
* Split planes manually as the encoder expects a vector of
|
||||||
|
* planes.
|
||||||
|
*
|
||||||
|
* \todo Pass a vector of planes directly to
|
||||||
|
* Thumbnailer::createThumbnailer above and remove the manual
|
||||||
|
* planes split from here.
|
||||||
|
*/
|
||||||
|
std::vector<Span<uint8_t>> thumbnailPlanes;
|
||||||
|
const PixelFormatInfo &formatNV12 = PixelFormatInfo::info(formats::NV12);
|
||||||
|
size_t YPlaneSize = formatNV12.planeSize(targetSize, 0);
|
||||||
|
size_t UVPlaneSize = formatNV12.planeSize(targetSize, 1);
|
||||||
|
thumbnailPlanes.push_back({ rawThumbnail.data(), YPlaneSize });
|
||||||
|
thumbnailPlanes.push_back({ rawThumbnail.data() + YPlaneSize, UVPlaneSize });
|
||||||
|
|
||||||
|
int jpeg_size = thumbnailEncoder_.encode(thumbnailPlanes,
|
||||||
*thumbnail, {}, quality);
|
*thumbnail, {}, quality);
|
||||||
thumbnail->resize(jpeg_size);
|
thumbnail->resize(jpeg_size);
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue