diff --git a/config/linux/ipu6/gcss/graph_descriptor.xml b/config/linux/ipu6/gcss/graph_descriptor.xml
index 3fd3b37..1824316 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 f957357..335d0e3 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 4c9122a..131f5f4 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 0000000..dbdf1b5
Binary files /dev/null and b/config/linux/ipu6ep/OV2311_ADL.aiqb differ
diff --git a/config/linux/ipu6ep/gcss/graph_descriptor.xml b/config/linux/ipu6ep/gcss/graph_descriptor.xml
index d7e9617..7bb1766 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 f5d1e51..6bd0a52 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 0000000..6168ab2
--- /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 6cc193c..86db611 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 6029bcd..35528cf 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 3d7028c..dd629b4 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 0000000..27756bb
--- /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 0000000..a23d4dd
--- /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 0000000..3e14d56
--- /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 0000000..3c35761
--- /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 2dee481..89d77fb 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 0000000..3ff07cd
--- /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 c605b04..3ac06bf 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 0e84530..1978e52 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 be6e2e5..e0f72e5 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 933d4f3..9afbcd0 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 3adba6c..b0e903d 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 72cbb5a..29afe10 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 d12af74..a2f5c3b 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 0000000..2c1f2b5
--- /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 0000000..491ba07
--- /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 0000000..5805f4e
--- /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 0000000..dd655be
--- /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 ce92b5d..81c8749 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 70e72df..abe4c2f 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 c82ed03..8842a34 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 a227270..7eaa16f 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 b41a0fc..f6c31a1 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 d4bbe0a..6f769c8 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 5e1ee52..79f0733 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 08d275b..0ac1e4d 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 8c60930..dccd841 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 0c9395e..bd58a86 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 025c424..0de8504 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 2e437c4..224ea75 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 06f786b..e583c71 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 282198a..d100f0d 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 df543a4..1bd5f3d 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 2bc6ccc..fb9157a 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 de148fa..cd93f09 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) {