Bug#1107850: unblock: lomiri-camera-app/4.0.8+dfsg-5
Package: release.debian.org
Severity: normal
X-Debbugs-Cc: lomiri-camera-app@packages.debian.org
Control: affects -1 + src:lomiri-camera-app
User: release.debian.org@packages.debian.org
Usertags: unblock
Please unblock package lomiri-camera-app
I added two more patches from upstream, one fixing a file access bug /
race condition and another fixing a usability issue.
[ Reason ]
+ * debian/patches:
+ + Add 0006_qml-Viewfinder-fix-content-export-preview-corruption.patch.
+ qml/Viewfinder: Fix content export preview corruption in !hasEXIF mode.
-> Fix for two threads possibly trying to write to an image file
simultaneously, causing its corruption.
+ + Add 0007_qml-Support-scanning-white-QR-codes-in-BarcodeReaderApp.patch.
+ Support white QR codes in barcode reader app.
-> Support scanning white QR codes.
[ Impact ]
Above mentioned problems remain in Lomiri's Camera App in trixie.
[ Tests ]
Manual tests.
[ Risks ]
Minimal, only for users of Lomiri Camera App.
[ Checklist ]
[x] all changes are documented in the d/changelog
[x] I reviewed all changes and I approve them
[x] attach debdiff against the package in testing
[ Other info ]
Relevant for Lomiri in Debian.
unblock lomiri-camera-app/4.0.8+dfsg-5
diff -Nru lomiri-camera-app-4.0.8+dfsg/debian/changelog lomiri-camera-app-4.0.8+dfsg/debian/changelog
--- lomiri-camera-app-4.0.8+dfsg/debian/changelog 2025-05-30 16:14:07.000000000 +0200
+++ lomiri-camera-app-4.0.8+dfsg/debian/changelog 2025-06-15 21:14:56.000000000 +0200
@@ -1,3 +1,13 @@
+lomiri-camera-app (4.0.8+dfsg-5) unstable; urgency=medium
+
+ * debian/patches:
+ + Add 0006_qml-Viewfinder-fix-content-export-preview-corruption.patch.
+ qml/Viewfinder: Fix content export preview corruption in !hasEXIF mode.
+ + Add 0007_qml-Support-scanning-white-QR-codes-in-BarcodeReaderApp.patch.
+ Support white QR codes in barcode reader app.
+
+ -- Mike Gabriel <sunweaver@debian.org> Sun, 15 Jun 2025 21:14:56 +0200
+
lomiri-camera-app (4.0.8+dfsg-4) unstable; urgency=medium
* debian/patches:
diff -Nru lomiri-camera-app-4.0.8+dfsg/debian/patches/0006_qml-Viewfinder-fix-content-export-preview-corruption.patch lomiri-camera-app-4.0.8+dfsg/debian/patches/0006_qml-Viewfinder-fix-content-export-preview-corruption.patch
--- lomiri-camera-app-4.0.8+dfsg/debian/patches/0006_qml-Viewfinder-fix-content-export-preview-corruption.patch 1970-01-01 01:00:00.000000000 +0100
+++ lomiri-camera-app-4.0.8+dfsg/debian/patches/0006_qml-Viewfinder-fix-content-export-preview-corruption.patch 2025-06-06 19:21:41.000000000 +0200
@@ -0,0 +1,103 @@
+From f3f7476729771137ea510f81357fef98d9d3b9bb Mon Sep 17 00:00:00 2001
+From: Ratchanan Srirattanamet <ratchanan@ubports.com>
+Date: Fri, 30 May 2025 20:56:44 +0700
+Subject: [PATCH] qml/Viewfinder: fix content export preview corruption in
+ !hasEXIF mode
+
+Because of signal connection order, content export preview will start
+rendering image while `deleteEXIF()` re-writes the file. This causes
+preview image to corrupt.
+
+Move all imageSaved() signal handler code from `ViewFinderOverlay` to
+`ViewFinderView` so that we can control the ordering. Order it so that
+(synchronous) `deleteEXIF()` happens before content export preview
+renders image.
+
+#While we're at it, remove call to non-existent `fileOperations.
+#setEXIFData()` (which is redundant with another part of code in
+#`ViewFinderOverlay`); the exception thrown will prevent the rest of the
+#code to run.
+
+Finally, add a few comments so that we turn `deleteEXIF()` to be
+asynchronous in the future.
+
+Fixes: https://gitlab.com/ubports/development/apps/lomiri-camera-app/-/issues/217
+Fixes: e38dbba16647 ("add fixes to barcodereader app and drop obsolete imports")
+Signed-off-by: Mike Gabriel <mike.gabriel@das-netzwerkteam.de>
+---
+ ViewFinderOverlay.qml | 35 ----------------------------
+ ViewFinderView.qml | 23 +++++++++++++++++-
+ 2 files changed, 22 insertions(+), 36 deletions(-)
+
+--- a/ViewFinderOverlay.qml
++++ b/ViewFinderOverlay.qml
+@@ -1008,10 +1008,6 @@
+ position.horizontalAccuracy <= 100)
+ }
+
+- PostProcessOperations {
+- id: postProcessOperations
+- }
+-
+ Connections {
+ target: camera.imageCapture
+ onReadyChanged: {
+@@ -1021,19 +1017,6 @@
+ }
+ }
+ }
+- onImageSaved : {
+- if(path &&!settings.hasEXIF)
+- {
+- postProcessOperations.deleteEXIFdata(path);
+- }
+- if(path && settings.dateStampImages && !main.contentExportMode) {
+- postProcessOperations.addDateStamp(path,
+- viewFinderOverlay.settings.dateStampFormat,
+- viewFinderOverlay.settings.dateStampColor,
+- viewFinderOverlay.settings.dateStampOpacity,
+- viewFinderOverlay.settings.dateStampAlign);
+- }
+- }
+ }
+
+ CircleButton {
+--- a/ViewFinderView.qml
++++ b/ViewFinderView.qml
+@@ -131,7 +131,24 @@
+ }
+
+ onImageSaved: {
+- if (main.contentExportMode) viewFinderExportConfirmation.mediaPath = path;
++ if(!viewFinderOverlay.settings.hasEXIF) {
++ // TODO: make this operation asynchronous.
++ postProcessOperations.deleteEXIFdata(path);
++ }
++
++ if(viewFinderOverlay.settings.dateStampImages && !main.contentExportMode) {
++ postProcessOperations.addDateStamp(path,
++ viewFinderOverlay.settings.dateStampFormat,
++ viewFinderOverlay.settings.dateStampColor,
++ viewFinderOverlay.settings.dateStampOpacity,
++ viewFinderOverlay.settings.dateStampAlign);
++ }
++
++ // TODO: make it so that asynchronous operations signals to us
++ // on finished and only then proceed to the code below.
++
++ if (main.contentExportMode)
++ viewFinderExportConfirmation.mediaPath = path;
+
+ viewFinderView.photoTaken(path);
+ metricPhotos.increment();
+@@ -369,6 +386,10 @@
+ sourceComponent: viewFinderExportConfirmationComp
+ }
+
++ PostProcessOperations {
++ id: postProcessOperations
++ }
++
+ property alias viewFinderExportConfirmation: viewFinderExportConfirmationLoader.item
+
+ Component {
diff -Nru lomiri-camera-app-4.0.8+dfsg/debian/patches/0007_qml-Support-scanning-white-QR-codes-in-BarcodeReaderApp.patch lomiri-camera-app-4.0.8+dfsg/debian/patches/0007_qml-Support-scanning-white-QR-codes-in-BarcodeReaderApp.patch
--- lomiri-camera-app-4.0.8+dfsg/debian/patches/0007_qml-Support-scanning-white-QR-codes-in-BarcodeReaderApp.patch 1970-01-01 01:00:00.000000000 +0100
+++ lomiri-camera-app-4.0.8+dfsg/debian/patches/0007_qml-Support-scanning-white-QR-codes-in-BarcodeReaderApp.patch 2025-06-15 21:14:56.000000000 +0200
@@ -0,0 +1,24 @@
+From 993643af0ab88243fe76b13f7ed2f4abee823072 Mon Sep 17 00:00:00 2001
+From: Alfred Neumayer <dev.beidl@gmail.com>
+Date: Fri, 13 Jun 2025 19:02:18 +0200
+Subject: [PATCH] qml: Activate QZXing.SourceFilter_ImageInverted for
+ imageSourceFilter
+
+Let the viewfinder be color inverted by QZXing. Fixes scanning
+white QR Codes on black backgrounds.
+---
+ barcode-reader-app.qml | 3 ++-
+ 1 file changed, 2 insertions(+), 1 deletion(-)
+
+--- a/barcode-reader-app.qml
++++ b/barcode-reader-app.qml
+@@ -72,7 +72,8 @@
+ active: true
+ decoder {
+ enabledDecoders: QZXing.DecoderFormat_QR_CODE
+- imageSourceFilter: QZXing.SourceFilter_ImageNormal
++ imageSourceFilter: QZXing.SourceFilter_ImageNormal |
++ QZXing.SourceFilter_ImageInverted
+
+ onTagFoundAdvanced: {
+ viewFinderView.recentlyScannedTag = tag
diff -Nru lomiri-camera-app-4.0.8+dfsg/debian/patches/series lomiri-camera-app-4.0.8+dfsg/debian/patches/series
--- lomiri-camera-app-4.0.8+dfsg/debian/patches/series 2025-05-30 15:45:23.000000000 +0200
+++ lomiri-camera-app-4.0.8+dfsg/debian/patches/series 2025-06-15 21:13:35.000000000 +0200
@@ -5,3 +5,5 @@
0003_fix-spelling-of-background-color-in-AdvancedOptions-qml.patch
0004_Save-orientation-when-erasing-metadata.patch
0005_add-left-margin-between-icon-and-label-in-options-selector.patch
+0006_qml-Viewfinder-fix-content-export-preview-corruption.patch
+0007_qml-Support-scanning-white-QR-codes-in-BarcodeReaderApp.patch
Reply to: