diff options
author | Samuel Mira <samuel.mira@qt.io> | 2022-04-04 18:30:59 +0300 |
---|---|---|
committer | Qt Cherry-pick Bot <cherrypick_bot@qt-project.org> | 2022-04-19 08:20:09 +0000 |
commit | 19fe57408b53d871dc1e306f50b452fdcc8b4737 (patch) | |
tree | bde4581bca4acac3cd7d485e102443d9418f04a3 | |
parent | 934c9b6dee03b8b71bd71f06d03185c56f94bd76 (diff) |
Fix usage of unsupported Exif constructor on Android 66.2
QtCameraListener used ExifInterface(InputStream stream) constructor
that was added in API 24 while the mininum support is Android 6 API 23.
The fix consists in using ExifInterface(String filename) constructor
present since API 5. To use that constructor, it is necessary to save
the data to a temporary file for ExifInterface to use.
Fixes: QTBUG-99228
Change-Id: Ib39e8da696c64c20e4afcd3f71dd0e7abdea5ee6
Reviewed-by: Lars Knoll <lars.knoll@qt.io>
(cherry picked from commit 6ccb976f4f9693ad7c6881a186fd6af0f05ff023)
Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org>
-rw-r--r-- | src/android/jar/src/org/qtproject/qt/android/multimedia/QtCameraListener.java | 16 | ||||
-rw-r--r-- | src/android/jar/src/org/qtproject/qt/android/multimedia/QtMultimediaUtils.java | 2 |
2 files changed, 14 insertions, 4 deletions
diff --git a/src/android/jar/src/org/qtproject/qt/android/multimedia/QtCameraListener.java b/src/android/jar/src/org/qtproject/qt/android/multimedia/QtCameraListener.java index a37544916..7f5361e77 100644 --- a/src/android/jar/src/org/qtproject/qt/android/multimedia/QtCameraListener.java +++ b/src/android/jar/src/org/qtproject/qt/android/multimedia/QtCameraListener.java @@ -45,11 +45,11 @@ import android.hardware.Camera.CameraInfo; import android.graphics.ImageFormat; import android.graphics.SurfaceTexture; import android.util.Log; +import java.io.File; +import java.io.FileOutputStream; import java.lang.Math; import android.media.ExifInterface; -import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; -import java.io.InputStream; import java.lang.String; import android.graphics.Bitmap; import android.graphics.BitmapFactory; @@ -208,11 +208,16 @@ public class QtCameraListener implements Camera.ShutterCallback, @Override public void onPictureTaken(byte[] data, Camera camera) { + File outputFile = null; try { - InputStream stream = new ByteArrayInputStream(data); + outputFile = File.createTempFile("pic_", ".jpg", QtMultimediaUtils.getCacheDirectory()); + FileOutputStream out = new FileOutputStream(outputFile); - ExifInterface exif = new ExifInterface(stream); + // we just want to read the exif... + BitmapFactory.decodeByteArray(data, 0, data.length) + .compress(Bitmap.CompressFormat.JPEG, 10, out); + ExifInterface exif = new ExifInterface(outputFile.getAbsolutePath()); int orientation = exif.getAttributeInt(ExifInterface.TAG_ORIENTATION, ExifInterface.ORIENTATION_UNDEFINED); @@ -260,6 +265,9 @@ public class QtCameraListener implements Camera.ShutterCallback, } catch (Exception e) { Log.w(TAG, "Error fixing bitmap orientation."); e.printStackTrace(); + } finally { + if (outputFile != null && outputFile.exists()) + outputFile.delete(); } notifyPictureCaptured(m_cameraId, data); diff --git a/src/android/jar/src/org/qtproject/qt/android/multimedia/QtMultimediaUtils.java b/src/android/jar/src/org/qtproject/qt/android/multimedia/QtMultimediaUtils.java index 68f63067e..d5f205fe6 100644 --- a/src/android/jar/src/org/qtproject/qt/android/multimedia/QtMultimediaUtils.java +++ b/src/android/jar/src/org/qtproject/qt/android/multimedia/QtMultimediaUtils.java @@ -138,6 +138,8 @@ public class QtMultimediaUtils MediaScannerConnection.scanFile(m_context, new String[] { file }, null, null); } + static File getCacheDirectory() { return m_context.getCacheDir(); } + /* The array of codecs is in the form: c2.qti.vp9.decoder |