diff options
| author | 2013-09-10 17:50:34 -0700 | |
|---|---|---|
| committer | 2013-09-11 13:18:00 -0700 | |
| commit | 37682135da2fd90e7bc6a89a418862d1f4ca15fd (patch) | |
| tree | 6026a61a1a0fa753cde2388349093871331eaed5 | |
| parent | cfd47481d1b375663d4e8e8d0c292d9001aa384b (diff) | |
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
| -rw-r--r-- | media/jni/android_media_ImageReader.cpp | 21 |
1 files 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) { |