transcoding: move MediaTranscodeManager to apex
bug: 159172726
test: builds; presubmit; manual testing transcoding locally.
Change-Id: I727912a04cf4f7f03fdf5fa0a74e522f69dca66f
diff --git a/Android.bp b/Android.bp
index 9493733..c58e1ca 100644
--- a/Android.bp
+++ b/Android.bp
@@ -626,7 +626,6 @@
// 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 b3c9a9a..ea30b7a 100644
--- a/apex/media/framework/Android.bp
+++ b/apex/media/framework/Android.bp
@@ -36,7 +36,8 @@
"framework_media_annotation",
],
static_libs: [
- "exoplayer2-extractor"
+ "exoplayer2-extractor",
+ "mediatranscoding_aidl_interface-java",
],
jarjar_rules: "jarjar_rules.txt",
@@ -53,10 +54,12 @@
filegroup {
name: "updatable-media-srcs",
srcs: [
+ "java/android/media/MediaFrameworkInitializer.java",
":media-aidl-srcs",
":mediaparceledlistslice-java-srcs",
":mediaparser-srcs",
":mediasession2-java-srcs",
+ ":mediatranscoding-srcs",
],
}
@@ -93,6 +96,17 @@
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 0cc8e52..ce3bcbe 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 @@
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 @@
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 2b69863..ad9114f 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 d802177..89cf77c 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
similarity index 100%
rename from media/java/android/media/ApplicationMediaCapabilities.java
rename to 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
similarity index 100%
rename from media/java/android/media/MediaFeature.java
rename to apex/media/framework/java/android/media/MediaFeature.java
diff --git a/media/java/android/media/MediaFrameworkInitializer.java b/apex/media/framework/java/android/media/MediaFrameworkInitializer.java
similarity index 73%
copy from media/java/android/media/MediaFrameworkInitializer.java
copy to apex/media/framework/java/android/media/MediaFrameworkInitializer.java
index 577442e..813ad7b 100644
--- a/media/java/android/media/MediaFrameworkInitializer.java
+++ b/apex/media/framework/java/android/media/MediaFrameworkInitializer.java
@@ -17,20 +17,18 @@
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;
-import android.media.session.MediaSessionManager;
-
-import com.android.internal.util.Preconditions;
-
-import java.util.Objects;
/**
- * Class for performing registration for all media services
+ * Class for performing registration for all media services on com.android.media apex.
*
- * TODO (b/160513103): Move this class when moving media service code to APEX
* @hide
*/
+@SystemApi(client = Client.MODULE_LIBRARIES)
public class MediaFrameworkInitializer {
private MediaFrameworkInitializer() {
}
@@ -47,9 +45,15 @@
*/
public static void setMediaServiceManager(
@NonNull MediaServiceManager mediaServiceManager) {
- Preconditions.checkState(sMediaServiceManager == null,
- "setMediaServiceManager called twice!");
- sMediaServiceManager = Objects.requireNonNull(mediaServiceManager);
+ if (sMediaServiceManager != null) {
+ throw new IllegalStateException("setMediaServiceManager called twice!");
+ }
+
+ if (mediaServiceManager == null) {
+ throw new NullPointerException("mediaServiceManager is null!");
+ }
+
+ sMediaServiceManager = mediaServiceManager;
}
/** @hide */
@@ -66,9 +70,9 @@
*/
public static void registerServiceWrappers() {
SystemServiceRegistry.registerContextAwareService(
- Context.MEDIA_SESSION_SERVICE,
- MediaSessionManager.class,
- context -> new MediaSessionManager(context)
+ 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
similarity index 99%
rename from media/java/android/media/MediaTranscodeManager.java
rename to apex/media/framework/java/android/media/MediaTranscodeManager.java
index 705da19..d449289 100644
--- a/media/java/android/media/MediaTranscodeManager.java
+++ b/apex/media/framework/java/android/media/MediaTranscodeManager.java
@@ -28,7 +28,6 @@
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 @@
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 @@
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
similarity index 100%
rename from media/java/android/media/MediaTranscodingException.java
rename to apex/media/framework/java/android/media/MediaTranscodingException.java
diff --git a/core/api/current.txt b/core/api/current.txt
index b6bd7ba..0c8f4a4 100644
--- a/core/api/current.txt
+++ b/core/api/current.txt
@@ -24219,26 +24219,6 @@
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);
@@ -26336,17 +26316,6 @@
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);
@@ -27367,12 +27336,6 @@
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 d83c0ad..4c370b5 100644
--- a/core/api/module-lib-current.txt
+++ b/core/api/module-lib-current.txt
@@ -82,6 +82,15 @@
field public static final int METADATA_KEY_VIDEO_CODEC_MIME_TYPE = 40; // 0x28
}
+ 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 d8c18f3b..c12c84e 100644
--- a/core/api/system-current.txt
+++ b/core/api/system-current.txt
@@ -4412,68 +4412,6 @@
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 ed6dea8..66a4337 100644
--- a/core/java/android/app/ActivityThread.java
+++ b/core/java/android/app/ActivityThread.java
@@ -90,6 +90,7 @@
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;
@@ -7702,6 +7703,7 @@
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 392d6fb..cc8ccc0 100644
--- a/core/java/android/app/SystemServiceRegistry.java
+++ b/core/java/android/app/SystemServiceRegistry.java
@@ -104,8 +104,8 @@
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 @@
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
@@ -1385,6 +1376,7 @@
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
similarity index 87%
rename from media/java/android/media/MediaFrameworkInitializer.java
rename to media/java/android/media/MediaFrameworkPlatformInitializer.java
index 577442e..e703669 100644
--- a/media/java/android/media/MediaFrameworkInitializer.java
+++ b/media/java/android/media/MediaFrameworkPlatformInitializer.java
@@ -28,11 +28,15 @@
/**
* 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 21e2d84..96bff4f 100644
--- a/media/java/android/media/MediaServiceManager.java
+++ b/media/java/android/media/MediaServiceManager.java
@@ -17,6 +17,8 @@
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 @@
* <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 @@
}
/**
- * 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 6af39f8..ffae3b3 100644
--- a/media/java/android/media/session/MediaSessionManager.java
+++ b/media/java/android/media/session/MediaSessionManager.java
@@ -28,7 +28,7 @@
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 @@
// 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 6db4da9..3daaf05 100644
--- a/native/android/Android.bp
+++ b/native/android/Android.bp
@@ -103,7 +103,7 @@
version_script: "libandroid.map.txt",
stubs: {
symbol_file: "libandroid.map.txt",
- versions: ["29"],
+ versions: ["29", "31"],
},
}