summaryrefslogtreecommitdiff
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)
downloadqtmultimedia-6.2.tar.gz
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