xie
2024-11-23 3fdfdea0721fe7a36f6aaa509075f01a194f6748
feat(usb_camera): apply usb_camera patch
10 files modified
143 ■■■■■ changed files
android/device/softwinner/ceres-c3/ceres_c3.mk 10 ●●●●● patch | view | raw | blame | history
android/device/softwinner/ceres-c3/configs/manifest.xml 1 ●●●● patch | view | raw | blame | history
android/device/softwinner/ceres-c3/configs/media_profiles.xml 58 ●●●●● patch | view | raw | blame | history
android/device/softwinner/ceres-c3/hal.mk 6 ●●●● patch | view | raw | blame | history
android/device/softwinner/ceres-c3/init.device.rc 4 ●●●● patch | view | raw | blame | history
android/hardware/interfaces/camera/device/3.4/default/ExternalCameraDeviceSession.cpp 12 ●●●● patch | view | raw | blame | history
android/packages/apps/Camera2/res/values/arrays.xml 5 ●●●●● patch | view | raw | blame | history
android/packages/apps/Camera2/res/values/strings.xml 2 ●●●●● patch | view | raw | blame | history
android/packages/apps/Camera2/src/com/android/camera/MultiToggleImageButton.java 34 ●●●●● patch | view | raw | blame | history
android/packages/apps/Camera2/src/com/android/camera/one/config/OneCameraFeatureConfigCreator.java 11 ●●●●● patch | view | raw | blame | history
android/device/softwinner/ceres-c3/ceres_c3.mk
....@@ -328,6 +328,16 @@
328328
329329 #PRODUCT_ROTATION := 90
330330
331
+PRODUCT_HAS_UVC_CAMERA := true
332
+ifeq ($(PRODUCT_HAS_UVC_CAMERA),true)
333
+PRODUCT_SYSTEM_DEFAULT_PROPERTIES += \
334
+ ro.camera.uvcfacing=external
335
+
336
+PRODUCT_COPY_FILES += \
337
+ device/softwinner/common/config/external_camera_config.xml:$(TARGET_COPY_OUT_VENDOR)/etc/external_camera_config.xml
338
+endif
339
+
340
+
331341 PRODUCT_COPY_FILES += \
332342 $(LOCAL_PATH)/ido/liblcd_bl.so:/system/lib64/liblcd_bl.so \
333343 $(LOCAL_PATH)/ido/liblcd_bl32.so:/system/lib/liblcd_bl.so \
android/device/softwinner/ceres-c3/configs/manifest.xml
....@@ -156,6 +156,7 @@
156156 <interface>
157157 <name>ICameraProvider</name>
158158 <instance>legacy/0</instance>
159
+ <instance>external/0</instance>
159160 </interface>
160161 </hal>
161162 <hal format="hidl">
android/device/softwinner/ceres-c3/configs/media_profiles.xml
....@@ -79,7 +79,33 @@
7979 <!-- Each camcorder profile defines a set of predefined configuration parameters -->
8080 <!-- Back Camera -->
8181 <!-- Front Camera -->
82
+ <!-- External Camera -->
8283 <CamcorderProfiles cameraId="0" >
84
+ <EncoderProfile quality="720p" fileFormat="mp4" duration="30">
85
+ <Video codec="h264"
86
+ bitRate="1500000"
87
+ width="1280"
88
+ height="720"
89
+ frameRate="30" />
90
+
91
+ <Audio codec="aac"
92
+ bitRate="12200"
93
+ sampleRate="8000"
94
+ channels="1" />
95
+ </EncoderProfile>
96
+ <EncoderProfile quality="timelapse720p" fileFormat="mp4" duration="30">
97
+ <Video codec="h264"
98
+ bitRate="1500000"
99
+ width="1280"
100
+ height="720"
101
+ frameRate="30" />
102
+
103
+ <Audio codec="aac"
104
+ bitRate="12200"
105
+ sampleRate="8000"
106
+ channels="1" />
107
+ </EncoderProfile>
108
+
83109 <EncoderProfile quality="480p" fileFormat="mp4" duration="30">
84110 <Video codec="h264"
85111 bitRate="1500000"
....@@ -148,6 +174,38 @@
148174
149175 </CamcorderProfiles>
150176
177
+ <CamcorderProfiles cameraId="2" >
178
+ <EncoderProfile quality="480p" fileFormat="mp4" duration="30">
179
+ <Video codec="h264"
180
+ bitRate="1500000"
181
+ width="1280"
182
+ height="720"
183
+ frameRate="30" />
184
+
185
+ <Audio codec="aac"
186
+ bitRate="12200"
187
+ sampleRate="8000"
188
+ channels="1" />
189
+ </EncoderProfile>
190
+ <EncoderProfile quality="timelapse480p" fileFormat="mp4" duration="30">
191
+ <Video codec="h264"
192
+ bitRate="1500000"
193
+ width="1280"
194
+ height="720"
195
+ frameRate="30" />
196
+
197
+ <Audio codec="aac"
198
+ bitRate="12200"
199
+ sampleRate="8000"
200
+ channels="1" />
201
+ </EncoderProfile>
202
+
203
+ <ImageEncoding quality="90" />
204
+ <ImageEncoding quality="80" />
205
+ <ImageEncoding quality="70" />
206
+ <ImageDecoding memCap="20000000" />
207
+ </CamcorderProfiles>
208
+
151209 <EncoderOutputFileFormat name="mp4" />
152210
153211 <!--
android/device/softwinner/ceres-c3/hal.mk
....@@ -26,12 +26,16 @@
2626
2727 # CAMERA
2828 PRODUCT_PACKAGES += \
29
- camera.device@3.2-impl \
29
+ camera.device@3.5-impl \
3030 android.hardware.camera.provider@2.4-service-lazy \
3131 android.hardware.camera.provider@2.4-impl \
3232 libcamera \
3333 camera.ceres
3434
35
+PRODUCT_PACKAGES += \
36
+ android.hardware.camera.provider@2.4-external-service
37
+
38
+
3539 # Memtrack
3640 PRODUCT_PACKAGES += \
3741 android.hardware.memtrack@1.0-impl \
android/device/softwinner/ceres-c3/init.device.rc
....@@ -50,6 +50,10 @@
5050 insmod vendor/modules/ov8858_r2a_4lane.ko
5151 #insmod /vendor/modules/gc2385_mipi.ko
5252 insmod /vendor/modules/vin_v4l2.ko
53
+### uvc module
54
+ insmod /vendor/modules/videobuf2-vmalloc.ko
55
+ insmod /vendor/modules/uvcvideo.ko
56
+
5357
5458 on property:sys.boot_completed=1
5559 #usb hub up
android/hardware/interfaces/camera/device/3.4/default/ExternalCameraDeviceSession.cpp
....@@ -2372,12 +2372,12 @@
23722372 }
23732373 uint32_t bufferSize = fmt.fmt.pix.sizeimage;
23742374 ALOGI("%s: V4L2 buffer size is %d", __FUNCTION__, bufferSize);
2375
- uint32_t expectedMaxBufferSize = kMaxBytesPerPixel * fmt.fmt.pix.width * fmt.fmt.pix.height;
2376
- if ((bufferSize == 0) || (bufferSize > expectedMaxBufferSize)) {
2377
- ALOGE("%s: V4L2 buffer size: %u looks invalid. Expected maximum size: %u", __FUNCTION__,
2378
- bufferSize, expectedMaxBufferSize);
2379
- return -EINVAL;
2380
- }
2375
+ //uint32_t expectedMaxBufferSize = kMaxBytesPerPixel * fmt.fmt.pix.width * fmt.fmt.pix.height;
2376
+ // if ((bufferSize == 0) || (bufferSize > expectedMaxBufferSize)) {
2377
+ // ALOGE("%s: V4L2 buffer size: %u looks invalid. Expected maximum size: %u", __FUNCTION__,
2378
+ // bufferSize, expectedMaxBufferSize);
2379
+ // return -EINVAL;
2380
+ // }
23812381 mMaxV4L2BufferSize = bufferSize;
23822382
23832383 const double kDefaultFps = 30.0;
android/packages/apps/Camera2/res/values/arrays.xml
....@@ -169,21 +169,25 @@
169169 <array name="camera_id_entries" translatable="false">
170170 <item>@string/pref_camera_id_entry_back</item>
171171 <item>@string/pref_camera_id_entry_front</item>
172
+ <item>@string/pref_camera_id_entry_external</item>
172173 </array>
173174
174175 <array name="camera_id_entryvalues" translatable="false">
175176 <item>@string/pref_camera_id_entry_back_value</item>
176177 <item>@string/pref_camera_id_entry_front_value</item>
178
+ <item>@string/pref_camera_id_entry_external_value</item>
177179 </array>
178180
179181 <array name="camera_id_labels" translatable="false">
180182 <item>@string/pref_camera_id_label_back</item>
181183 <item>@string/pref_camera_id_label_front</item>
184
+ <item>@string/pref_camera_id_label_external</item>
182185 </array>
183186
184187 <array name="camera_id_icons" translatable="false">
185188 <item>@drawable/ic_switch_camera_back</item>
186189 <item>@drawable/ic_switch_camera_front</item>
190
+ <item>@drawable/ic_switch_camera_external</item>
187191 </array>
188192
189193 <array name="camera_id_icons_without_external" translatable="false">
....@@ -221,6 +225,7 @@
221225 <array name="camera_id_largeicons" translatable="false">
222226 <item>@drawable/ic_switch_camera_back</item>
223227 <item>@drawable/ic_switch_camera_front</item>
228
+ <item>@drawable/ic_switch_camera_external</item>
224229 </array>
225230
226231 <string-array name="pref_video_effect_entries" translatable="false">
android/packages/apps/Camera2/res/values/strings.xml
....@@ -174,6 +174,7 @@
174174 <!-- Named indexes into the array of camera facing entries -->
175175 <string name="pref_camera_id_index_back" translatable="false">1</string>
176176 <string name="pref_camera_id_index_front" translatable="false">2</string>
177
+ <string name="pref_camera_id_index_external" translatable="false">2</string>
177178
178179 <!-- In select camera setting, back facing camera. [CHAR LIMIT=14] -->
179180 <string name="pref_camera_id_entry_back">Back</string>
....@@ -185,6 +186,7 @@
185186 <string name="pref_camera_id_entry_back_value" translatable="false">0</string>
186187 <!-- In select camera setting, front-facing camera value. [CHAR LIMIT=14] -->
187188 <string name="pref_camera_id_entry_front_value" translatable="false">1</string>
189
+ <string name="pref_camera_id_entry_external_value" translatable="false">2</string>
188190
189191 <!-- Settings screen, location setting text. [CHAR LIMIT=20]-->
190192 <string name="pref_camera_save_location_title">Save location</string>
android/packages/apps/Camera2/src/com/android/camera/MultiToggleImageButton.java
....@@ -27,6 +27,7 @@
2727 import android.graphics.Matrix;
2828 import android.graphics.drawable.Drawable;
2929 import android.os.AsyncTask;
30
+import android.os.SystemProperties;
3031 import android.util.AttributeSet;
3132 import android.view.View;
3233 import android.widget.ImageButton;
....@@ -74,6 +75,8 @@
7475 private int mAnimDirection;
7576 private Matrix mMatrix = new Matrix();
7677 private ValueAnimator mAnimator;
78
+
79
+ private static final String ANDROID_UVC_PROPERTY = "ro.camera.uvcfacing";
7780
7881 public MultiToggleImageButton(Context context) {
7982 super(context);
....@@ -242,6 +245,37 @@
242245
243246 private void nextState() {
244247 int state = mState + 1;
248
+ if(getId() == R.id.camera_toggle_button){
249
+ /*
250
+ *If ro.camera.uvcfacing is set, then skip the original facing state.
251
+ */
252
+ String uvcProperty = SystemProperties.get(ANDROID_UVC_PROPERTY, "");
253
+ if(uvcProperty.equals("")){
254
+ if(state == Integer.parseInt(getResources()
255
+ .getString(R.string.pref_camera_id_entry_external_value))){
256
+ state = state + 1;
257
+ }
258
+ }
259
+ else if (uvcProperty.equals("back")) {
260
+ if(state == Integer.parseInt(getResources()
261
+ .getString(R.string.pref_camera_id_entry_back_value))){
262
+ state = state + 1;
263
+ }
264
+ }
265
+ else if (uvcProperty.equals("front")) {
266
+ if(state == Integer.parseInt(getResources()
267
+ .getString(R.string.pref_camera_id_entry_front_value))){
268
+ state = state + 1;
269
+ }
270
+ }
271
+ else if (uvcProperty.equals("external")) {
272
+ int externalValue = Integer.parseInt(getResources().
273
+ getString(R.string.pref_camera_id_entry_external_value));
274
+ if(state != externalValue){
275
+ state = externalValue;
276
+ }
277
+ }
278
+ }
245279 if (state >= mImageIds.length) {
246280 state = 0;
247281 }
android/packages/apps/Camera2/src/com/android/camera/one/config/OneCameraFeatureConfigCreator.java
....@@ -28,6 +28,7 @@
2828 import com.android.camera.util.GservicesHelper;
2929 import com.google.common.base.Function;
3030 import com.google.common.base.Optional;
31
+import android.os.SystemProperties;
3132
3233 /**
3334 * Creates the OneCamera feature configurations for the GoogleCamera app.
....@@ -35,6 +36,7 @@
3536 public class OneCameraFeatureConfigCreator {
3637 private static final Log.Tag TAG = new Log.Tag("OneCamFtrCnfgCrtr");
3738
39
+ private static final String ANDROID_UVC_PROPERTY = "ro.camera.uvcfacing";
3840 /**
3941 * Create the default camera feature config.
4042 */
....@@ -119,7 +121,14 @@
119121 // On LIMITED devices starting with L-MR1 we run a simple YUV
120122 // capture mode.
121123 if (supportedLevel == CameraCharacteristics.INFO_SUPPORTED_HARDWARE_LEVEL_LIMITED) {
122
- return CaptureSupportLevel.LIMITED_JPEG;
124
+ // return CaptureSupportLevel.LIMITED_JPEG;
125
+ String uvcProperty = SystemProperties.get(ANDROID_UVC_PROPERTY, "");
126
+ if(uvcProperty.equals("")){
127
+ return CaptureSupportLevel.LIMITED_JPEG;
128
+ }
129
+ else{
130
+ return CaptureSupportLevel.LIMITED_YUV;
131
+ }
123132 }
124133
125134 // We should never get here. If we do, let's fall back to a mode