summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSamuel Mira <samuel.mira@qt.io>2022-04-04 18:30:59 +0300
committerQt Cherry-pick Bot <cherrypick_bot@qt-project.org>2022-04-19 08:20:09 +0000
commit19fe57408b53d871dc1e306f50b452fdcc8b4737 (patch)
treebde4581bca4acac3cd7d485e102443d9418f04a3
parent934c9b6dee03b8b71bd71f06d03185c56f94bd76 (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.java16
-rw-r--r--src/android/jar/src/org/qtproject/qt/android/multimedia/QtMultimediaUtils.java2
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