From 930a974a6ea20e059bf18deb167277f82d14525d Mon Sep 17 00:00:00 2001 From: Hao Yao Date: Thu, 26 Jun 2025 18:11:36 +0800 Subject: [PATCH] IPU6 kernel v6.16 release on 2025-06-26 Signed-off-by: Hao Yao --- config/linux/ipu6/gcss/graph_descriptor.xml | 54 + config/linux/ipu6/psys_policy_profiles.xml | 7 + config/linux/ipu6/sensors/imx390.xml | 1336 +++++------------ config/linux/ipu6ep/OV2311_ADL.aiqb | Bin 0 -> 67804 bytes config/linux/ipu6ep/gcss/graph_descriptor.xml | 1 - .../ipu6ep/gcss/graph_settings_imx390.xml | 726 +++++++-- .../ipu6ep/gcss/graph_settings_ov2311.xml | 713 +++++++++ config/linux/ipu6ep/libcamhal_profile.xml | 5 +- config/linux/ipu6ep/psys_policy_profiles.xml | 7 + config/linux/ipu6ep/sensors/imx390.xml | 880 ++++------- config/linux/ipu6ep/sensors/isx031-1.xml | 77 + config/linux/ipu6ep/sensors/isx031-2.xml | 107 ++ config/linux/ipu6ep/sensors/isx031-3.xml | 77 + config/linux/ipu6ep/sensors/isx031-4.xml | 167 +++ config/linux/ipu6ep/sensors/isx031.xml | 586 ++++++-- config/linux/ipu6ep/sensors/ov2311.xml | 1241 +++++++++++++++ config/linux/ipu6epmtl/libcamhal_profile.xml | 19 +- config/linux/ipu6epmtl/sensors/imx390-1.xml | 20 +- config/linux/ipu6epmtl/sensors/imx390-2.xml | 28 +- config/linux/ipu6epmtl/sensors/imx390-3.xml | 18 +- config/linux/ipu6epmtl/sensors/imx390-4.xml | 34 +- config/linux/ipu6epmtl/sensors/imx390-5.xml | 38 +- config/linux/ipu6epmtl/sensors/imx390-6.xml | 106 +- config/linux/ipu6epmtl/sensors/isx031-1.xml | 77 + config/linux/ipu6epmtl/sensors/isx031-2.xml | 107 ++ config/linux/ipu6epmtl/sensors/isx031-3.xml | 77 + config/linux/ipu6epmtl/sensors/isx031-4.xml | 167 +++ modules/algowrapper/graph/GraphConfigPipe.cpp | 11 +- src/3a/AiqEngine.cpp | 2 +- src/3a/AiqResultStorage.cpp | 50 +- src/3a/AiqResultStorage.h | 6 +- src/core/DeviceBase.cpp | 4 +- src/core/IspParamAdaptor.cpp | 3 +- src/core/PSysProcessor.cpp | 23 +- src/core/RequestThread.cpp | 6 +- src/iutils/Utils.cpp | 6 +- src/platformdata/CameraParser.cpp | 96 +- src/platformdata/CameraParser.h | 5 +- src/platformdata/ParserBase.cpp | 5 +- src/platformdata/PlatformData.cpp | 12 +- src/platformdata/PlatformData.h | 13 +- src/scheduler/CameraScheduler.cpp | 2 +- src/scheduler/CameraScheduler.h | 3 +- src/v4l2/MediaControl.cpp | 1 + 44 files changed, 4831 insertions(+), 2092 deletions(-) create mode 100644 config/linux/ipu6ep/OV2311_ADL.aiqb create mode 100644 config/linux/ipu6ep/gcss/graph_settings_ov2311.xml create mode 100644 config/linux/ipu6ep/sensors/isx031-1.xml create mode 100644 config/linux/ipu6ep/sensors/isx031-2.xml create mode 100644 config/linux/ipu6ep/sensors/isx031-3.xml create mode 100644 config/linux/ipu6ep/sensors/isx031-4.xml create mode 100644 config/linux/ipu6ep/sensors/ov2311.xml create mode 100644 config/linux/ipu6epmtl/sensors/isx031-1.xml create mode 100644 config/linux/ipu6epmtl/sensors/isx031-2.xml create mode 100644 config/linux/ipu6epmtl/sensors/isx031-3.xml create mode 100644 config/linux/ipu6epmtl/sensors/isx031-4.xml diff --git a/config/linux/ipu6/gcss/graph_descriptor.xml b/config/linux/ipu6/gcss/graph_descriptor.xml index 3fd3b379..18243163 100644 --- a/config/linux/ipu6/gcss/graph_descriptor.xml +++ b/config/linux/ipu6/gcss/graph_descriptor.xml @@ -6061,5 +6061,59 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/config/linux/ipu6/psys_policy_profiles.xml b/config/linux/ipu6/psys_policy_profiles.xml index f9573576..335d0e36 100644 --- a/config/linux/ipu6/psys_policy_profiles.xml +++ b/config/linux/ipu6/psys_policy_profiles.xml @@ -42,4 +42,11 @@ limitations under the License. + + + + + + + diff --git a/config/linux/ipu6/sensors/imx390.xml b/config/linux/ipu6/sensors/imx390.xml index 4c9122a4..131f5f4e 100644 --- a/config/linux/ipu6/sensors/imx390.xml +++ b/config/linux/ipu6/sensors/imx390.xml @@ -1,5 +1,5 @@ - - + - - - - - - - - - - - - - - - - + + + + + + + + + + + + - - + + - - - - - - - - - - - - - - - - + + + + + + + + + + + + - - + + @@ -81,9 +73,8 @@ - - + @@ -108,52 +99,46 @@ + + - + - - - - - - - - - - - - - - - - + + + + + + + + + + + + - - + + - - - - - - - - - - - - - - - - + + + + + + + + + + + + - - + + @@ -176,9 +161,8 @@ - - + @@ -203,52 +187,46 @@ + + - + - - - - - - - - - - - - - - - - + + + + + + + + + + + + - - + + - - - - - - - - - - - - - - - - + + + + + + + + + + + + - - + + @@ -271,9 +249,8 @@ - - + @@ -298,432 +275,46 @@ + + - + - - - - - - - - - - - - - - - - + + + + + + + + + + + + - - + + - - - - - - - - - - - - - - - - + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + @@ -746,9 +337,8 @@ - - + @@ -773,54 +363,46 @@ + + - + - - - - - + + + + - - - - - - + + - - - - + + + + - + - + - - - - - + + + + - - + + - - - + + + + - - - - - - + - + @@ -843,9 +425,8 @@ - - + @@ -870,54 +451,46 @@ + + - + - - - - - - - - - - - - + + + + + + + - - - - + + + + - + - + - - - - - - - - - - - - + + + + + + + - - - - + + + + - + - + @@ -940,9 +513,8 @@ - - + @@ -967,54 +539,46 @@ + + - + - - - - - - - - - - - - + + + + + + + - - - - + + + + - + - + - - - - - - - - - - - - + + + + + + + - - - - + + + + - + - + @@ -1037,9 +601,8 @@ - - + @@ -1064,54 +627,46 @@ + + - + - - - - - - - - - - - - + + + + + + + - - - - + + + + - + - + - - - - - - - - - - - - + + + + + + + - - - - + + + + - + - + @@ -1134,9 +689,8 @@ - - + @@ -1161,54 +715,46 @@ + + - + - - - - - + + + + - - - - - + - - + + - + - + - - - - - + + + + - - - - - + - - + + - + - + @@ -1231,9 +777,8 @@ - - + @@ -1258,54 +803,46 @@ + + - + - - - - - - - - - - - - + + + + + + + - - - - + + + + - + - - - - - - - - - - - - + + + + + + + - - - - + + + + - + @@ -1328,9 +865,8 @@ - - + @@ -1355,54 +891,46 @@ + + - + - - - - - - - - - - - - + + + + + + + - - - - + + + + - + - - - - - - - - - - - - + + + + + + + - - - - + + + + - + @@ -1425,9 +953,8 @@ - - + @@ -1452,54 +979,46 @@ + + - + - - - - - - - - - - - - + + + + + + + - - - - + + + + - + - - - - - - - - - - - - + + + + + + + - - - - + + + + - + @@ -1522,9 +1041,8 @@ - - + @@ -1549,129 +1067,7 @@ + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + \ No newline at end of file diff --git a/config/linux/ipu6ep/OV2311_ADL.aiqb b/config/linux/ipu6ep/OV2311_ADL.aiqb new file mode 100644 index 0000000000000000000000000000000000000000..dbdf1b59d4212fbe3c83f402d19e6b01d350d615 GIT binary patch literal 67804 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 literal 0 HcmV?d00001 diff --git a/config/linux/ipu6ep/gcss/graph_descriptor.xml b/config/linux/ipu6ep/gcss/graph_descriptor.xml index d7e9617f..7bb1766e 100644 --- a/config/linux/ipu6ep/gcss/graph_descriptor.xml +++ b/config/linux/ipu6ep/gcss/graph_descriptor.xml @@ -14152,7 +14152,6 @@ - diff --git a/config/linux/ipu6ep/gcss/graph_settings_imx390.xml b/config/linux/ipu6ep/gcss/graph_settings_imx390.xml index f5d1e51d..6bd0a520 100644 --- a/config/linux/ipu6ep/gcss/graph_settings_imx390.xml +++ b/config/linux/ipu6ep/gcss/graph_settings_imx390.xml @@ -12,7 +12,7 @@ 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. --> - + @@ -35,31 +35,132 @@ See the License for the specific language governing permissions and + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + @@ -78,68 +179,68 @@ See the License for the specific language governing permissions and
- - - - - + - + + + + + + + + + + + + + - - - - - + - + + + + + - - - - - - - -
- - - - - - - - + + + + + + + + - + @@ -153,7 +254,111 @@ See the License for the specific language governing permissions and - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -173,46 +378,46 @@ See the License for the specific language governing permissions and
- - - - - + - + + + + + + + + + + + + + - - - - - + - + + + + + - - - - - - - - @@ -220,30 +425,261 @@ See the License for the specific language governing permissions and + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + - - + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - + + - - - - - - + + + + + + + + + + + + + + - + @@ -261,18 +697,26 @@ See the License for the specific language governing permissions and
- + - + + + + + - + + + + + - + @@ -281,14 +725,6 @@ See the License for the specific language governing permissions and - - - - - - - - @@ -296,30 +732,30 @@ See the License for the specific language governing permissions and - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + - + @@ -339,18 +775,26 @@ See the License for the specific language governing permissions and
- + - + + + + + - + + + + + - + @@ -359,14 +803,6 @@ See the License for the specific language governing permissions and - - - - - - - - @@ -374,22 +810,6 @@ See the License for the specific language governing permissions and - - - - - - - - - - - - - - - - @@ -398,6 +818,22 @@ See the License for the specific language governing permissions and + + + + + + + + + + + + + + + + @@ -418,18 +854,26 @@ See the License for the specific language governing permissions and
- + - + + + + + - + + + + + - + @@ -438,27 +882,15 @@ See the License for the specific language governing permissions and - - - - - - - - - - - - - - - - + + + + @@ -467,10 +899,14 @@ See the License for the specific language governing permissions and - - - - + + + + + + + + diff --git a/config/linux/ipu6ep/gcss/graph_settings_ov2311.xml b/config/linux/ipu6ep/gcss/graph_settings_ov2311.xml new file mode 100644 index 00000000..6168ab21 --- /dev/null +++ b/config/linux/ipu6ep/gcss/graph_settings_ov2311.xml @@ -0,0 +1,713 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/config/linux/ipu6ep/libcamhal_profile.xml b/config/linux/ipu6ep/libcamhal_profile.xml index 6cc193cc..86db6111 100644 --- a/config/linux/ipu6ep/libcamhal_profile.xml +++ b/config/linux/ipu6ep/libcamhal_profile.xml @@ -1,5 +1,5 @@ - diff --git a/config/linux/ipu6ep/psys_policy_profiles.xml b/config/linux/ipu6ep/psys_policy_profiles.xml index 6029bcd2..35528cf2 100644 --- a/config/linux/ipu6ep/psys_policy_profiles.xml +++ b/config/linux/ipu6ep/psys_policy_profiles.xml @@ -55,4 +55,11 @@ limitations under the License. + + + + + + + diff --git a/config/linux/ipu6ep/sensors/imx390.xml b/config/linux/ipu6ep/sensors/imx390.xml index 3d7028c7..dd629b4b 100644 --- a/config/linux/ipu6ep/sensors/imx390.xml +++ b/config/linux/ipu6ep/sensors/imx390.xml @@ -1,5 +1,5 @@ - - + - + - - + + - - - + + + - - + + - + - - + + - - - + + + - - + + @@ -94,51 +94,51 @@ - - - + + + - + - + - - + + - - - + + + - - + + - + - - + + - - - + + + - - + + @@ -182,51 +182,51 @@ - - - + + + - + - + - - + + - - - + + + - - + + - + - - + + - - - + + + - - + + @@ -270,51 +270,51 @@ - - - + + + - + - + - - + + - - - + + + - - + + - + - - + + - - - + + + - - + + @@ -358,405 +358,51 @@ - - - + + + - + - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + - - - - + + + + - + - + - - - - + + + - - + + - - - - + + + + - + - + @@ -800,53 +446,51 @@ - - - + + + - + - + - - - - + + + - - + + - - - - + + + + - + - + - - - - + + + - - + + - - - - + + + + - + - + @@ -890,53 +534,51 @@ - - - + + + - + - + - - - - + + + - - + + - - - - + + + + - + - + - - - - + + + - - + + - - - - + + + + - + - + @@ -980,53 +622,51 @@ - - - + + + - + - + - - - - + + + - - + + - - - - + + + + - + - + - - - - + + + - - + + - - - - + + + + - + - + @@ -1070,53 +710,51 @@ - - - + + + - + - + - - - - + + + - - + + - + - - - - + + + - - + + - + @@ -1160,53 +798,51 @@ - - - + + + - + - + - - - - + + + - - + + - + - - - - + + + - - + + - + @@ -1250,53 +886,51 @@ - - - + + + - + - + - - - - + + + - - + + - + - - - - + + + - - + + - + @@ -1340,53 +974,51 @@ - - - + + + - + - + - - - - + + + - - + + - + - - - - + + + - - + + - + @@ -1430,12 +1062,12 @@ - - - + + + - + - + \ No newline at end of file diff --git a/config/linux/ipu6ep/sensors/isx031-1.xml b/config/linux/ipu6ep/sensors/isx031-1.xml new file mode 100644 index 00000000..27756bb4 --- /dev/null +++ b/config/linux/ipu6ep/sensors/isx031-1.xml @@ -0,0 +1,77 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/config/linux/ipu6ep/sensors/isx031-2.xml b/config/linux/ipu6ep/sensors/isx031-2.xml new file mode 100644 index 00000000..a23d4dd6 --- /dev/null +++ b/config/linux/ipu6ep/sensors/isx031-2.xml @@ -0,0 +1,107 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/config/linux/ipu6ep/sensors/isx031-3.xml b/config/linux/ipu6ep/sensors/isx031-3.xml new file mode 100644 index 00000000..3e14d56c --- /dev/null +++ b/config/linux/ipu6ep/sensors/isx031-3.xml @@ -0,0 +1,77 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/config/linux/ipu6ep/sensors/isx031-4.xml b/config/linux/ipu6ep/sensors/isx031-4.xml new file mode 100644 index 00000000..3c357612 --- /dev/null +++ b/config/linux/ipu6ep/sensors/isx031-4.xml @@ -0,0 +1,167 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/config/linux/ipu6ep/sensors/isx031.xml b/config/linux/ipu6ep/sensors/isx031.xml index 2dee4812..89d77fb8 100644 --- a/config/linux/ipu6ep/sensors/isx031.xml +++ b/config/linux/ipu6ep/sensors/isx031.xml @@ -1,5 +1,5 @@ - - + - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - + + - + - - - + + + - - + + - + - - - + + + - - + + - + @@ -78,64 +346,64 @@ - + - + - - - + + + - - + + - + - - - + + + - - + + - + - - - + + + - - + + - + @@ -145,64 +413,64 @@ - + - + - - - + + + - - + + - + - - - + + + - - + + - + - - - + + + - - + + - + @@ -212,64 +480,64 @@ - + - + - - - + + + - - + + - + - - - + + + - - + + - + - - - + + + - - + + - + @@ -279,64 +547,64 @@ - + - + - - - + + + - - + + - + - - - + + + - - + + - + - - - + + + - - + + - + @@ -346,64 +614,64 @@ - + - + - - - + + + - - + + - + - - - + + + - - + + - + - - - + + + - - + + - + @@ -413,64 +681,64 @@ - + - + - - - + + + - - + + - + - - - + + + - - + + - + - - - + + + - - + + - + @@ -480,64 +748,64 @@ - + - + - - - + + + - - + + - + - - - + + + - - + + - + - - - + + + - - + + - + @@ -547,7 +815,7 @@ - + diff --git a/config/linux/ipu6ep/sensors/ov2311.xml b/config/linux/ipu6ep/sensors/ov2311.xml new file mode 100644 index 00000000..3ff07cd8 --- /dev/null +++ b/config/linux/ipu6ep/sensors/ov2311.xml @@ -0,0 +1,1241 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/config/linux/ipu6epmtl/libcamhal_profile.xml b/config/linux/ipu6epmtl/libcamhal_profile.xml index c605b04f..3ac06bf8 100644 --- a/config/linux/ipu6epmtl/libcamhal_profile.xml +++ b/config/linux/ipu6epmtl/libcamhal_profile.xml @@ -1,5 +1,5 @@ - - + diff --git a/config/linux/ipu6epmtl/sensors/imx390-1.xml b/config/linux/ipu6epmtl/sensors/imx390-1.xml index 0e845305..1978e525 100644 --- a/config/linux/ipu6epmtl/sensors/imx390-1.xml +++ b/config/linux/ipu6epmtl/sensors/imx390-1.xml @@ -1,5 +1,5 @@ - @@ -108,7 +108,7 @@ - + @@ -165,7 +165,7 @@ - + @@ -222,7 +222,7 @@ - + diff --git a/config/linux/ipu6epmtl/sensors/imx390-2.xml b/config/linux/ipu6epmtl/sensors/imx390-2.xml index be6e2e53..e0f72e56 100644 --- a/config/linux/ipu6epmtl/sensors/imx390-2.xml +++ b/config/linux/ipu6epmtl/sensors/imx390-2.xml @@ -1,5 +1,5 @@ - @@ -106,19 +106,19 @@ - + - + - - + + @@ -130,7 +130,7 @@ - + @@ -187,7 +187,7 @@ - + @@ -244,7 +244,7 @@ - + diff --git a/config/linux/ipu6epmtl/sensors/imx390-3.xml b/config/linux/ipu6epmtl/sensors/imx390-3.xml index 933d4f3d..9afbcd02 100644 --- a/config/linux/ipu6epmtl/sensors/imx390-3.xml +++ b/config/linux/ipu6epmtl/sensors/imx390-3.xml @@ -1,5 +1,5 @@ - @@ -108,7 +108,7 @@ - + @@ -165,7 +165,7 @@ - + diff --git a/config/linux/ipu6epmtl/sensors/imx390-4.xml b/config/linux/ipu6epmtl/sensors/imx390-4.xml index 3adba6ca..b0e903db 100644 --- a/config/linux/ipu6epmtl/sensors/imx390-4.xml +++ b/config/linux/ipu6epmtl/sensors/imx390-4.xml @@ -1,5 +1,5 @@ - @@ -106,31 +106,31 @@ - + - + - + - + - - - - + + + + @@ -148,7 +148,7 @@ - + @@ -205,7 +205,7 @@ - + diff --git a/config/linux/ipu6epmtl/sensors/imx390-5.xml b/config/linux/ipu6epmtl/sensors/imx390-5.xml index 72cbb5a0..29afe105 100644 --- a/config/linux/ipu6epmtl/sensors/imx390-5.xml +++ b/config/linux/ipu6epmtl/sensors/imx390-5.xml @@ -1,5 +1,5 @@ - @@ -100,7 +100,7 @@ - + @@ -108,7 +108,7 @@ - + @@ -157,7 +157,7 @@ - + @@ -165,7 +165,7 @@ - + @@ -214,7 +214,7 @@ - + diff --git a/config/linux/ipu6epmtl/sensors/imx390-6.xml b/config/linux/ipu6epmtl/sensors/imx390-6.xml index d12af74b..a2f5c3bb 100644 --- a/config/linux/ipu6epmtl/sensors/imx390-6.xml +++ b/config/linux/ipu6epmtl/sensors/imx390-6.xml @@ -1,5 +1,5 @@ - @@ -100,51 +100,51 @@ - + - + - + - + - + - - - + + + - - - + + + - - - - - - + + + + + + - + @@ -156,8 +156,8 @@ - - + + @@ -167,7 +167,7 @@ - + @@ -216,39 +216,39 @@ - + - + - + - - - + + + - - - + + + - - - - + + + + - + @@ -256,8 +256,8 @@ - - + + @@ -265,7 +265,7 @@ - + @@ -314,7 +314,7 @@ - + diff --git a/config/linux/ipu6epmtl/sensors/isx031-1.xml b/config/linux/ipu6epmtl/sensors/isx031-1.xml new file mode 100644 index 00000000..2c1f2b5e --- /dev/null +++ b/config/linux/ipu6epmtl/sensors/isx031-1.xml @@ -0,0 +1,77 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/config/linux/ipu6epmtl/sensors/isx031-2.xml b/config/linux/ipu6epmtl/sensors/isx031-2.xml new file mode 100644 index 00000000..491ba076 --- /dev/null +++ b/config/linux/ipu6epmtl/sensors/isx031-2.xml @@ -0,0 +1,107 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/config/linux/ipu6epmtl/sensors/isx031-3.xml b/config/linux/ipu6epmtl/sensors/isx031-3.xml new file mode 100644 index 00000000..5805f4e2 --- /dev/null +++ b/config/linux/ipu6epmtl/sensors/isx031-3.xml @@ -0,0 +1,77 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/config/linux/ipu6epmtl/sensors/isx031-4.xml b/config/linux/ipu6epmtl/sensors/isx031-4.xml new file mode 100644 index 00000000..dd655be3 --- /dev/null +++ b/config/linux/ipu6epmtl/sensors/isx031-4.xml @@ -0,0 +1,167 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/modules/algowrapper/graph/GraphConfigPipe.cpp b/modules/algowrapper/graph/GraphConfigPipe.cpp index ce92b5de..81c87490 100644 --- a/modules/algowrapper/graph/GraphConfigPipe.cpp +++ b/modules/algowrapper/graph/GraphConfigPipe.cpp @@ -954,7 +954,6 @@ status_t GraphConfigPipe::getScalerByStreamId( CheckAndLogError(!scalerInfo, UNKNOWN_ERROR, "%s, scalerInfo is nullptr", __func__); for (auto it = edgePort2Connection.begin(); it != edgePort2Connection.end(); ++it) { - const char* portName; bool mpFLag = false; bool dpFlag = false; bool pppFlag = false; @@ -962,17 +961,17 @@ status_t GraphConfigPipe::getScalerByStreamId( float scalerH = 1; IGraphType::PipelineConnection connection = it->second; - portName = NODE_NAME(it->first); + string portName = getNodeName(it->first); CheckAndLogError(!connection.stream, UNKNOWN_ERROR, "%s, connection.stream is null.", __func__); int32_t streamId = connection.stream->streamId(); - LOG2("%s, streamId:%d, portName:%s", __func__, streamId, portName); + LOG2("%s, streamId:%d, portName:%s", __func__, streamId, portName.c_str()); - if (!strcmp("main", portName)) { + if (!strcmp("main", portName.c_str())) { mpFLag = true; - } else if (!strcmp("display", portName)) { + } else if (!strcmp("display", portName.c_str())) { dpFlag = true; - } else if (!strcmp("postproc", portName)) { + } else if (!strcmp("postproc", portName.c_str())) { pppFlag = true; } if (!mpFLag && !dpFlag && !pppFlag) continue; diff --git a/src/3a/AiqEngine.cpp b/src/3a/AiqEngine.cpp index 70e72df7..abe4c2f5 100644 --- a/src/3a/AiqEngine.cpp +++ b/src/3a/AiqEngine.cpp @@ -232,7 +232,7 @@ int AiqEngine::prepareStatsParams(cca::cca_stats_params* statsParams, AiqStatist statsParams->dvs_stats_width = resolution.output_width; } - statsParams->frame_id = aiqResult ? aiqResult->mFrameId : -1; + statsParams->frame_id = aiqResult ? aiqResult->mFrameId : 0; statsParams->frame_timestamp = timestamp; statsParams->camera_orientation = ia_aiq_camera_orientation_unknown; } while (0); diff --git a/src/3a/AiqResultStorage.cpp b/src/3a/AiqResultStorage.cpp index c82ed037..8842a346 100644 --- a/src/3a/AiqResultStorage.cpp +++ b/src/3a/AiqResultStorage.cpp @@ -18,24 +18,52 @@ #include "AiqResultStorage.h" #include "iutils/CameraLog.h" +#ifdef HAVE_CHROME_OS +#include +#endif namespace icamera { -std::map AiqResultStorage::sInstances; -Mutex AiqResultStorage::sLock; +std::map& AiqResultStorage::getInstances() { +#ifdef HAVE_CHROME_OS + static base::NoDestructor> sInstances; + return *sInstances; +#else + static std::map sInstances; + return sInstances; +#endif +} + +Mutex& AiqResultStorage::getLock() { + static Mutex sLock; + return sLock; +} AiqResultStorage* AiqResultStorage::getInstance(int cameraId) { - AutoMutex lock(sLock); + AutoMutex lock(getLock()); return getInstanceLocked(cameraId); } void AiqResultStorage::releaseAiqResultStorage(int cameraId) { - AutoMutex lock(sLock); + AutoMutex lock(getLock()); AiqResultStorage* storage = getInstanceLocked(cameraId); - sInstances.erase(cameraId); + getInstances().erase(cameraId); delete storage; } +/** + * Private function with no lock in it, must be called with lock protection + */ +AiqResultStorage* AiqResultStorage::getInstanceLocked(int cameraId) { + auto& sInstances = getInstances(); + if (sInstances.find(cameraId) != sInstances.end()) { + return sInstances[cameraId]; + } + + sInstances[cameraId] = new AiqResultStorage(cameraId); + return sInstances[cameraId]; +} + AiqResultStorage::AiqResultStorage(int cameraId) : mCameraId(cameraId) { for (int i = 0; i < kStorageSize; i++) { mAiqResults[i] = new AiqResult(mCameraId); @@ -162,16 +190,4 @@ bool AiqResultStorage::isDvsRun(int64_t sequence) { return false; } -/** - * Private function with no lock in it, must be called with lock protection - */ -AiqResultStorage* AiqResultStorage::getInstanceLocked(int cameraId) { - if (sInstances.find(cameraId) != sInstances.end()) { - return sInstances[cameraId]; - } - - sInstances[cameraId] = new AiqResultStorage(cameraId); - return sInstances[cameraId]; -} - } // namespace icamera diff --git a/src/3a/AiqResultStorage.h b/src/3a/AiqResultStorage.h index a227270f..7eaa16f2 100644 --- a/src/3a/AiqResultStorage.h +++ b/src/3a/AiqResultStorage.h @@ -134,13 +134,11 @@ class AiqResultStorage { AiqResultStorage(int cameraId); ~AiqResultStorage(); + static std::map& getInstances(); + static Mutex& getLock(); static AiqResultStorage* getInstanceLocked(int cameraId); private: - static std::map sInstances; - // Guard for singleton creation. - static Mutex sLock; - int mCameraId; RWLock mDataLock; // lock for all the data storage below diff --git a/src/core/DeviceBase.cpp b/src/core/DeviceBase.cpp index b41a0fc2..f6c31a1f 100644 --- a/src/core/DeviceBase.cpp +++ b/src/core/DeviceBase.cpp @@ -384,6 +384,8 @@ int MainDevice::onDequeueBuffer(shared_ptr buffer) { buffer->getStreamId(), buffer->getSequence(), __func__, buffer->getField(), buffer->getTimestamp().tv_sec, buffer->getTimestamp().tv_usec); + dumpFrame(buffer); + for (auto& consumer : mConsumers) { consumer->onFrameAvailable(mPort, buffer); } @@ -396,8 +398,6 @@ int MainDevice::onDequeueBuffer(shared_ptr buffer) { frameData.data.frame.timestamp.tv_usec = buffer->getTimestamp().tv_usec; notifyListeners(frameData); - dumpFrame(buffer); - return OK; } diff --git a/src/core/IspParamAdaptor.cpp b/src/core/IspParamAdaptor.cpp index d4bbe0aa..6f769c8c 100644 --- a/src/core/IspParamAdaptor.cpp +++ b/src/core/IspParamAdaptor.cpp @@ -1033,11 +1033,12 @@ void IspParamAdaptor::updateResultFromAlgo(ia_binary_data* binaryData, int64_t s void IspParamAdaptor::dumpIspParameter(int streamId, int64_t sequence, ia_binary_data binaryData) { if (!CameraDump::isDumpTypeEnable(DUMP_PSYS_PAL)) return; + std::string appendixVal = "pal_" + std::to_string(streamId); BinParam_t bParam; bParam.bType = BIN_TYPE_GENERAL; bParam.mType = M_PSYS; bParam.sequence = sequence; - bParam.gParam.appendix = ("pal_" + std::to_string(streamId)).c_str(); + bParam.gParam.appendix = appendixVal.c_str(); bParam.sUsage = (streamId == VIDEO_STREAM_ID) ? 0 : 2; CameraDump::dumpBinary(mCameraId, binaryData.data, binaryData.size, &bParam); } diff --git a/src/core/PSysProcessor.cpp b/src/core/PSysProcessor.cpp index 5e1ee525..79f07338 100644 --- a/src/core/PSysProcessor.cpp +++ b/src/core/PSysProcessor.cpp @@ -527,11 +527,16 @@ int PSysProcessor::processNewFrame() { int64_t inputSequence = -1; CameraBufferPortMap srcBuffers, dstBuffers; if (mScheduler) { + // Wait input buffer, use TRIGGER_MAX_MARGIN to ensure Scheduler is triggered in time. + int64_t delay = TRIGGER_MAX_MARGIN; { - ConditionLock lock(mBufferQueueLock); - // Wait input buffer, use TRIGGER_MAX_MARGIN to ensure Scheduler is triggered in time. // Reduce wait time for the first 10 frames for better performance. - int64_t delay = mSofSequence < 10 ? TRIGGER_MARGIN : TRIGGER_MAX_MARGIN; + AutoMutex l(mSofLock); + if (mSofSequence < 10) delay = TRIGGER_MARGIN; + } + + { + ConditionLock lock(mBufferQueueLock); bool bufReady = waitBufferQueue(lock, mInputQueue, delay); // Already stopped if (!mThreadRunning) return -1; @@ -1041,8 +1046,11 @@ void PSysProcessor::dispatchTask(CameraBufferPortMap& inBuf, CameraBufferPortMap int32_t userRequestId = -1; mParameterGenerator->getUserRequestId(currentSequence, userRequestId); - LOG2("@%s, fake task %d, pending task: %zu", mCameraId, currentSequence, - userRequestId, __func__, fakeTask, mSequencesInflight.size()); + { + AutoMutex l(mBufferQueueLock); + LOG2("@%s, fake task %d, pending task: %zu", mCameraId, + currentSequence, userRequestId, __func__, fakeTask, mSequencesInflight.size()); + } // Prepare the task input paramerters including input and output buffers, settings etc. PSysTaskData taskParam; @@ -1115,7 +1123,10 @@ void PSysProcessor::dispatchTask(CameraBufferPortMap& inBuf, CameraBufferPortMap taskParam.mIspSettings = mIspSettings; } - if (!mThreadRunning) return; + { + AutoMutex l(mBufferQueueLock); + if (!mThreadRunning) return; + } mPSysDAGs[mCurConfigMode]->addTask(taskParam); } diff --git a/src/core/RequestThread.cpp b/src/core/RequestThread.cpp index 08d275b1..0ac1e4d3 100644 --- a/src/core/RequestThread.cpp +++ b/src/core/RequestThread.cpp @@ -397,7 +397,11 @@ bool RequestThread::threadLoop() { } void RequestThread::handleRequest(CameraRequest& request, int64_t applyingSeq) { - int64_t effectSeq = mLastEffectSeq + 1; + int64_t effectSeq = 0; + { + AutoMutex l(mPendingReqLock); + effectSeq = mLastEffectSeq + 1; + } // Raw reprocessing case, don't run 3A. if (request.mBuffer[0]->sequence >= 0 && request.mBuffer[0]->timestamp > 0) { effectSeq = request.mBuffer[0]->sequence; diff --git a/src/iutils/Utils.cpp b/src/iutils/Utils.cpp index 8c60930c..dccd8413 100644 --- a/src/iutils/Utils.cpp +++ b/src/iutils/Utils.cpp @@ -605,7 +605,11 @@ void CameraUtils::getDeviceName(const char* entityName, string& deviceNodeName, char buf[128] = {'\0'}; int len = read(fd, buf, sizeof(buf)); close(fd); - len--; // remove "\n" + if (len > 0) { + len--; // remove "\n" + } else { + len = 0; + } if (len == (int)strlen(entityName) && memcmp(buf, entityName, len) == 0) { deviceNodeName = "/dev/"; deviceNodeName += dirp->d_name; diff --git a/src/platformdata/CameraParser.cpp b/src/platformdata/CameraParser.cpp index 0c9395ed..bd58a861 100644 --- a/src/platformdata/CameraParser.cpp +++ b/src/platformdata/CameraParser.cpp @@ -39,6 +39,7 @@ using std::string; using std::vector; +using std::map; #include "v4l2/NodeInfo.h" @@ -492,9 +493,9 @@ void CameraParser::handleSensor(CameraParser* profiles, const char* name, const } else if (strcmp(name, "enablePdaf") == 0) { pCurrentCam->mEnablePdaf = strcmp(atts[1], "true") == 0; } else if (strcmp(name, "sensorAwb") == 0) { - pCurrentCam->mSensorAwb = strcmp(atts[1], "true") == 0; + parseSensorAwb(atts[1], pCurrentCam->mSensorAwb); } else if (strcmp(name, "sensorAe") == 0) { - pCurrentCam->mSensorAe = strcmp(atts[1], "true") == 0; + parseSensorAe(atts[1], pCurrentCam->mSensorAe); } else if (strcmp(name, "runIspAlways") == 0) { pCurrentCam->mRunIspAlways = strcmp(atts[1], "true") == 0; } else if (strcmp(name, "lensCloseCode") == 0) { @@ -539,7 +540,7 @@ void CameraParser::handleSensor(CameraParser* profiles, const char* name, const pCurrentCam->mSensorExposureType = SENSOR_EXPOSURE_SINGLE; } } else if (strcmp(name, "hdrExposureNum") == 0) { - pCurrentCam->mSensorExposureNum = atoi(atts[1]); + parseSensorExposureNum(atts[1], pCurrentCam->mSensorExposureNum); } else if (strcmp(name, "hdrStatsInputBitDepth") == 0) { pCurrentCam->mHdrStatsInputBitDepth = atoi(atts[1]); } else if (strcmp(name, "hdrStatsOutputBitDepth") == 0) { @@ -1035,6 +1036,78 @@ void CameraParser::storeMcMappForConfig(int mcId, stream_t streamCfg) { streamVector.push_back(streamCfg); } +int CameraParser::parseSensorAwb(const char* str, map& sensorAwbCfg) { + CheckAndLogError(str == nullptr, -1, "@%s, str is nullptr", __func__); + + int sz = strlen(str); + char src[sz + 1]; + MEMCPY_S(src, sz, str, sz); + src[sz] = '\0'; + + char* savePtr; + int index = 0; + char* value = strtok_r(src, ",", &savePtr); + while (value) { + sensorAwbCfg[index] = (strcmp(value, "true") == 0); + + LOG2("@%s, mcId %d, value = %s", __func__, index, value); + + if (savePtr != nullptr) savePtr = const_cast(skipWhiteSpace(savePtr)); + value = strtok_r(nullptr, ",", &savePtr); + index++; + } + + return 0; +} + +int CameraParser::parseSensorAe(const char* str, map& sensorAeCfg) { + CheckAndLogError(str == nullptr, -1, "@%s, str is nullptr", __func__); + + int sz = strlen(str); + char src[sz + 1]; + MEMCPY_S(src, sz, str, sz); + src[sz] = '\0'; + + char* savePtr; + int index = 0; + char* value = strtok_r(src, ",", &savePtr); + while (value) { + sensorAeCfg[index] = (strcmp(value, "true") == 0); + + LOG2("@%s, mcId %d, value = %s", __func__, index, value); + + if (savePtr != nullptr) savePtr = const_cast(skipWhiteSpace(savePtr)); + value = strtok_r(nullptr, ",", &savePtr); + index++; + } + + return 0; +} + +int CameraParser::parseSensorExposureNum(const char* str, map& sensorExpNumCfg) { + CheckAndLogError(str == nullptr, -1, "@%s, str is nullptr", __func__); + + int sz = strlen(str); + char src[sz + 1]; + MEMCPY_S(src, sz, str, sz); + src[sz] = '\0'; + + char* savePtr; + int index = 0; + char* value = strtok_r(src, ",", &savePtr); + while (value) { + sensorExpNumCfg[index] = atoi(value); + + LOG2("@%s, mcId %d, value = %s", __func__, index, value); + + if (savePtr != nullptr) savePtr = const_cast(skipWhiteSpace(savePtr)); + value = strtok_r(nullptr, ",", &savePtr); + index++; + } + + return 0; +} + /** * \brief Parses the string with the supported stream configurations * a stream configuration is made of 4 necessary elements @@ -1053,7 +1126,7 @@ void CameraParser::storeMcMappForConfig(int mcId, stream_t streamCfg) { * \param configs: Stream config array needs to be filled in * */ -void CameraParser::parseStreamConfig(const char* src, stream_array_t& configs) { +void CameraParser::parseStreamConfig(char* src, stream_array_t& configs) { HAL_TRACE_CALL(1); int mcId = -1; @@ -1074,7 +1147,7 @@ void CameraParser::parseStreamConfig(const char* src, stream_array_t& configs) { // Get the next segement for necessary element // Get the next segement for optional element if it exist if (parseStep <= NUM_ELEMENTS_NECESSARY || (!lastElement && (*src == '('))) { - separatorPtr = const_cast(strchr(src, ',')); + separatorPtr = strchr(src, ','); if (separatorPtr) { *separatorPtr = 0; } else { @@ -1110,7 +1183,7 @@ void CameraParser::parseStreamConfig(const char* src, stream_array_t& configs) { if (!lastElement) { // Move to the next element src = separatorPtr + 1; - src = skipWhiteSpace(src); + src = const_cast(skipWhiteSpace(src)); } else if (parseStep < NUM_ELEMENTS_NECESSARY) { LOGE("Malformed stream configuration, only finish step %d", parseStep); return; @@ -1318,7 +1391,7 @@ int CameraParser::parseSupportedAeParamRange(const char* src, vector& scene float max = strtof(srcTmp, &endPtr); maxValues.push_back(max); - if (endPtr) { + if (endPtr && *endPtr != '\0') { srcTmp = endPtr + 1; srcTmp = const_cast(skipWhiteSpace(srcTmp)); } @@ -1801,7 +1874,12 @@ void CameraParser::handleStaticMetaData(CameraParser* profiles, const char* name profiles->mCurrentSensor); if (strcmp(name, "supportedStreamConfig") == 0) { stream_array_t configsArray; - parseStreamConfig(atts[1], configsArray); + char* srcDup = strdup(atts[1]); + CheckAndLogError((srcDup == nullptr), VOID_VALUE, + "Create a copy of source string failed."); + parseStreamConfig(srcDup, configsArray); + free(srcDup); + const int STREAM_MEMBER_NUM = sizeof(stream_t) / sizeof(int); int dataSize = configsArray.size() * STREAM_MEMBER_NUM; int configs[dataSize]; @@ -2288,7 +2366,7 @@ void CameraParser::getNVMDirectory(CameraParser* profiles) { fseek(fp, 0, SEEK_SET); std::unique_ptr ptr(new char[size + 1]); size_t readSize = fread(ptr.get(), sizeof(char), size, fp); - ptr[readSize] = 0; + ptr[readSize] = '\0'; fclose(fp); if (readSize > 0) { diff --git a/src/platformdata/CameraParser.h b/src/platformdata/CameraParser.h index 025c424e..0de8504e 100644 --- a/src/platformdata/CameraParser.h +++ b/src/platformdata/CameraParser.h @@ -151,7 +151,7 @@ class CameraParser : public ParserBase { void handleSensor(CameraParser* profiles, const char* name, const char** atts); void handleCommon(CameraParser* profiles, const char* name, const char** atts); - void parseStreamConfig(const char* src, stream_array_t& configs); + void parseStreamConfig(char* src, stream_array_t& configs); void parseSupportedFeatures(const char* src, camera_features_list_t& features); void parseSupportedIspControls(const char* src, std::vector& features); int parseSupportedVideoStabilizationMode(const char* str, @@ -181,6 +181,9 @@ class CameraParser : public ParserBase { int parseSupportedTuningConfig(const char* str, std::vector& config); int parseLardTags(const char* str, std::vector& lardTags); + int parseSensorAwb(const char* str, std::map& sensorAwbCfg); + int parseSensorAe(const char* str, std::map& sensorAeCfg); + int parseSensorExposureNum(const char* str, std::map& sensorExpNumCfg); void dumpSensorInfo(void); diff --git a/src/platformdata/ParserBase.cpp b/src/platformdata/ParserBase.cpp index 2e437c4b..224ea75d 100644 --- a/src/platformdata/ParserBase.cpp +++ b/src/platformdata/ParserBase.cpp @@ -31,8 +31,9 @@ namespace icamera { const char* ParserBase::skipWhiteSpace(const char* src) { - while (*src == '\n' || *src == '\t' || *src == ' ' || *src == '\v' || *src == '\r' || - *src == '\f') { + while ((src != nullptr && *src != '\0') && + (*src == '\n' || *src == '\t' || *src == ' ' || + *src == '\v' || *src == '\r' || *src == '\f')) { src++; } return src; diff --git a/src/platformdata/PlatformData.cpp b/src/platformdata/PlatformData.cpp index 06f786bd..e583c719 100644 --- a/src/platformdata/PlatformData.cpp +++ b/src/platformdata/PlatformData.cpp @@ -383,11 +383,13 @@ bool PlatformData::isPdafEnabled(int cameraId) { } bool PlatformData::getSensorAwbEnable(int cameraId) { - return getInstance()->mStaticCfg.mCameras[cameraId].mSensorAwb; + int mcId = getInstance()->mStaticCfg.mCameras[cameraId].mMcId; + return getInstance()->mStaticCfg.mCameras[cameraId].mSensorAwb[mcId]; } bool PlatformData::getSensorAeEnable(int cameraId) { - return getInstance()->mStaticCfg.mCameras[cameraId].mSensorAe; + int mcId = getInstance()->mStaticCfg.mCameras[cameraId].mMcId; + return getInstance()->mStaticCfg.mCameras[cameraId].mSensorAe[mcId]; } bool PlatformData::getRunIspAlways(int cameraId) { @@ -547,8 +549,9 @@ bool PlatformData::isEnableDefog(int cameraId) { } int PlatformData::getExposureNum(int cameraId, bool multiExposure) { + int mcId = getInstance()->mStaticCfg.mCameras[cameraId].mMcId; if (multiExposure) { - return getInstance()->mStaticCfg.mCameras[cameraId].mSensorExposureNum; + return getInstance()->mStaticCfg.mCameras[cameraId].mSensorExposureNum[mcId]; } int exposureNum = 1; @@ -887,6 +890,9 @@ void PlatformData::selectMcConf(int cameraId, stream_t stream, ConfigMode mode, if (!mcConfig) { LOGE("No matching McConf: cameraId %d, configMode %d, mcId %d", cameraId, mode, mcId); + } else { + getInstance()->mStaticCfg.mCameras[cameraId].mMcId = mcConfig->mcId; + LOG1("Save mMcId %d sensor settings selection", mcConfig->mcId); } } diff --git a/src/platformdata/PlatformData.h b/src/platformdata/PlatformData.h index 282198a4..d100f0d1 100644 --- a/src/platformdata/PlatformData.h +++ b/src/platformdata/PlatformData.h @@ -133,8 +133,6 @@ class PlatformData { mLensHwType(LENS_NONE_HW), mSensorMode(SENSOR_MODE_UNKNOWN), mEnablePdaf(false), - mSensorAwb(false), - mSensorAe(false), mRunIspAlways(false), // HDR_FEATURE_S mHdrStatsInputBitDepth(0), @@ -142,7 +140,6 @@ class PlatformData { mUseFixedHdrExposureInfo(true), // HDR_FEATURE_E mLtmEnabled(false), - mSensorExposureNum(2), mSensorExposureType(SENSOR_EXPOSURE_SINGLE), mSensorGainType(SENSOR_GAIN_NONE), mLensCloseCode(0), @@ -219,7 +216,8 @@ class PlatformData { mDisableBLCAGainHigh(-1), mResetLinkRoute(true), mReqWaitTimeout(0), - mV4l2BufType(V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLANE) {} + mV4l2BufType(V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLANE), + mMcId(0) {} std::vector mMediaCtlConfs; @@ -237,8 +235,8 @@ class PlatformData { std::map mTuningModeToSensitivityMap; SensorMode mSensorMode; bool mEnablePdaf; - bool mSensorAwb; - bool mSensorAe; + std::map mSensorAwb; + std::map mSensorAe; bool mRunIspAlways; // HDR_FEATURE_S int mHdrStatsInputBitDepth; @@ -246,7 +244,7 @@ class PlatformData { bool mUseFixedHdrExposureInfo; // HDR_FEATURE_E bool mLtmEnabled; - int mSensorExposureNum; + std::map mSensorExposureNum; int mSensorExposureType; int mSensorGainType; int mLensCloseCode; @@ -373,6 +371,7 @@ class PlatformData { /* mReqWaitTimeout is used to override dqbuf timeout (ns) */ int64_t mReqWaitTimeout; v4l2_buf_type mV4l2BufType; + int mMcId; }; /** diff --git a/src/scheduler/CameraScheduler.cpp b/src/scheduler/CameraScheduler.cpp index df543a45..1bd5f3dd 100644 --- a/src/scheduler/CameraScheduler.cpp +++ b/src/scheduler/CameraScheduler.cpp @@ -132,7 +132,7 @@ CameraScheduler::Executor::~Executor() { void CameraScheduler::Executor::addNode(ISchedulerNode* node) { std::lock_guard l(mNodeLock); mNodes.push_back(node); - LOG1("%s: %s added to %s, pos %d", __func__, node->getName(), getName(), mNodes.size()); + LOG1("%s: %s added to %s, pos %lu", __func__, node->getName(), getName(), mNodes.size()); } void CameraScheduler::Executor::removeNode(ISchedulerNode* node) { diff --git a/src/scheduler/CameraScheduler.h b/src/scheduler/CameraScheduler.h index 2bc6ccce..fb9157a0 100644 --- a/src/scheduler/CameraScheduler.h +++ b/src/scheduler/CameraScheduler.h @@ -16,6 +16,7 @@ #pragma once +#include #include #include #include @@ -83,7 +84,7 @@ class CameraScheduler { std::vector mNodes; std::vector> mListeners; Condition mTriggerSignal; - bool mActive; + std::atomic mActive; int64_t mTriggerTick; private: diff --git a/src/v4l2/MediaControl.cpp b/src/v4l2/MediaControl.cpp index de148fae..cd93f09d 100644 --- a/src/v4l2/MediaControl.cpp +++ b/src/v4l2/MediaControl.cpp @@ -515,6 +515,7 @@ int MediaControl::getDevnameFromSysfs(MediaEntity* entity) { LOGE("readlink sysName %s failed ret %d.", sysName, ret); return -EINVAL; } + target[MAX_TARGET_NAME - 1] = '\0'; char* d = strrchr(target, '/'); if (!d) {