diff --git a/src/android/jpeg/post_processor_jpeg.cpp b/src/android/jpeg/post_processor_jpeg.cpp
index 68d74842..1bf507a4 100644
--- a/src/android/jpeg/post_processor_jpeg.cpp
+++ b/src/android/jpeg/post_processor_jpeg.cpp
@@ -66,13 +66,23 @@ void PostProcessorJpeg::generateThumbnail(const FrameBuffer &source,
 	int ret = thumbnailEncoder_.configure(thCfg);
 
 	if (!rawThumbnail.empty() && !ret) {
+		thumbnail->resize(rawThumbnail.size());
+
 		/*
-		 * \todo Avoid value-initialization of all elements of the
-		 * vector.
+		 * 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.
 		 */
-		thumbnail->resize(rawThumbnail.size());
+		std::vector<Span<uint8_t>> thumbnailPlanes;
+		unsigned int thumbnailSize = targetSize.height * targetSize.width;
+		thumbnailPlanes.push_back({ rawThumbnail.data(), thumbnailSize });
+		thumbnailPlanes.push_back({ rawThumbnail.data() + thumbnailSize,
+					    thumbnailSize / 2 });
 
-		int jpeg_size = thumbnailEncoder_.encode({ rawThumbnail },
+		int jpeg_size = thumbnailEncoder_.encode(thumbnailPlanes,
 							 *thumbnail, {}, quality);
 		thumbnail->resize(jpeg_size);
 
