[audio_core] Route audio protocols directly from CFv2 audio_core

This is step 5 of the sequence described at fxbug.dev/90408#c20.

This CL also moves soundplayer out of src/sys/core/meta/core.cml since
soundplayer is not included in all products (such as recovery images).
This change is necessary in this CL because soundplayer depends on
audio_core, which is not in all products and therefore is not in
core.cml.

Bug: 90408
Change-Id: Icaa1daf22ef03c51f7325630003578e3debe1e10
Reviewed-on: https://fuchsia-review.googlesource.com/c/fuchsia/+/665949
Commit-Queue: Tom Bergan <tombergan@google.com>
Reviewed-by: Marie Janssen <jamuraa@google.com>
Reviewed-by: Alper Gungormusler <alperg@google.com>
Reviewed-by: Dale Sather <dalesat@google.com>
Reviewed-by: Yuan Zhi <yuanzhi@google.com>
Reviewed-by: Martin Puryear <mpuryear@google.com>
Reviewed-by: Aaron Wood <aaronwood@google.com>
diff --git a/products/common/workstation.gni b/products/common/workstation.gni
index 807287e..9bbfb2e 100644
--- a/products/common/workstation.gni
+++ b/products/common/workstation.gni
@@ -131,7 +131,11 @@
 product_bootfs_labels += [ "//bundles/drivers:usb-peripheral-stack" ]
 product_bootfs_labels -= [ "//bundles/drivers:usb-peripheral-stack" ]
 
-core_realm_shards += [ "//src/media/codec:codec_factory_shard" ]
+# Shards for media.
+core_realm_shards += [
+  "//src/media/codec:codec_factory_shard",
+  "//src/media/audio/audio_core/v2:core_shard",
+]
 
 # Enable input injection for testing through `fuchsia.input.injection.InputDeviceRegistry`.
 use_modern_input_injection = true
diff --git a/products/core.gni b/products/core.gni
index 0451e6f..7d70fbb 100644
--- a/products/core.gni
+++ b/products/core.gni
@@ -29,6 +29,7 @@
   "//src/devices/bin/driver_playground:driver-playground-core-shard",
   "//src/developer/sshd-host:core_shard",
   "//src/media/audio/audio_core/v2:core_shard",
+  "//src/media/sounds/soundplayer:core_shard",
   "//src/settings/service:setui_service_core_shard",
   "//src/sys/pkg/bin/system-update-checker:system-update-checker-core-shard",
   "//src/sys/pkg/bin/system-updater:system-updater-core-shard",
@@ -48,7 +49,6 @@
   "//src/connectivity/bluetooth:core",
   "//src/connectivity/wlan:packages",
   "//src/devices/sysmem/bin/sysmem_connector",
-  "//src/media/audio/bundles:audio_config",
   "//src/settings/service:setui_service",
 ]
 
diff --git a/products/speaker.gni b/products/speaker.gni
index 52932f9..8cc3849 100644
--- a/products/speaker.gni
+++ b/products/speaker.gni
@@ -31,7 +31,6 @@
   "//src/intl/intl_services/config:sysmgr_small",
   "//src/intl/intl_services/config:sysmgr_small_timezones",
   "//src/media/audio/bundles:services",
-  "//src/media/audio/bundles:audio_config",
   "//src/settings/service:setui_service",
   "//src/sys/activity",
 ]
diff --git a/products/terminal.gni b/products/terminal.gni
index bc83aa1..8126ead 100644
--- a/products/terminal.gni
+++ b/products/terminal.gni
@@ -64,7 +64,10 @@
 # QEMU images generated for the SDK, but in cache, so they can be updated.
 legacy_cache_package_labels += [ "//sdk/bundles:tools" ]
 
-core_realm_shards += [ "//src/media/codec:codec_factory_shard" ]
+core_realm_shards += [
+  "//src/media/codec:codec_factory_shard",
+  "//src/media/audio/audio_core/v2:core_shard",
+]
 
 # Add cfv2 sl4f to base.
 core_realm_shards += [ "//src/testing/sl4f:sl4f_terminal_core_shard" ]
