反馈vim3配合USB摄像头拍照时遇到的bug

Which Khadas SBC do you use?

vim3

Which system do you use? Android, Ubuntu, OOWOW or others?

android

Which version of system do you use? Khadas official images, self built images, or others?

官方新固件vim3-android-9-64bit-v230408

Please describe your issue below:

我将屏幕设置了旋转90度

问题1,当我仅插入一个USB摄像头时,点击切换摄像头按钮,会导致相机无法使用
问题2,当我使用原相机拍照的时候预览出来的是非镜像的,但最后的得到的照片是镜像的,预览效果图如下:


实际得到的图片如下:

问题3:我在vim3上安装了一个腾讯QQ,使用它进行拍照时相比原相机旋转了180度,下图是原相机进行拍摄:

可见图片仅是镜像了,
这是QQ拍摄的效果:

照片旋转了180度(上下翻转了),使用其他软件也会出现这种上下翻转的情况。
@xiong.zhang @goenjoy

@sanshui
我这边先验证下你提的这些问题

您好,这边摄像头的BUG大概什么时间可以解决呢?

按照如下修改尝试

diff --git a/kvim3/vendor_prop.mk b/kvim3/vendor_prop.mk
index fe9bab2..b8807eb 100755
--- a/kvim3/vendor_prop.mk
+++ b/kvim3/vendor_prop.mk
@@ -34,7 +34,7 @@ PRODUCT_PROPERTY_OVERRIDES += \
     ro.media.camera_preview.limitedrate=1920x1080x30,1280x720x30,640x480x30,320x240x28 \
     ro.media.camera_preview.usemjpeg=1 \
     ro.vendor.platform.board_camera=true \
-	ro.vendor.camera_mipi.faceback=false \
+	ro.vendor.camera_mipi.faceback=true \
 	ro.vendor.camera_usb.faceback=true \
 	vendor.camera.mirror=true \
 	ro.vendor.platform.omx=true \
diff --git a/res/layout-land/mode_options.xml b/res/layout-land/mode_options.xml
index 7e49f4557..fdada87cc 100644
--- a/res/layout-land/mode_options.xml
+++ b/res/layout-land/mode_options.xml
@@ -95,7 +95,6 @@
         <com.android.camera.MultiToggleImageButton
             android:id="@+id/camera_toggle_button"
             style="@style/ModeOption"
-            camera:imageIds="@array/camera_id_icons"
             camera:contentDescriptionIds="@array/camera_id_descriptions" />
         <com.android.camera.MultiToggleImageButton
             android:id="@+id/flash_toggle_button"
diff --git a/res/layout-port/mode_options.xml b/res/layout-port/mode_options.xml
index d9508bf5e..0ea66ee86 100644
--- a/res/layout-port/mode_options.xml
+++ b/res/layout-port/mode_options.xml
@@ -120,7 +120,6 @@
         <com.android.camera.MultiToggleImageButton
             android:id="@+id/camera_toggle_button"
             style="@style/ModeOption"
-            camera:imageIds="@array/camera_id_icons"
             camera:contentDescriptionIds="@array/camera_id_descriptions" />
     </com.android.camera.ui.TopRightWeightedLayout>
 </com.android.camera.widget.ModeOptions>
diff --git a/res/layout/photo_bottombar_buttons.xml b/res/layout/photo_bottombar_buttons.xml
index fea91e23c..a61925bfd 100644
--- a/res/layout/photo_bottombar_buttons.xml
+++ b/res/layout/photo_bottombar_buttons.xml
@@ -28,8 +28,7 @@
             android:id="@+id/camera_toggle_button"
             android:layout_width="wrap_content"
             android:layout_height="wrap_content"
-            android:background="@null"
-            camera:imageIds="@array/camera_id_icons" />
+            android:background="@null" />
         <com.android.camera.MultiToggleImageButton
             android:id="@+id/hdr_plus_toggle_button"
             android:layout_width="wrap_content"
diff --git a/res/layout/photo_intent_bottombar_buttons.xml b/res/layout/photo_intent_bottombar_buttons.xml
index c3ace9a54..43cc407ea 100644
--- a/res/layout/photo_intent_bottombar_buttons.xml
+++ b/res/layout/photo_intent_bottombar_buttons.xml
@@ -39,8 +39,7 @@
             android:id="@+id/camera_toggle_button"
             android:layout_width="wrap_content"
             android:layout_height="wrap_content"
-            android:background="@null"
-            camera:imageIds="@array/camera_id_icons" />
+            android:background="@null" />
         <com.android.camera.MultiToggleImageButton
             android:id="@+id/hdr_plus_toggle_button"
             android:layout_width="wrap_content"
