Create camera-effects-still-portrait

See: go/camera-effects-still-portrait-1p

Relnote: create a new camera-effects-still-portrait artifact. It provide a Portrait mode calgorithm that can be applied to CameraX output

Bug: 249595984
Test: manual test and ./gradlew bOS
Change-Id: Id28498699c055d22a25391e61bb0689902e3fc0b
diff --git a/camera/camera-effects-still-portrait/api/current.txt b/camera/camera-effects-still-portrait/api/current.txt
new file mode 100644
index 0000000..e6f50d0
--- /dev/null
+++ b/camera/camera-effects-still-portrait/api/current.txt
@@ -0,0 +1 @@
+// Signature format: 4.0
diff --git a/camera/camera-effects-still-portrait/api/public_plus_experimental_current.txt b/camera/camera-effects-still-portrait/api/public_plus_experimental_current.txt
new file mode 100644
index 0000000..e6f50d0
--- /dev/null
+++ b/camera/camera-effects-still-portrait/api/public_plus_experimental_current.txt
@@ -0,0 +1 @@
+// Signature format: 4.0
diff --git a/camera/camera-effects-still-portrait/api/res-current.txt b/camera/camera-effects-still-portrait/api/res-current.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/camera/camera-effects-still-portrait/api/res-current.txt
diff --git a/camera/camera-effects-still-portrait/api/restricted_current.txt b/camera/camera-effects-still-portrait/api/restricted_current.txt
new file mode 100644
index 0000000..e6f50d0
--- /dev/null
+++ b/camera/camera-effects-still-portrait/api/restricted_current.txt
@@ -0,0 +1 @@
+// Signature format: 4.0
diff --git a/camera/camera-effects-still-portrait/build.gradle b/camera/camera-effects-still-portrait/build.gradle
new file mode 100644
index 0000000..8925e65
--- /dev/null
+++ b/camera/camera-effects-still-portrait/build.gradle
@@ -0,0 +1,42 @@
+/*
+ * Copyright 2022 The Android Open Source Project
+ *
+ * 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.
+ */
+import androidx.build.Publish
+import androidx.build.RunApiTasks
+
+plugins {
+    id("AndroidXPlugin")
+    id("com.android.library")
+    id("kotlin-android")
+}
+dependencies {
+    api(project(":camera:camera-core"))
+}
+android {
+    defaultConfig {
+        multiDexEnabled = true
+    }
+    testOptions.unitTests.includeAndroidResources = true
+    namespace "androidx.camera.effects.stillportrait"
+}
+androidx {
+    name = "Jetpack Camera Portrait Still Effect Library"
+    publish = Publish.SNAPSHOT_ONLY
+    mavenGroup = LibraryGroups.CAMERA
+    inceptionYear = "2022"
+    runApiTasks = new RunApiTasks.Yes()
+    description = "A post-processing effect that works with CameraX Library, providing a portrait" +
+            " mode effect that applies to still image captures."
+}
diff --git a/camera/camera-effects-still-portrait/src/main/java/androidx/camera/effects/stillportrait/StillPortrait.java b/camera/camera-effects-still-portrait/src/main/java/androidx/camera/effects/stillportrait/StillPortrait.java
new file mode 100644
index 0000000..5341a46
--- /dev/null
+++ b/camera/camera-effects-still-portrait/src/main/java/androidx/camera/effects/stillportrait/StillPortrait.java
@@ -0,0 +1,50 @@
+/*
+ * Copyright 2022 The Android Open Source Project
+ *
+ * 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.
+ */
+
+package androidx.camera.effects.stillportrait;
+
+import android.os.Build;
+
+import androidx.annotation.NonNull;
+import androidx.annotation.RequiresApi;
+import androidx.annotation.RestrictTo;
+import androidx.camera.core.CameraEffect;
+import androidx.camera.core.SurfaceProcessor;
+import androidx.camera.core.UseCase;
+
+import java.util.concurrent.Executor;
+
+/**
+ * Provides a portrait post-processing effect.
+ *
+ * @hide
+ */
+@RequiresApi(api = Build.VERSION_CODES.LOLLIPOP)
+@RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
+public class StillPortrait extends CameraEffect {
+
+    /**
+     * @param targets           the target {@link UseCase} to which this effect should be applied.
+     * @param processorExecutor the {@link Executor} on which the processor will be invoked.
+     * @param surfaceProcessor  a {@link SurfaceProcessor} implementation.
+     */
+    protected StillPortrait(int targets,
+            @NonNull Executor processorExecutor,
+            @NonNull SurfaceProcessor surfaceProcessor) {
+        super(targets, processorExecutor, surfaceProcessor);
+        // TODO: implement this.
+    }
+}
diff --git a/docs-tip-of-tree/build.gradle b/docs-tip-of-tree/build.gradle
index 43aa0c6..6522dc4 100644
--- a/docs-tip-of-tree/build.gradle
+++ b/docs-tip-of-tree/build.gradle
@@ -42,6 +42,7 @@
     docs(project(":camera:camera-camera2"))
     docs(project(":camera:camera-core"))
     docs(project(":camera:camera-effects"))
+    docs(project(":camera:camera-effects-still-portrait"))
     docs(project(":camera:camera-extensions"))
     stubs(fileTree(dir: "../camera/camera-extensions-stub", include: ["camera-extensions-stub.jar"]))
     docs(project(":camera:camera-mlkit-vision"))
diff --git a/settings.gradle b/settings.gradle
index 4787773..519cfb3 100644
--- a/settings.gradle
+++ b/settings.gradle
@@ -415,6 +415,7 @@
 includeProject(":camera:camera-camera2-pipe-testing", [BuildType.CAMERA])
 includeProject(":camera:camera-core", [BuildType.CAMERA])
 includeProject(":camera:camera-effects", [BuildType.CAMERA])
+includeProject(":camera:camera-effects-still-portrait", [BuildType.CAMERA])
 includeProject(":camera:camera-extensions", [BuildType.CAMERA])
 includeProject(":camera:camera-extensions-stub", [BuildType.CAMERA])
 includeProject(":camera:camera-lifecycle", [BuildType.CAMERA])