diff --git a/src/connectivity/bluetooth/profiles/bt-a2dp/meta/bt-a2dp-common.core_shard.cml b/src/connectivity/bluetooth/profiles/bt-a2dp/meta/bt-a2dp-common.core_shard.cml
index a5d0fe6..04c92be 100644
--- a/src/connectivity/bluetooth/profiles/bt-a2dp/meta/bt-a2dp-common.core_shard.cml
+++ b/src/connectivity/bluetooth/profiles/bt-a2dp/meta/bt-a2dp-common.core_shard.cml
@@ -17,7 +17,6 @@
     offer: [
         {
             protocol: [
-                "fuchsia.media.AudioDeviceEnumerator",
                 "fuchsia.media.SessionAudioConsumerFactory",
                 "fuchsia.media.sessions2.Discovery",
                 "fuchsia.media.sessions2.Publisher",
@@ -34,6 +33,11 @@
             to: "#bt-a2dp",
         },
         {
+            protocol: [ "fuchsia.media.AudioDeviceEnumerator" ],
+            from: "#audio_core",
+            to: [ "#bt-a2dp" ],
+        },
+        {
             protocol: [ "fuchsia.bluetooth.bredr.Profile" ],
             from: "#bluetooth-core",
             to: [ "#bt-a2dp" ],
diff --git a/src/connectivity/bluetooth/profiles/bt-hfp-audio-gateway/meta/bt-hfp-audio-gateway.core_shard.cml b/src/connectivity/bluetooth/profiles/bt-hfp-audio-gateway/meta/bt-hfp-audio-gateway.core_shard.cml
index 1c71ecb..002c7dd 100644
--- a/src/connectivity/bluetooth/profiles/bt-hfp-audio-gateway/meta/bt-hfp-audio-gateway.core_shard.cml
+++ b/src/connectivity/bluetooth/profiles/bt-hfp-audio-gateway/meta/bt-hfp-audio-gateway.core_shard.cml
@@ -30,9 +30,8 @@
         },
         {
             protocol: [ "fuchsia.media.AudioDeviceEnumerator" ],
-            from: "self",
+            from: "#audio_core",
             to: [ "#bt-hfp-audio-gateway" ],
-            dependency: "weak_for_migration",
         },
         {
             protocol: [ "fuchsia.bluetooth.bredr.Profile" ],
diff --git a/src/media/audio/audio_core/meta/audio_core.core_shard.base.cml b/src/media/audio/audio_core/meta/audio_core.core_shard.base.cml
index cc16bbf..6203b8c 100644
--- a/src/media/audio/audio_core/meta/audio_core.core_shard.base.cml
+++ b/src/media/audio/audio_core/meta/audio_core.core_shard.base.cml
@@ -53,5 +53,19 @@
             from: "parent",
             to: "#audio_core",
         },
+        {
+            protocol: [
+                "fuchsia.media.ActivityReporter",
+                "fuchsia.media.Audio",
+                "fuchsia.media.audio.EffectsController",
+                "fuchsia.media.AudioCore",
+                "fuchsia.media.AudioDeviceEnumerator",
+                "fuchsia.media.ProfileProvider",
+                "fuchsia.media.UsageGainReporter",
+                "fuchsia.media.UsageReporter",
+            ],
+            from: "#audio_core",
+            to: "#session-manager",
+        },
     ],
 }
