diff options
19 files changed, 244 insertions, 123 deletions
diff --git a/Android.bp b/Android.bp index f8e5e8e6f587..62ac6e7f78c7 100644 --- a/Android.bp +++ b/Android.bp @@ -628,7 +628,6 @@ java_defaults { // in favor of an API stubs dependency in java_library "framework" below. "mimemap", "av-types-aidl-java", - "mediatranscoding_aidl_interface-java", "soundtrigger_middleware-aidl-java", "modules-utils-os", ], diff --git a/apex/media/framework/Android.bp b/apex/media/framework/Android.bp index 811a7002413f..60dea079a36b 100644 --- a/apex/media/framework/Android.bp +++ b/apex/media/framework/Android.bp @@ -36,7 +36,8 @@ java_library { "framework_media_annotation", ], static_libs: [ - "exoplayer2-extractor" + "exoplayer2-extractor", + "mediatranscoding_aidl_interface-java", ], jarjar_rules: "jarjar_rules.txt", @@ -57,10 +58,12 @@ java_library { filegroup { name: "updatable-media-srcs", srcs: [ + "java/android/media/MediaFrameworkInitializer.java", ":media-aidl-srcs", ":mediaparceledlistslice-java-srcs", ":mediaparser-srcs", ":mediasession2-java-srcs", + ":mediatranscoding-srcs", ], visibility: ["//frameworks/base"], } @@ -98,6 +101,17 @@ filegroup { path: "java", } +filegroup { + name: "mediatranscoding-srcs", + srcs: [ + "java/android/media/ApplicationMediaCapabilities.java", + "java/android/media/MediaFeature.java", + "java/android/media/MediaTranscodeManager.java", + "java/android/media/MediaTranscodingException.java", + ], + path: "java", +} + java_sdk_library { name: "framework-media", defaults: ["framework-module-defaults"], diff --git a/apex/media/framework/api/current.txt b/apex/media/framework/api/current.txt index 0cc8e52f6411..ce3bcbede4c7 100644 --- a/apex/media/framework/api/current.txt +++ b/apex/media/framework/api/current.txt @@ -1,6 +1,26 @@ // Signature format: 2.0 package android.media { + public final class ApplicationMediaCapabilities implements android.os.Parcelable { + method @NonNull public static android.media.ApplicationMediaCapabilities createFromXml(@NonNull org.xmlpull.v1.XmlPullParser); + method public int describeContents(); + method @NonNull public java.util.List<java.lang.String> getSupportedHdrTypes(); + method @NonNull public java.util.List<java.lang.String> getSupportedVideoMimeTypes(); + method public boolean isHdrTypeSupported(@NonNull String); + method public boolean isSlowMotionSupported(); + method public boolean isVideoMimeTypeSupported(@NonNull String); + method public void writeToParcel(@NonNull android.os.Parcel, int); + field @NonNull public static final android.os.Parcelable.Creator<android.media.ApplicationMediaCapabilities> CREATOR; + } + + public static final class ApplicationMediaCapabilities.Builder { + ctor public ApplicationMediaCapabilities.Builder(); + method @NonNull public android.media.ApplicationMediaCapabilities.Builder addSupportedHdrType(@NonNull String); + method @NonNull public android.media.ApplicationMediaCapabilities.Builder addSupportedVideoMimeType(@NonNull String); + method @NonNull public android.media.ApplicationMediaCapabilities build(); + method @NonNull public android.media.ApplicationMediaCapabilities.Builder setSlowMotionSupported(boolean); + } + public class MediaController2 implements java.lang.AutoCloseable { method public void cancelSessionCommand(@NonNull Object); method public void close(); @@ -25,6 +45,17 @@ package android.media { method @Nullable public android.media.Session2Command.Result onSessionCommand(@NonNull android.media.MediaController2, @NonNull android.media.Session2Command, @Nullable android.os.Bundle); } + public final class MediaFeature { + ctor public MediaFeature(); + } + + public static final class MediaFeature.HdrType { + field public static final String DOLBY_VISION = "android.media.feature.hdr.dolby_vision"; + field public static final String HDR10 = "android.media.feature.hdr.hdr10"; + field public static final String HDR10_PLUS = "android.media.feature.hdr.hdr10_plus"; + field public static final String HLG = "android.media.feature.hdr.hlg"; + } + public final class MediaParser { method public boolean advance(@NonNull android.media.MediaParser.SeekableInputReader) throws java.io.IOException; method @NonNull public static android.media.MediaParser create(@NonNull android.media.MediaParser.OutputConsumer, @NonNull java.lang.String...); @@ -170,6 +201,12 @@ package android.media { method public int getNotificationId(); } + public class MediaTranscodingException extends java.lang.Exception { + } + + public static final class MediaTranscodingException.ServiceNotAvailableException extends android.media.MediaTranscodingException { + } + public final class Session2Command implements android.os.Parcelable { ctor public Session2Command(int); ctor public Session2Command(@NonNull String, @Nullable android.os.Bundle); diff --git a/apex/media/framework/api/module-lib-current.txt b/apex/media/framework/api/module-lib-current.txt index 2b69863675a5..ad9114fa23cf 100644 --- a/apex/media/framework/api/module-lib-current.txt +++ b/apex/media/framework/api/module-lib-current.txt @@ -1,6 +1,11 @@ // Signature format: 2.0 package android.media { + public class MediaFrameworkInitializer { + method public static void registerServiceWrappers(); + method public static void setMediaServiceManager(@NonNull android.media.MediaServiceManager); + } + @Deprecated public final class MediaParceledListSlice<T extends android.os.Parcelable> implements android.os.Parcelable { ctor @Deprecated public MediaParceledListSlice(@NonNull java.util.List<T>); method @Deprecated public int describeContents(); diff --git a/apex/media/framework/api/system-current.txt b/apex/media/framework/api/system-current.txt index d802177e249b..89cf77c5dbf4 100644 --- a/apex/media/framework/api/system-current.txt +++ b/apex/media/framework/api/system-current.txt @@ -1 +1,67 @@ // Signature format: 2.0 +package android.media { + + public final class MediaTranscodeManager { + method @NonNull public android.media.MediaTranscodeManager.TranscodingSession enqueueRequest(@NonNull android.media.MediaTranscodeManager.TranscodingRequest, @NonNull java.util.concurrent.Executor, @NonNull android.media.MediaTranscodeManager.OnTranscodingFinishedListener) throws java.io.FileNotFoundException, android.media.MediaTranscodingException.ServiceNotAvailableException; + field public static final int PRIORITY_REALTIME = 1; // 0x1 + field public static final int TRANSCODING_TYPE_VIDEO = 1; // 0x1 + } + + @java.lang.FunctionalInterface public static interface MediaTranscodeManager.OnTranscodingFinishedListener { + method public void onTranscodingFinished(@NonNull android.media.MediaTranscodeManager.TranscodingSession); + } + + public static final class MediaTranscodeManager.TranscodingRequest { + method public int getClientPid(); + method public int getClientUid(); + method @NonNull public android.net.Uri getDestinationUri(); + method public int getPriority(); + method @NonNull public android.net.Uri getSourceUri(); + method public int getType(); + method @Nullable public android.media.MediaFormat getVideoTrackFormat(); + } + + public static final class MediaTranscodeManager.TranscodingRequest.Builder { + ctor public MediaTranscodeManager.TranscodingRequest.Builder(); + method @NonNull public android.media.MediaTranscodeManager.TranscodingRequest build(); + method @NonNull public android.media.MediaTranscodeManager.TranscodingRequest.Builder setClientPid(int); + method @NonNull public android.media.MediaTranscodeManager.TranscodingRequest.Builder setClientUid(int); + method @NonNull public android.media.MediaTranscodeManager.TranscodingRequest.Builder setDestinationUri(@NonNull android.net.Uri); + method @NonNull public android.media.MediaTranscodeManager.TranscodingRequest.Builder setPriority(int); + method @NonNull public android.media.MediaTranscodeManager.TranscodingRequest.Builder setSourceUri(@NonNull android.net.Uri); + method @NonNull public android.media.MediaTranscodeManager.TranscodingRequest.Builder setType(int); + method @NonNull public android.media.MediaTranscodeManager.TranscodingRequest.Builder setVideoTrackFormat(@NonNull android.media.MediaFormat); + } + + public static class MediaTranscodeManager.TranscodingRequest.MediaFormatResolver { + ctor public MediaTranscodeManager.TranscodingRequest.MediaFormatResolver(); + method @Nullable public android.media.MediaFormat resolveVideoFormat(); + method @NonNull public android.media.MediaTranscodeManager.TranscodingRequest.MediaFormatResolver setClientCapabilities(@NonNull android.media.ApplicationMediaCapabilities); + method @NonNull public android.media.MediaTranscodeManager.TranscodingRequest.MediaFormatResolver setSourceVideoFormatHint(@NonNull android.media.MediaFormat); + method public boolean shouldTranscode(); + } + + public static final class MediaTranscodeManager.TranscodingSession { + method public void cancel(); + method @IntRange(from=0, to=100) public int getProgress(); + method public int getResult(); + method public int getSessionId(); + method public int getStatus(); + method public void setOnProgressUpdateListener(@NonNull java.util.concurrent.Executor, @Nullable android.media.MediaTranscodeManager.TranscodingSession.OnProgressUpdateListener); + method public void setOnProgressUpdateListener(int, @NonNull java.util.concurrent.Executor, @Nullable android.media.MediaTranscodeManager.TranscodingSession.OnProgressUpdateListener); + field public static final int RESULT_CANCELED = 4; // 0x4 + field public static final int RESULT_ERROR = 3; // 0x3 + field public static final int RESULT_NONE = 1; // 0x1 + field public static final int RESULT_SUCCESS = 2; // 0x2 + field public static final int STATUS_FINISHED = 3; // 0x3 + field public static final int STATUS_PAUSED = 4; // 0x4 + field public static final int STATUS_PENDING = 1; // 0x1 + field public static final int STATUS_RUNNING = 2; // 0x2 + } + + @java.lang.FunctionalInterface public static interface MediaTranscodeManager.TranscodingSession.OnProgressUpdateListener { + method public void onProgressUpdate(@NonNull android.media.MediaTranscodeManager.TranscodingSession, @IntRange(from=0, to=100) int); + } + +} + diff --git a/media/java/android/media/ApplicationMediaCapabilities.java b/apex/media/framework/java/android/media/ApplicationMediaCapabilities.java index 36f6b94b16ad..36f6b94b16ad 100644 --- a/media/java/android/media/ApplicationMediaCapabilities.java +++ b/apex/media/framework/java/android/media/ApplicationMediaCapabilities.java diff --git a/media/java/android/media/MediaFeature.java b/apex/media/framework/java/android/media/MediaFeature.java index 0e461888a0e3..0e461888a0e3 100644 --- a/media/java/android/media/MediaFeature.java +++ b/apex/media/framework/java/android/media/MediaFeature.java diff --git a/apex/media/framework/java/android/media/MediaFrameworkInitializer.java b/apex/media/framework/java/android/media/MediaFrameworkInitializer.java new file mode 100644 index 000000000000..813ad7b43932 --- /dev/null +++ b/apex/media/framework/java/android/media/MediaFrameworkInitializer.java @@ -0,0 +1,78 @@ +/* + * Copyright 2020 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 android.media; + +import android.annotation.NonNull; +import android.annotation.SystemApi; +import android.annotation.SystemApi.Client; +import android.media.MediaTranscodeManager; +import android.app.SystemServiceRegistry; +import android.content.Context; + +/** + * Class for performing registration for all media services on com.android.media apex. + * + * @hide + */ +@SystemApi(client = Client.MODULE_LIBRARIES) +public class MediaFrameworkInitializer { + private MediaFrameworkInitializer() { + } + + private static volatile MediaServiceManager sMediaServiceManager; + + /** + * Sets an instance of {@link MediaServiceManager} that allows + * the media mainline module to register/obtain media binder services. This is called + * by the platform during the system initialization. + * + * @param mediaServiceManager instance of {@link MediaServiceManager} that allows + * the media mainline module to register/obtain media binder services. + */ + public static void setMediaServiceManager( + @NonNull MediaServiceManager mediaServiceManager) { + if (sMediaServiceManager != null) { + throw new IllegalStateException("setMediaServiceManager called twice!"); + } + + if (mediaServiceManager == null) { + throw new NullPointerException("mediaServiceManager is null!"); + } + + sMediaServiceManager = mediaServiceManager; + } + + /** @hide */ + public static MediaServiceManager getMediaServiceManager() { + return sMediaServiceManager; + } + + /** + * Called by {@link SystemServiceRegistry}'s static initializer and registers all media + * services to {@link Context}, so that {@link Context#getSystemService} can return them. + * + * @throws IllegalStateException if this is called from anywhere besides + * {@link SystemServiceRegistry} + */ + public static void registerServiceWrappers() { + SystemServiceRegistry.registerContextAwareService( + Context.MEDIA_TRANSCODING_SERVICE, + MediaTranscodeManager.class, + context -> new MediaTranscodeManager(context) + ); + } +} diff --git a/media/java/android/media/MediaTranscodeManager.java b/apex/media/framework/java/android/media/MediaTranscodeManager.java index 705da19b65e4..d449289f156f 100644 --- a/media/java/android/media/MediaTranscodeManager.java +++ b/apex/media/framework/java/android/media/MediaTranscodeManager.java @@ -28,7 +28,6 @@ import android.content.res.AssetFileDescriptor; import android.net.Uri; import android.os.ParcelFileDescriptor; import android.os.RemoteException; -import android.os.ServiceManager; import android.os.ServiceSpecificException; import android.system.Os; import android.util.Log; @@ -104,8 +103,6 @@ import java.util.concurrent.Executors; public final class MediaTranscodeManager { private static final String TAG = "MediaTranscodeManager"; - private static final String MEDIA_TRANSCODING_SERVICE = "media.transcoding"; - /** Maximum number of retry to connect to the service. */ private static final int CONNECT_SERVICE_RETRY_COUNT = 100; @@ -281,7 +278,10 @@ public final class MediaTranscodeManager { for (int count = 1; count <= retryCount; count++) { Log.d(TAG, "Trying to connect to service. Try count: " + count); IMediaTranscodingService service = IMediaTranscodingService.Stub.asInterface( - ServiceManager.getService(MEDIA_TRANSCODING_SERVICE)); + MediaFrameworkInitializer + .getMediaServiceManager() + .getMediaTranscodingServiceRegisterer() + .get()); if (service != null) { return service; } diff --git a/media/java/android/media/MediaTranscodingException.java b/apex/media/framework/java/android/media/MediaTranscodingException.java index 50cc9c4bae24..50cc9c4bae24 100644 --- a/media/java/android/media/MediaTranscodingException.java +++ b/apex/media/framework/java/android/media/MediaTranscodingException.java diff --git a/core/api/current.txt b/core/api/current.txt index e93d36d6afc8..c11d2bc149ed 100644 --- a/core/api/current.txt +++ b/core/api/current.txt @@ -19446,26 +19446,6 @@ package android.location { package android.media { - public final class ApplicationMediaCapabilities implements android.os.Parcelable { - method @NonNull public static android.media.ApplicationMediaCapabilities createFromXml(@NonNull org.xmlpull.v1.XmlPullParser); - method public int describeContents(); - method @NonNull public java.util.List<java.lang.String> getSupportedHdrTypes(); - method @NonNull public java.util.List<java.lang.String> getSupportedVideoMimeTypes(); - method public boolean isHdrTypeSupported(@NonNull String); - method public boolean isSlowMotionSupported(); - method public boolean isVideoMimeTypeSupported(@NonNull String); - method public void writeToParcel(@NonNull android.os.Parcel, int); - field @NonNull public static final android.os.Parcelable.Creator<android.media.ApplicationMediaCapabilities> CREATOR; - } - - public static final class ApplicationMediaCapabilities.Builder { - ctor public ApplicationMediaCapabilities.Builder(); - method @NonNull public android.media.ApplicationMediaCapabilities.Builder addSupportedHdrType(@NonNull String); - method @NonNull public android.media.ApplicationMediaCapabilities.Builder addSupportedVideoMimeType(@NonNull String); - method @NonNull public android.media.ApplicationMediaCapabilities build(); - method @NonNull public android.media.ApplicationMediaCapabilities.Builder setSlowMotionSupported(boolean); - } - public class AsyncPlayer { ctor public AsyncPlayer(String); method @Deprecated public void play(android.content.Context, android.net.Uri, boolean, int); @@ -21585,17 +21565,6 @@ package android.media { field public static final String TRACKS = "android.media.mediaextractor.ntrk"; } - public final class MediaFeature { - ctor public MediaFeature(); - } - - public static final class MediaFeature.HdrType { - field public static final String DOLBY_VISION = "android.media.feature.hdr.dolby_vision"; - field public static final String HDR10 = "android.media.feature.hdr.hdr10"; - field public static final String HDR10_PLUS = "android.media.feature.hdr.hdr10_plus"; - field public static final String HLG = "android.media.feature.hdr.hlg"; - } - public final class MediaFormat { ctor public MediaFormat(); ctor public MediaFormat(@NonNull android.media.MediaFormat); @@ -22616,12 +22585,6 @@ package android.media { field public static final android.media.MediaTimestamp TIMESTAMP_UNKNOWN; } - public class MediaTranscodingException extends java.lang.Exception { - } - - public static final class MediaTranscodingException.ServiceNotAvailableException extends android.media.MediaTranscodingException { - } - public interface MicrophoneDirection { method public boolean setPreferredMicrophoneDirection(int); method public boolean setPreferredMicrophoneFieldDimension(@FloatRange(from=-1.0, to=1.0) float); diff --git a/core/api/module-lib-current.txt b/core/api/module-lib-current.txt index 8e99d3c7882d..94a6576b08c8 100644 --- a/core/api/module-lib-current.txt +++ b/core/api/module-lib-current.txt @@ -84,6 +84,15 @@ package android.media { field public static final int METADATA_KEY_XMP_OFFSET = 41; // 0x29 } + public class MediaServiceManager { + method @NonNull public android.media.MediaServiceManager.ServiceRegisterer getMediaSessionServiceRegisterer(); + method @NonNull public android.media.MediaServiceManager.ServiceRegisterer getMediaTranscodingServiceRegisterer(); + } + + public static final class MediaServiceManager.ServiceRegisterer { + method @Nullable public android.os.IBinder get(); + } + } package android.media.session { diff --git a/core/api/system-current.txt b/core/api/system-current.txt index 5ef27a3c5620..70400b1abf14 100644 --- a/core/api/system-current.txt +++ b/core/api/system-current.txt @@ -4593,68 +4593,6 @@ package android.media { field @RequiresPermission(android.Manifest.permission.CAPTURE_AUDIO_OUTPUT) public static final int RADIO_TUNER = 1998; // 0x7ce } - public final class MediaTranscodeManager { - method @NonNull public android.media.MediaTranscodeManager.TranscodingSession enqueueRequest(@NonNull android.media.MediaTranscodeManager.TranscodingRequest, @NonNull java.util.concurrent.Executor, @NonNull android.media.MediaTranscodeManager.OnTranscodingFinishedListener) throws java.io.FileNotFoundException, android.media.MediaTranscodingException.ServiceNotAvailableException; - field public static final int PRIORITY_REALTIME = 1; // 0x1 - field public static final int TRANSCODING_TYPE_VIDEO = 1; // 0x1 - } - - @java.lang.FunctionalInterface public static interface MediaTranscodeManager.OnTranscodingFinishedListener { - method public void onTranscodingFinished(@NonNull android.media.MediaTranscodeManager.TranscodingSession); - } - - public static final class MediaTranscodeManager.TranscodingRequest { - method public int getClientPid(); - method public int getClientUid(); - method @NonNull public android.net.Uri getDestinationUri(); - method public int getPriority(); - method @NonNull public android.net.Uri getSourceUri(); - method public int getType(); - method @Nullable public android.media.MediaFormat getVideoTrackFormat(); - } - - public static final class MediaTranscodeManager.TranscodingRequest.Builder { - ctor public MediaTranscodeManager.TranscodingRequest.Builder(); - method @NonNull public android.media.MediaTranscodeManager.TranscodingRequest build(); - method @NonNull public android.media.MediaTranscodeManager.TranscodingRequest.Builder setClientPid(int); - method @NonNull public android.media.MediaTranscodeManager.TranscodingRequest.Builder setClientUid(int); - method @NonNull public android.media.MediaTranscodeManager.TranscodingRequest.Builder setDestinationUri(@NonNull android.net.Uri); - method @NonNull public android.media.MediaTranscodeManager.TranscodingRequest.Builder setPriority(int); - method @NonNull public android.media.MediaTranscodeManager.TranscodingRequest.Builder setSourceUri(@NonNull android.net.Uri); - method @NonNull public android.media.MediaTranscodeManager.TranscodingRequest.Builder setType(int); - method @NonNull public android.media.MediaTranscodeManager.TranscodingRequest.Builder setVideoTrackFormat(@NonNull android.media.MediaFormat); - } - - public static class MediaTranscodeManager.TranscodingRequest.MediaFormatResolver { - ctor public MediaTranscodeManager.TranscodingRequest.MediaFormatResolver(); - method @Nullable public android.media.MediaFormat resolveVideoFormat(); - method @NonNull public android.media.MediaTranscodeManager.TranscodingRequest.MediaFormatResolver setClientCapabilities(@NonNull android.media.ApplicationMediaCapabilities); - method @NonNull public android.media.MediaTranscodeManager.TranscodingRequest.MediaFormatResolver setSourceVideoFormatHint(@NonNull android.media.MediaFormat); - method public boolean shouldTranscode(); - } - - public static final class MediaTranscodeManager.TranscodingSession { - method public void cancel(); - method @IntRange(from=0, to=100) public int getProgress(); - method public int getResult(); - method public int getSessionId(); - method public int getStatus(); - method public void setOnProgressUpdateListener(@NonNull java.util.concurrent.Executor, @Nullable android.media.MediaTranscodeManager.TranscodingSession.OnProgressUpdateListener); - method public void setOnProgressUpdateListener(int, @NonNull java.util.concurrent.Executor, @Nullable android.media.MediaTranscodeManager.TranscodingSession.OnProgressUpdateListener); - field public static final int RESULT_CANCELED = 4; // 0x4 - field public static final int RESULT_ERROR = 3; // 0x3 - field public static final int RESULT_NONE = 1; // 0x1 - field public static final int RESULT_SUCCESS = 2; // 0x2 - field public static final int STATUS_FINISHED = 3; // 0x3 - field public static final int STATUS_PAUSED = 4; // 0x4 - field public static final int STATUS_PENDING = 1; // 0x1 - field public static final int STATUS_RUNNING = 2; // 0x2 - } - - @java.lang.FunctionalInterface public static interface MediaTranscodeManager.TranscodingSession.OnProgressUpdateListener { - method public void onProgressUpdate(@NonNull android.media.MediaTranscodeManager.TranscodingSession, @IntRange(from=0, to=100) int); - } - public class PlayerProxy { method public void pause(); method public void setPan(float); diff --git a/core/java/android/app/ActivityThread.java b/core/java/android/app/ActivityThread.java index 6d564a3ce61c..28834f1c8c42 100644 --- a/core/java/android/app/ActivityThread.java +++ b/core/java/android/app/ActivityThread.java @@ -90,6 +90,7 @@ import android.graphics.Typeface; import android.hardware.display.DisplayManagerGlobal; import android.inputmethodservice.InputMethodService; import android.media.MediaFrameworkInitializer; +import android.media.MediaFrameworkPlatformInitializer; import android.media.MediaServiceManager; import android.net.ConnectivityManager; import android.net.IConnectivityManager; @@ -7701,6 +7702,7 @@ public final class ActivityThread extends ClientTransactionHandler { public static void initializeMainlineModules() { TelephonyFrameworkInitializer.setTelephonyServiceManager(new TelephonyServiceManager()); StatsFrameworkInitializer.setStatsServiceManager(new StatsServiceManager()); + MediaFrameworkPlatformInitializer.setMediaServiceManager(new MediaServiceManager()); MediaFrameworkInitializer.setMediaServiceManager(new MediaServiceManager()); } diff --git a/core/java/android/app/SystemServiceRegistry.java b/core/java/android/app/SystemServiceRegistry.java index 4afbfbf7143c..48d2dfe5cca9 100644 --- a/core/java/android/app/SystemServiceRegistry.java +++ b/core/java/android/app/SystemServiceRegistry.java @@ -104,8 +104,8 @@ import android.location.ILocationManager; import android.location.LocationManager; import android.media.AudioManager; import android.media.MediaFrameworkInitializer; +import android.media.MediaFrameworkPlatformInitializer; import android.media.MediaRouter; -import android.media.MediaTranscodeManager; import android.media.midi.IMidiManager; import android.media.midi.MidiManager; import android.media.musicrecognition.IMusicRecognitionManager; @@ -312,15 +312,6 @@ public final class SystemServiceRegistry { return new AudioManager(ctx); }}); - registerService(Context.MEDIA_TRANSCODING_SERVICE, MediaTranscodeManager.class, - new CachedServiceFetcher<MediaTranscodeManager>() { - @Override - public MediaTranscodeManager createService(ContextImpl ctx) - throws ServiceNotFoundException { - return new MediaTranscodeManager(ctx); - } - }); - registerService(Context.MEDIA_ROUTER_SERVICE, MediaRouter.class, new CachedServiceFetcher<MediaRouter>() { @Override @@ -1401,6 +1392,7 @@ public final class SystemServiceRegistry { WifiFrameworkInitializer.registerServiceWrappers(); StatsFrameworkInitializer.registerServiceWrappers(); RollbackManagerFrameworkInitializer.initialize(); + MediaFrameworkPlatformInitializer.registerServiceWrappers(); MediaFrameworkInitializer.registerServiceWrappers(); } finally { // If any of the above code throws, we're in a pretty bad shape and the process diff --git a/media/java/android/media/MediaFrameworkInitializer.java b/media/java/android/media/MediaFrameworkPlatformInitializer.java index 577442ec42e4..e7036696ca21 100644 --- a/media/java/android/media/MediaFrameworkInitializer.java +++ b/media/java/android/media/MediaFrameworkPlatformInitializer.java @@ -28,11 +28,15 @@ import java.util.Objects; /** * Class for performing registration for all media services * - * TODO (b/160513103): Move this class when moving media service code to APEX + * TODO (b/160513103): This class is still needed on platform side until + * MEDIA_SESSION_SERVICE is moved onto com.android.media apex. + * Once that's done, we can move the code that registers the service onto the + * MediaFrameworkInitializer class on the apex. + * * @hide */ -public class MediaFrameworkInitializer { - private MediaFrameworkInitializer() { +public class MediaFrameworkPlatformInitializer { + private MediaFrameworkPlatformInitializer() { } private static volatile MediaServiceManager sMediaServiceManager; diff --git a/media/java/android/media/MediaServiceManager.java b/media/java/android/media/MediaServiceManager.java index 21e2d84b0200..96bff4f92668 100644 --- a/media/java/android/media/MediaServiceManager.java +++ b/media/java/android/media/MediaServiceManager.java @@ -17,6 +17,8 @@ package android.media; import android.annotation.NonNull; import android.annotation.Nullable; +import android.annotation.SystemApi; +import android.annotation.SystemApi.Client; import android.os.IBinder; import android.os.ServiceManager; @@ -27,7 +29,11 @@ import android.os.ServiceManager; * <p> Only the media mainline module will be able to access an instance of this class. * @hide */ +@SystemApi(client = Client.MODULE_LIBRARIES) public class MediaServiceManager { + private static final String MEDIA_SESSION_SERVICE = "media_session"; + private static final String MEDIA_TRANSCODING_SERVICE = "media.transcoding"; + /** * @hide */ @@ -59,10 +65,18 @@ public class MediaServiceManager { } /** - * Returns {@link ServiceRegisterer} for the "media_session" service. + * Returns {@link ServiceRegisterer} for MEDIA_SESSION_SERVICE. */ @NonNull public ServiceRegisterer getMediaSessionServiceRegisterer() { - return new ServiceRegisterer("media_session"); + return new ServiceRegisterer(MEDIA_SESSION_SERVICE); + } + + /** + * Returns {@link ServiceRegisterer} for MEDIA_TRANSCODING_SERVICE. + */ + @NonNull + public ServiceRegisterer getMediaTranscodingServiceRegisterer() { + return new ServiceRegisterer(MEDIA_TRANSCODING_SERVICE); } } diff --git a/media/java/android/media/session/MediaSessionManager.java b/media/java/android/media/session/MediaSessionManager.java index fd77b4e5881d..00ee9142360e 100644 --- a/media/java/android/media/session/MediaSessionManager.java +++ b/media/java/android/media/session/MediaSessionManager.java @@ -28,7 +28,7 @@ import android.content.Context; import android.content.pm.ParceledListSlice; import android.media.AudioManager; import android.media.IRemoteVolumeControllerCallback; -import android.media.MediaFrameworkInitializer; +import android.media.MediaFrameworkPlatformInitializer; import android.media.MediaSession2; import android.media.Session2Token; import android.os.Bundle; @@ -122,7 +122,7 @@ public final class MediaSessionManager { // Consider rewriting like DisplayManagerGlobal // Decide if we need context mContext = context; - mService = ISessionManager.Stub.asInterface(MediaFrameworkInitializer + mService = ISessionManager.Stub.asInterface(MediaFrameworkPlatformInitializer .getMediaServiceManager() .getMediaSessionServiceRegisterer() .get()); diff --git a/native/android/Android.bp b/native/android/Android.bp index 6db4da95f6db..3daaf05fa8d5 100644 --- a/native/android/Android.bp +++ b/native/android/Android.bp @@ -103,7 +103,7 @@ cc_library_shared { version_script: "libandroid.map.txt", stubs: { symbol_file: "libandroid.map.txt", - versions: ["29"], + versions: ["29", "31"], }, } |