From 37682135da2fd90e7bc6a89a418862d1f4ca15fd Mon Sep 17 00:00:00 2001 From: Zhijun He Date: Tue, 10 Sep 2013 17:50:34 -0700 Subject: 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 --- media/jni/android_media_ImageReader.cpp | 21 ++++++++++++++------- 1 file changed, 14 insertions(+), 7 deletions(-) diff --git a/media/jni/android_media_ImageReader.cpp b/media/jni/android_media_ImageReader.cpp index 92edb8ab774c..94f20bcb3171 100644 --- a/media/jni/android_media_ImageReader.cpp +++ b/media/jni/android_media_ImageReader.cpp @@ -738,7 +738,7 @@ static jboolean ImageReader_imageSetup(JNIEnv* env, jobject thiz, 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 @@ static jboolean ImageReader_imageSetup(JNIEnv* env, jobject thiz, 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) { -- cgit v1.2.3-59-g8ed1b