diff --git a/src/android/camera_device.cpp b/src/android/camera_device.cpp
index ec8ca934842a..6a9a038a2b53 100644
--- a/src/android/camera_device.cpp
+++ b/src/android/camera_device.cpp
@@ -398,27 +398,43 @@ int CameraDevice::initializeStreamConfigurations()
 		 */
 		formatsMap_[androidFormat] = mappedFormat;

+		/*
+		 * Stop here for JPEG streams: the JPEG supported sizes will
+		 * be tested later using the here recorded non-blob stream sizes.
+		 */
+		if (androidFormat == HAL_PIXEL_FORMAT_BLOB)
+			continue;
+
 		for (const Size &res : cameraResolutions) {
 			cfg.pixelFormat = mappedFormat;
 			cfg.size = res;

-			CameraConfiguration::Status status = cameraConfig->validate();
-			/*
-			 * Unconditionally report we can produce JPEG.
-			 *
-			 * \todo The JPEG stream will be implemented as an
-			 * HAL-only stream, but some cameras can produce it
-			 * directly. As of now, claim support for JPEG without
-			 * inspecting where the JPEG stream is produced.
-			 */
-			if (androidFormat != HAL_PIXEL_FORMAT_BLOB &&
-			    status != CameraConfiguration::Valid)
+			if (cameraConfig->validate() != CameraConfiguration::Valid)
 				continue;

 			streamConfigurations_.push_back({ res, androidFormat });
 		}
 	}

+	/*
+	 * Insert the JPEG sizes by using the ones recorded for YUV streams
+	 * from which JPEG is produced.
+	 */
+	std::vector<Camera3StreamConfiguration> jpegConfigurations;
+	jpegConfigurations.reserve(cameraResolutions.size());
+
+	for (const auto &config : streamConfigurations_) {
+		/* \todo JPEG can be produced from other formats too! */
+		if (config.androidFormat != HAL_PIXEL_FORMAT_YCbCr_420_888)
+			continue;
+
+		jpegConfigurations.push_back({ config.resolution,
+					       HAL_PIXEL_FORMAT_BLOB });
+	}
+
+	for (auto const jpegConfig : jpegConfigurations)
+		streamConfigurations_.push_back(jpegConfig);
+
 	LOG(HAL, Debug) << "Collected stream configuration map: ";
 	for (const auto &entry : streamConfigurations_)
 		LOG(HAL, Debug) << "{ " << entry.resolution.toString() << " - "
