Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit ee743d32 authored by Hangyu Kuang's avatar Hangyu Kuang Committed by Android (Google) Code Review
Browse files

Merge "transcoding: Add forClientUid in TranscodingRequest."

parents 225fdff4 9e0c2513
Loading
Loading
Loading
Loading
+4 −0
Original line number Diff line number Diff line
@@ -4399,6 +4399,8 @@ package android.media {
  }
  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();
@@ -4409,6 +4411,8 @@ package android.media {
  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);
+4 −0
Original line number Diff line number Diff line
@@ -1852,6 +1852,8 @@ package android.media {
  }

  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();
@@ -1862,6 +1864,8 @@ package android.media {
  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);
+71 −7
Original line number Diff line number Diff line
@@ -498,6 +498,20 @@ public final class MediaTranscodeManager {
        /** Uri of the destination media file. */
        private @NonNull Uri mDestinationUri;

        /**
         *  The UID of the client that the TranscodingRequest is for. Only privileged caller could
         *  set this Uid as only they could do the transcoding on behalf of the client.
         *  -1 means not available.
         */
        private int mClientUid = -1;

        /**
         *  The Pid of the client that the TranscodingRequest is for. Only privileged caller could
         *  set this Uid as only they could do the transcoding on behalf of the client.
         *  -1 means not available.
         */
        private int mClientPid = -1;

        /** Type of the transcoding. */
        private @TranscodingType int mType = TRANSCODING_TYPE_UNKNOWN;

@@ -534,6 +548,8 @@ public final class MediaTranscodeManager {
        private TranscodingRequest(Builder b) {
            mSourceUri = b.mSourceUri;
            mDestinationUri = b.mDestinationUri;
            mClientUid = b.mClientUid;
            mClientPid = b.mClientPid;
            mPriority = b.mPriority;
            mType = b.mType;
            mVideoTrackFormat = b.mVideoTrackFormat;
@@ -554,6 +570,16 @@ public final class MediaTranscodeManager {
            return mSourceUri;
        }

        /** Return the UID of the client that this request is for. -1 means not available. */
        public int getClientUid() {
            return mClientUid;
        }

        /** Return the PID of the client that this request is for. -1 means not available. */
        public int getClientPid() {
            return mClientPid;
        }

        /** Return destination uri of the transcoding. */
        @NonNull
        public Uri getDestinationUri() {
@@ -592,6 +618,8 @@ public final class MediaTranscodeManager {
            parcel.transcodingType = mType;
            parcel.sourceFilePath = mSourceUri.toString();
            parcel.destinationFilePath = mDestinationUri.toString();
            parcel.clientUid = mClientUid;
            parcel.clientPid = mClientPid;
            parcel.requestedVideoTrackFormat = convertToVideoTrackFormat(mVideoTrackFormat);
            if (mTestConfig != null) {
                parcel.isForTesting = true;
@@ -667,6 +695,8 @@ public final class MediaTranscodeManager {
        public static final class Builder {
            private @NonNull Uri mSourceUri;
            private @NonNull Uri mDestinationUri;
            private int mClientUid = -1;
            private int mClientPid = -1;
            private @TranscodingType int mType = TRANSCODING_TYPE_UNKNOWN;
            private @TranscodingPriority int mPriority = PRIORITY_UNKNOWN;
            private @Nullable MediaFormat mVideoTrackFormat;
@@ -709,6 +739,38 @@ public final class MediaTranscodeManager {
                return this;
            }

            /**
             * Specify the UID of the client that this request is for.
             * @param uid client Uid.
             * @return The same builder instance.
             * @throws IllegalArgumentException if uid is invalid.
             * TODO(hkuang): Check the permission if it is allowed.
             */
            @NonNull
            public Builder setClientUid(int uid) {
                if (uid <= 0) {
                    throw new IllegalArgumentException("Invalid Uid");
                }
                mClientUid = uid;
                return this;
            }

            /**
             * Specify the PID of the client that this request is for.
             * @param pid client Pid.
             * @return The same builder instance.
             * @throws IllegalArgumentException if pid is invalid.
             * TODO(hkuang): Check the permission if it is allowed.
             */
            @NonNull
            public Builder setClientPid(int pid) {
                if (pid <= 0) {
                    throw new IllegalArgumentException("Invalid pid");
                }
                mClientPid = pid;
                return this;
            }

            /**
             * Specifies the priority of the transcoding.
             *
@@ -1275,6 +1337,8 @@ public final class MediaTranscodeManager {
        // Converts the request to TranscodingRequestParcel.
        TranscodingRequestParcel requestParcel = transcodingRequest.writeToParcel();

        Log.i(TAG, "Getting transcoding request " + transcodingRequest.getSourceUri());

        // Submits the request to MediaTranscoding service.
        try {
            TranscodingJobParcel jobParcel = new TranscodingJobParcel();
+44 −0
Original line number Diff line number Diff line
@@ -202,6 +202,42 @@ public class MediaTranscodeManagerTest
        });
    }

    /**
     * Verify that setting invalid pid will throw exception.
     */
    @Test
    public void testCreateTranscodingWithInvalidClientPid() throws Exception {
        assertThrows(IllegalArgumentException.class, () -> {
            TranscodingRequest request =
                    new TranscodingRequest.Builder()
                            .setSourceUri(mSourceHEVCVideoUri)
                            .setDestinationUri(mDestinationUri)
                            .setType(MediaTranscodeManager.TRANSCODING_TYPE_VIDEO)
                            .setPriority(MediaTranscodeManager.PRIORITY_REALTIME)
                            .setClientPid(-1)
                            .setVideoTrackFormat(createMediaFormat())
                            .build();
        });
    }

    /**
     * Verify that setting invalid uid will throw exception.
     */
    @Test
    public void testCreateTranscodingWithInvalidClientUid() throws Exception {
        assertThrows(IllegalArgumentException.class, () -> {
            TranscodingRequest request =
                    new TranscodingRequest.Builder()
                            .setSourceUri(mSourceHEVCVideoUri)
                            .setDestinationUri(mDestinationUri)
                            .setType(MediaTranscodeManager.TRANSCODING_TYPE_VIDEO)
                            .setPriority(MediaTranscodeManager.PRIORITY_REALTIME)
                            .setClientUid(-1)
                            .setVideoTrackFormat(createMediaFormat())
                            .build();
        });
    }

    /**
     * Verify that setting null source uri will throw exception.
     */
@@ -425,16 +461,24 @@ public class MediaTranscodeManagerTest
        MediaFormat videoTrackFormat = resolver.resolveVideoFormat();
        assertNotNull(videoTrackFormat);

        int pid = android.os.Process.myPid();
        int uid = android.os.Process.myUid();

        TranscodingRequest request =
                new TranscodingRequest.Builder()
                        .setSourceUri(mSourceHEVCVideoUri)
                        .setDestinationUri(destinationUri)
                        .setType(MediaTranscodeManager.TRANSCODING_TYPE_VIDEO)
                        .setClientPid(pid)
                        .setClientUid(uid)
                        .setPriority(MediaTranscodeManager.PRIORITY_REALTIME)
                        .setVideoTrackFormat(videoTrackFormat)
                        .build();
        Executor listenerExecutor = Executors.newSingleThreadExecutor();

        assertEquals(pid, request.getClientPid());
        assertEquals(uid, request.getClientUid());

        Log.i(TAG, "transcoding to " + videoTrackFormat);

        TranscodingJob job = mMediaTranscodeManager.enqueueRequest(request, listenerExecutor,
+4 −0
Original line number Diff line number Diff line
@@ -4339,6 +4339,8 @@ package android.media {
  }
  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();
@@ -4349,6 +4351,8 @@ package android.media {
  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);