[General Questions and Answers] 14jchan:
Hello,

I am using a raspberry pi 4, (lineageOS 20 Kongstakang.com), and obviously, because this is an a raspberry pi, there is no rear camera. Problem is... I have an apk that forces the use of a rear camera. I have full root access, but I am not quite sure how to spoof or change the camera ID's so the external USB camera can report to the system as a back/front facing camera. Here is so info:

rpi4:/system/vendor/etc # ls
NOTICE.xml.gz media_codecs_google_c2_audio.xml
a2dp_in_audio_policy_configuration_7_0.xml media_codecs_google_c2_tv.xml
alsa media_codecs_google_c2_video.xml
audio_effects.xml media_codecs_v4l2_c2_video.xml
audio_policy_configuration.xml media_profiles_V1_0.xml
audio_policy_volumes.xml mkshrc
bluetooth_audio_policy_configuration_7_0.xml passwd
default_volume_tables.xml permissions
external_camera_config.xml r_submix_audio_policy_configuration.xml
fs_config_dirs recovery-resource.dat
fs_config_files res
fstab.rpi4 seccomp_policy
group selinux
init ueventd.konstakang.rc
init.d ueventd.rc
libcamera usb_audio_policy_configuration.xml
media_codecs.xml vintf
media_codecs_ffmpeg_c2.xml wifi

rpi4:/system/vendor/etc # cat external_camera_config.xml
<?xml version="1.0" encoding="utf-8"?>
<!--
Copyright (C) 2021 The Android Open Source Project
Copyright (C) 2021-2022 KonstaKANG

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
-->

<ExternalCamera>
<Provider>
<ignore> <!-- Internal video devices to be ignored by external camera HAL -->
<id>10</id> <!-- No leading/trailing spaces -->
<id>11</id>
<id>12</id>
<id>13</id>
<id>14</id>
<id>15</id>
<id>16</id>
<id>18</id>
<id>19</id>
<id>20</id>
<id>21</id>
<id>22</id>
<id>23</id>
<id>31</id>
</ignore>
</Provider>
<!-- See ExternalCameraUtils.cpp for default values of Device configurations below -->
<Device>
<!-- Max JPEG buffer size in bytes-->
<MaxJpegBufferSize bytes="3145728"/> <!-- 3MB (~= 1080p YUV420) -->
<!-- Size of v4l2 buffer queue when streaming >= 30fps -->
<!-- Larger value: more request can be cached pipeline (less janky) -->
<!-- Smaller value: use less memory -->
<NumVideoBuffers count="4"/>
<!-- Size of v4l2 buffer queue when streaming < 30fps -->
<NumStillBuffers count="2"/>

<!-- List of maximum fps for various output sizes -->
<!-- Any image size smaller than the size listed in Limit row will report
fps (as minimum frame duration) up to the fpsBound value. -->
<FpsList>
<!-- width/height must be increasing, fpsBound must be decreasing-->
<Limit width="640" height="480" fpsBound="30.0"/>
<Limit width="1280" height="720" fpsBound="15.0"/>
<Limit width="1920" height="1080" fpsBound="10.0"/>
<!-- image size larger than the last entry will not be supported-->
</FpsList>
</Device>
</ExternalCamera>

rpi4:/system/vendor/etc/libcamera # ls
camera_hal.yaml ipa

rpi4:/system/vendor/etc/libcamera # cat camera_hal.yaml
cameras:
"/base/soc/i2c0mux/i2c@1/imx219@10":
location: back
rotation: 0
"/base/soc/i2c0mux/i2c@1/imx296@1a":
location: back
rotation: 0
"/base/soc/i2c0mux/i2c@1/imx477@1a":
location: back
rotation: 0
"/base/soc/i2c0mux/i2c@1/imx708@1a":
location: back
rotation: 0
"/base/soc/i2c0mux/i2c@1/ov5647@36":
location: back
rotation: 0

Unlike most actual android devices, I don't see a place where the camera ID is assigned :(