diff --git a/src/media/audio/drivers/configurator/meta/component.core_shard.cml b/src/media/audio/drivers/configurator/meta/component.core_shard.cml
index 2b56bf7..c7e3b51 100644
--- a/src/media/audio/drivers/configurator/meta/component.core_shard.cml
+++ b/src/media/audio/drivers/configurator/meta/component.core_shard.cml
@@ -17,7 +17,7 @@
         },
         {
             protocol: [ "fuchsia.media.AudioDeviceEnumerator" ],
-            from: "self",
+            from: "#audio_core",
             to: [ "#configurator" ],
         },
         {
diff --git a/src/media/sounds/soundplayer/BUILD.gn b/src/media/sounds/soundplayer/BUILD.gn
index c253038..b189820 100644
--- a/src/media/sounds/soundplayer/BUILD.gn
+++ b/src/media/sounds/soundplayer/BUILD.gn
@@ -3,6 +3,7 @@
 # found in the LICENSE file.
 
 import("//build/components.gni")
+import("//src/sys/core/build/core_shard.gni")
 
 fuchsia_package_with_single_component("soundplayer") {
   manifest = "meta/soundplayer.cml"
@@ -121,3 +122,7 @@
 fuchsia_test_package("soundplayer-tests") {
   test_components = [ ":soundplayer-tests-driver" ]
 }
+
+core_shard("core_shard") {
+  shard_file = "meta/soundplayer.core_shard.cml"
+}
diff --git a/src/media/sounds/soundplayer/meta/soundplayer.core_shard.cml b/src/media/sounds/soundplayer/meta/soundplayer.core_shard.cml
new file mode 100644
index 0000000..4524ff3
--- /dev/null
+++ b/src/media/sounds/soundplayer/meta/soundplayer.core_shard.cml
@@ -0,0 +1,30 @@
+// Copyright 2022 The Fuchsia Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+{
+    children: [
+        {
+            name: "soundplayer",
+            url: "fuchsia-pkg://fuchsia.com/soundplayer#meta/soundplayer.cm",
+        },
+    ],
+    use: [
+        // Route sound player APIs to CFv1 realm.
+        {
+            protocol: "fuchsia.media.sounds.Player",
+            from: "#soundplayer",
+        },
+    ],
+    offer: [
+        {
+            protocol: [ "fuchsia.logger.LogSink" ],
+            from: "parent",
+            to: "#soundplayer",
+        },
+        {
+            protocol: [ "fuchsia.media.Audio" ],
+            from: "#audio_core",
+            to: "#soundplayer",
+        },
+    ],
+}
diff --git a/src/session/bin/session_manager/meta/session_manager.cml b/src/session/bin/session_manager/meta/session_manager.cml
index 181b597..ac3ac61b 100644
--- a/src/session/bin/session_manager/meta/session_manager.cml
+++ b/src/session/bin/session_manager/meta/session_manager.cml
@@ -69,9 +69,6 @@
                 "fuchsia.location.namedplace.RegulatoryRegionConfigurator",
                 "fuchsia.location.namedplace.RegulatoryRegionWatcher",
                 "fuchsia.lowpan.bootstrap.Thread",
-                "fuchsia.media.ActivityReporter",
-                "fuchsia.media.audio.EffectsController",
-                "fuchsia.media.AudioCore",
                 "fuchsia.media.drm.PlayReady",
                 "fuchsia.media.drm.Widevine",
                 "fuchsia.media.SessionAudioConsumerFactory",
@@ -79,8 +76,6 @@
                 "fuchsia.media.sessions2.Discovery",
                 "fuchsia.media.sessions2.Publisher",
                 "fuchsia.media.sounds.Player",
-                "fuchsia.media.UsageGainReporter",
-                "fuchsia.media.UsageReporter",
                 "fuchsia.net.http.Loader",
                 "fuchsia.net.interfaces.State",
                 "fuchsia.net.mdns.Publisher",
@@ -255,6 +250,21 @@
             to: "#session",
         },
         {
+            // Routed to session-manager via audio_core
+            protocol: [
+                "fuchsia.media.ActivityReporter",
+                "fuchsia.media.Audio",
+                "fuchsia.media.audio.EffectsController",
+                "fuchsia.media.AudioCore",
+                "fuchsia.media.AudioDeviceEnumerator",
+                "fuchsia.media.ProfileProvider",
+                "fuchsia.media.UsageGainReporter",
+                "fuchsia.media.UsageReporter",
+            ],
+            from: "parent",
+            to: "#session",
+        },
+        {
             // Routed to session-manager from core.cml in all products.
             // i.e. not via a core realm shard.
             protocol: [
@@ -267,9 +277,6 @@
                 "fuchsia.intl.PropertyProvider",
                 "fuchsia.intl.TimeZones",
                 "fuchsia.logger.LogSink",
-                "fuchsia.media.Audio",
-                "fuchsia.media.AudioDeviceEnumerator",
-                "fuchsia.media.ProfileProvider",
                 "fuchsia.metrics.MetricEventLoggerFactory",
                 "fuchsia.net.name.Lookup",
                 "fuchsia.posix.socket.Provider",
diff --git a/src/session/bin/session_manager/meta/workstation.core_shard.cml b/src/session/bin/session_manager/meta/workstation.core_shard.cml
index 6c8a1f4..6a5e0be 100644
--- a/src/session/bin/session_manager/meta/workstation.core_shard.cml
+++ b/src/session/bin/session_manager/meta/workstation.core_shard.cml
@@ -5,14 +5,16 @@
 {
     offer: [
         {
-            protocol: [
-                "fuchsia.media.AudioCore",
-                "fuchsia.ui.input.PointerCaptureListenerRegistry",
-            ],
+            protocol: [ "fuchsia.ui.input.PointerCaptureListenerRegistry" ],
             from: "self",
             to: [ "#session-manager" ],
         },
         {
+            protocol: [ "fuchsia.media.AudioCore" ],
+            from: "#audio_core",
+            to: [ "#session-manager" ],
+        },
+        {
             protocol: [
                 "fuchsia.ui.shortcut.Manager",
                 "fuchsia.ui.shortcut.Registry",
diff --git a/src/settings/service/meta/setui_service_base.core_shard.cml b/src/settings/service/meta/setui_service_base.core_shard.cml
index 9c0c086..fa1f341 100644
--- a/src/settings/service/meta/setui_service_base.core_shard.cml
+++ b/src/settings/service/meta/setui_service_base.core_shard.cml
@@ -50,9 +50,7 @@
         },
         {
             protocol: [
-                "fuchsia.media.AudioCore",
                 "fuchsia.media.sessions2.Discovery",
-                "fuchsia.media.UsageReporter",
                 "fuchsia.recovery.policy.Device",
                 "fuchsia.tracing.provider.Registry",
                 "fuchsia.ui.policy.DeviceListenerRegistry",
@@ -67,6 +65,14 @@
             to: "#setui_service",
         },
         {
+            protocol: [
+                "fuchsia.media.AudioCore",
+                "fuchsia.media.UsageReporter",
+            ],
+            from: "#audio_core",
+            to: "#setui_service",
+        },
+        {
             protocol: "fuchsia.stash.Store",
             from: "#stash",
             to: "#setui_service",
diff --git a/src/sys/appmgr/meta/appmgr.core_shard.cml b/src/sys/appmgr/meta/appmgr.core_shard.cml
index 896f8cf..f0c4b71 100644
--- a/src/sys/appmgr/meta/appmgr.core_shard.cml
+++ b/src/sys/appmgr/meta/appmgr.core_shard.cml
@@ -39,14 +39,9 @@
                 "fuchsia.intl.PropertyProvider",
                 "fuchsia.intl.TimeZones",
                 "fuchsia.lowpan.device.Lookup",
-                "fuchsia.media.Audio",
-                "fuchsia.media.AudioCore",
-                "fuchsia.media.AudioDeviceEnumerator",
-                "fuchsia.media.ProfileProvider",
                 "fuchsia.media.SessionAudioConsumerFactory",
                 "fuchsia.media.sessions2.Discovery",
                 "fuchsia.media.sessions2.Publisher",
-                "fuchsia.media.UsageReporter",
                 "fuchsia.power.manager.DriverManagerRegistration",
                 "fuchsia.process.Resolver",
                 "fuchsia.recovery.policy.Device",
@@ -175,10 +170,6 @@
             from: "#network",
         },
         {
-            protocol: "fuchsia.media.sounds.Player",
-            from: "#soundplayer",
-        },
-        {
             protocol: "fuchsia.fonts.Provider",
             from: "#font_provider",
         },
@@ -435,8 +426,6 @@
                 "fuchsia.feedback.CrashReporter",
                 "fuchsia.intl.PropertyProvider",
                 "fuchsia.intl.TimeZones",
-                "fuchsia.media.AudioDeviceEnumerator",
-                "fuchsia.media.ProfileProvider",
                 "fuchsia.sys.Launcher",
                 "fuchsia.ui.composition.Allocator",
                 "fuchsia.ui.composition.Flatland",
@@ -454,15 +443,6 @@
             to: "#session-manager",
         },
         {
-            protocol: [ "fuchsia.media.Audio" ],
-            from: "self",
-            to: [
-                "#session-manager",
-                "#soundplayer",
-            ],
-            dependency: "weak_for_migration",
-        },
-        {
             protocol: [ "fuchsia.bluetooth.snoop.Snoop" ],
             from: "self",
             to: "#bluetooth-core",
diff --git a/src/sys/core/meta/core.cml b/src/sys/core/meta/core.cml
index 8c59f28..9b72d28 100644
--- a/src/sys/core/meta/core.cml
+++ b/src/sys/core/meta/core.cml
@@ -174,11 +174,6 @@
             url: "fuchsia-pkg://fuchsia.com/pkg-resolver#meta/pkg-resolver.cm",
         },
         {
-            name: "soundplayer",
-            url: "fuchsia-pkg://fuchsia.com/soundplayer#meta/soundplayer.cm",
-            environment: "#full-resolver-env",
-        },
-        {
             name: "vulkan_loader",
             url: "fuchsia-pkg://fuchsia.com/vulkan_loader#meta/vulkan_loader.cm",
             environment: "#full-resolver-env",
@@ -426,7 +421,6 @@
                 "#remote-control",
                 "#sampler",
                 "#session-manager",
-                "#soundplayer",
                 "#ssh-key-manager",
                 "#starnix_manager",
                 "#stash",
diff --git a/src/sys/test_manager/meta/test_manager.core_shard.cml b/src/sys/test_manager/meta/test_manager.core_shard.cml
index 80b60b7..f0f722f 100644
--- a/src/sys/test_manager/meta/test_manager.core_shard.cml
+++ b/src/sys/test_manager/meta/test_manager.core_shard.cml
@@ -45,9 +45,6 @@
             protocol: [
                 "fuchsia.feedback.CrashReporter",
                 "fuchsia.intl.PropertyProvider",
-                "fuchsia.media.Audio",
-                "fuchsia.media.AudioDeviceEnumerator",
-                "fuchsia.media.ProfileProvider",
                 "fuchsia.sys.Environment",
                 "fuchsia.sys.Loader",
             ],
@@ -56,6 +53,15 @@
             dependency: "weak_for_migration",
         },
         {
+            protocol: [
+                "fuchsia.media.Audio",
+                "fuchsia.media.AudioDeviceEnumerator",
+                "fuchsia.media.ProfileProvider",
+            ],
+            from: "#audio_core",
+            to: "#test_manager",
+        },
+        {
             protocol: [ "fuchsia.component.resolution.Resolver" ],
             from: "#full-resolver",
             to: "#test_manager",
diff --git a/src/testing/sl4f/meta/sl4f.core_shard.cml b/src/testing/sl4f/meta/sl4f.core_shard.cml
index 6aefeda..f630e91 100644
--- a/src/testing/sl4f/meta/sl4f.core_shard.cml
+++ b/src/testing/sl4f/meta/sl4f.core_shard.cml
@@ -173,7 +173,6 @@
                 "fuchsia.developer.tiles.Controller", // test-only
                 "fuchsia.input.injection.InputDeviceRegistry", // test-only
                 "fuchsia.lowpan.device.Lookup", // #appmgr
-                "fuchsia.media.ProfileProvider", // #appmgr
                 "fuchsia.sys.Launcher", // #appmgr
                 "fuchsia.tracing.controller.Controller", // #appmgr
                 "fuchsia.tracing.provider.Registry", // #appmgr
@@ -188,6 +187,11 @@
             dependency: "weak_for_migration",
         },
         {
+            protocol: [ "fuchsia.media.ProfileProvider" ],
+            from: "#audio_core",
+            to: "#sl4f",
+        },
+        {
             protocol: [
                 "fuchsia.session.Launcher",
                 "fuchsia.session.Restarter",