Merge "transcoding: Add forClientUid in TranscodingRequest."

This commit is contained in:
Hangyu Kuang
2020-09-23 00:19:00 +00:00
committed by Android (Google) Code Review
5 changed files with 127 additions and 7 deletions

View File

@@ -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);

View File

@@ -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);

View File

@@ -83,13 +83,13 @@ import java.util.concurrent.Executors;
<pre class=prettyprint>
TranscodingRequest request =
new TranscodingRequest.Builder()
.setSourceUri(srcUri)
.setDestinationUri(dstUri)
.setType(MediaTranscodeManager.TRANSCODING_TYPE_VIDEO)
.setPriority(REALTIME)
.setVideoTrackFormat(videoFormat)
.build();
new TranscodingRequest.Builder()
.setSourceUri(srcUri)
.setDestinationUri(dstUri)
.setType(MediaTranscodeManager.TRANSCODING_TYPE_VIDEO)
.setPriority(REALTIME)
.setVideoTrackFormat(videoFormat)
.build();
}</pre>
TODO(hkuang): Add architecture diagram showing the transcoding service and api.
@@ -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();

View File

@@ -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,

View File

@@ -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);