diff --git a/res/layout/video_bottombar_buttons.xml b/res/layout/video_bottombar_buttons.xml
index 5780c5409..0a6303325 100644
--- a/res/layout/video_bottombar_buttons.xml
+++ b/res/layout/video_bottombar_buttons.xml
@@ -28,6 +28,5 @@
             android:id="@+id/camera_toggle_button"
             android:layout_width="wrap_content"
             android:layout_height="wrap_content"
-            android:background="@null"
-            camera:imageIds="@array/camera_id_icons" />
+            android:background="@null" />
 </merge>
\ No newline at end of file
diff --git a/res/layout/video_intent_bottombar_buttons.xml b/res/layout/video_intent_bottombar_buttons.xml
index c3583eaaa..897f655e6 100644
--- a/res/layout/video_intent_bottombar_buttons.xml
+++ b/res/layout/video_intent_bottombar_buttons.xml
@@ -39,6 +39,5 @@
             android:id="@+id/camera_toggle_button"
             android:layout_width="wrap_content"
             android:layout_height="wrap_content"
-            android:background="@null"
-            camera:imageIds="@array/camera_id_icons" />
+            android:background="@null" />
 </merge>
diff --git a/res/values/arrays.xml b/res/values/arrays.xml
index 487265780..ce85ee285 100644
--- a/res/values/arrays.xml
+++ b/res/values/arrays.xml
@@ -181,10 +181,10 @@
         <item>@string/pref_camera_id_label_front</item>
     </array>
 
-    <array name="camera_id_icons" translatable="false">
+    <!-- <array name="camera_id_icons" translatable="false">
         <item>@drawable/ic_switch_camera_back</item>
         <item>@drawable/ic_switch_camera_front</item>
-    </array>
+    </array> -->
 
     <array name="camera_id_descriptions" translatable="false">
       <item>@string/camera_id_back_desc</item>
diff --git a/src/com/android/camera/ButtonManager.java b/src/com/android/camera/ButtonManager.java
index 4be4f0a3b..de90aa5df 100644
--- a/src/com/android/camera/ButtonManager.java
+++ b/src/com/android/camera/ButtonManager.java
@@ -362,7 +362,7 @@ public class ButtonManager implements SettingsManager.OnSettingChangedListener {
                 initializeHdrPlusFlashButton(button, cb, preCb, R.array.camera_flashmode_icons);
                 break;
             case BUTTON_CAMERA:
-                initializeCameraButton(button, cb, preCb, R.array.camera_id_icons);
+                //initializeCameraButton(button, cb, preCb, R.array.camera_id_icons);
                 break;
             case BUTTON_HDR_PLUS:
                 initializeHdrPlusButton(button, cb, preCb, R.array.pref_camera_hdr_plus_icons);
     <array name="camera_id_largeicons" translatable="false">
diff --git a/src/com/android/camera/Storage.java b/src/com/android/camera/Storage.java
index 842f9a4f6..be0671868 100644
--- a/src/com/android/camera/Storage.java
+++ b/src/com/android/camera/Storage.java
@@ -42,6 +42,9 @@ import java.io.IOException;
 import java.util.HashMap;
 import java.util.UUID;
 import java.util.concurrent.TimeUnit;
+import android.graphics.Matrix;
+import com.android.camera.util.CameraUtil;
+import java.io.ByteArrayOutputStream;
 
 import javax.annotation.Nonnull;
 
@@ -269,9 +272,18 @@ public class Storage {
     public static Uri updateImage(Uri imageUri, ContentResolver resolver, String title, long date,
            Location location, int orientation, ExifInterface exif,
            byte[] jpeg, int width, int height, String mimeType) throws IOException {
+
+            Bitmap bitmap = CameraUtil.makeBitmap(jpeg, width * height);
+            Matrix m = new Matrix();
+            m.postScale(-1, 1);
+            bitmap = Bitmap.createBitmap(bitmap, 0, 0, bitmap.getWidth(), bitmap.getHeight(), m, true);
+            ByteArrayOutputStream baos = new ByteArrayOutputStream();
+            bitmap.compress(Bitmap.CompressFormat.JPEG, 100, baos);
+            byte[] jpegData = baos.toByteArray();
+
         String path = generateFilepath(title, mimeType);
-        writeFile(path, jpeg, exif);
-        return updateImage(imageUri, resolver, title, date, location, orientation, jpeg.length, path,
+        writeFile(path, jpegData, exif);
+        return updateImage(imageUri, resolver, title, date, location, orientation, jpegData.length, path,
                 width, height, mimeType);
     }

您好,抱歉我这边无法进行验证,因为编译代码一直做不到,您给我的那版本固件还是存在一些问题,您再进行修改和测试一下吧