ImageReader: Skip size check for BLOB format
HAL_PIXEL_FORMAT_BLOB is for JPEG capture, the buffer width/height by definition
shouldn't be the same as the image width/height.
Bug: 10360518
Change-Id: I32146a0e8e15439bb8fe199403db4ff37d1ab1af
diff --git a/media/jni/android_media_ImageReader.cpp b/media/jni/android_media_ImageReader.cpp
index 92edb8a..94f20bc 100644
--- a/media/jni/android_media_ImageReader.cpp
+++ b/media/jni/android_media_ImageReader.cpp
@@ -738,7 +738,7 @@
int outputWidth = buffer->width;
int outputHeight = buffer->height;
- // Correct with/height when crop is set.
+ // Correct width/height when crop is set.
if (buffer->crop.getWidth() > 0) {
outputWidth = buffer->crop.getWidth() + 1;
}
@@ -748,12 +748,19 @@
int imageReaderWidth = ctx->getBufferWidth();
int imageReaderHeight = ctx->getBufferHeight();
- if (imageReaderWidth != outputWidth
- || imageReaderHeight != outputHeight) {
- // Spew warning for now, since MediaCodec decoder has a bug to setup the right crop
- // TODO: make it throw exception once the decoder bug is fixed.
- ALOGW("Producer buffer size: %dx%d, doesn't match ImageReader configured size: %dx%d",
- outputWidth, outputHeight, imageReaderWidth, imageReaderHeight);
+ if ((buffer->format != HAL_PIXEL_FORMAT_BLOB) &&
+ (imageReaderWidth != outputWidth || imageReaderHeight > outputHeight)) {
+ /**
+ * For video decoder, the buffer height is actually the vertical stride,
+ * which is always >= actual image height. For future, decoder need provide
+ * right crop rectangle to CpuConsumer to indicate the actual image height,
+ * see bug 9563986. After this bug is fixed, we can enforce the height equal
+ * check. Right now, only make sure buffer height is no less than ImageReader
+ * height.
+ */
+ jniThrowExceptionFmt(env, "java/lang/IllegalStateException",
+ "Producer buffer size: %dx%d, doesn't match ImageReader configured size: %dx%d",
+ outputWidth, outputHeight, imageReaderWidth, imageReaderHeight);
}
if (ctx->getBufferFormat() != buffer->format) {