Transcoding: Change to use string path instead of fd.
Bug: 145628554
Test: unit test
Change-Id: I321ecf75e770b4500fc3015a5d161e3b48ea5678
diff --git a/media/libmediatranscoding/TranscodingClientManager.cpp b/media/libmediatranscoding/TranscodingClientManager.cpp
index de9dd76..ce3ac13 100644
--- a/media/libmediatranscoding/TranscodingClientManager.cpp
+++ b/media/libmediatranscoding/TranscodingClientManager.cpp
@@ -112,7 +112,7 @@
return Status::fromServiceSpecificError(IMediaTranscodingService::ERROR_DISCONNECTED);
}
- if (in_request.fileName.empty()) {
+ if (in_request.sourceFilePath.empty() || in_request.destinationFilePath.empty()) {
// This is the only error we check for now.
return Status::ok();
}
diff --git a/media/libmediatranscoding/aidl/android/media/TranscodingRequestParcel.aidl b/media/libmediatranscoding/aidl/android/media/TranscodingRequestParcel.aidl
index 14e7399..fb0b918 100644
--- a/media/libmediatranscoding/aidl/android/media/TranscodingRequestParcel.aidl
+++ b/media/libmediatranscoding/aidl/android/media/TranscodingRequestParcel.aidl
@@ -28,9 +28,14 @@
//TODO(hkuang): Implement the parcelable.
parcelable TranscodingRequestParcel {
/**
- * Name of file to be transcoded.
+ * The absolute file path of the source file.
*/
- @utf8InCpp String fileName;
+ @utf8InCpp String sourceFilePath;
+
+ /**
+ * The absolute file path of the destination file.
+ */
+ @utf8InCpp String destinationFilePath;
/**
* Type of the transcoding.
@@ -46,16 +51,6 @@
@nullable TranscodingVideoTrackFormat requestedVideoTrackFormat;
/**
- * Input source file descriptor.
- */
- @nullable ParcelFileDescriptor inFd;
-
- /**
- * Output transcoded file descriptor.
- */
- @nullable ParcelFileDescriptor outFd;
-
- /**
* Priority of this transcoding. Service will schedule the transcoding based on the priority.
*/
TranscodingJobPriority priority;
diff --git a/media/libmediatranscoding/include/media/TranscodingRequest.h b/media/libmediatranscoding/include/media/TranscodingRequest.h
index 1337af3..25236bd 100644
--- a/media/libmediatranscoding/include/media/TranscodingRequest.h
+++ b/media/libmediatranscoding/include/media/TranscodingRequest.h
@@ -35,11 +35,9 @@
private:
void setTo(const TranscodingRequestParcel& parcel) {
- fileName = parcel.fileName;
+ sourceFilePath = parcel.sourceFilePath;
+ destinationFilePath = parcel.destinationFilePath;
transcodingType = parcel.transcodingType;
- // TODO: determine if the fds need dup
- inFd.set(dup(parcel.inFd.get()));
- outFd.set(dup(parcel.outFd.get()));
priority = parcel.priority;
requestUpdate = parcel.requestUpdate;
}
diff --git a/media/libmediatranscoding/tests/TranscodingClientManager_tests.cpp b/media/libmediatranscoding/tests/TranscodingClientManager_tests.cpp
index d9504ca..0ae8035 100644
--- a/media/libmediatranscoding/tests/TranscodingClientManager_tests.cpp
+++ b/media/libmediatranscoding/tests/TranscodingClientManager_tests.cpp
@@ -133,7 +133,7 @@
// This is the secret name we'll check, to test error propagation from
// the scheduler back to client.
- if (request.fileName == "bad_file") {
+ if (request.sourceFilePath == "bad_source_file") {
return false;
}
@@ -346,33 +346,37 @@
// Test jobId assignment.
TranscodingRequestParcel request;
- request.fileName = "test_file_0";
+ request.sourceFilePath = "test_source_file_0";
+ request.destinationFilePath = "test_desintaion_file_0";
TranscodingJobParcel job;
bool result;
EXPECT_TRUE(mClient1->submitRequest(request, &job, &result).isOk());
EXPECT_TRUE(result);
EXPECT_EQ(job.jobId, JOB(0));
- request.fileName = "test_file_1";
+ request.sourceFilePath = "test_source_file_1";
+ request.destinationFilePath = "test_desintaion_file_1";
EXPECT_TRUE(mClient1->submitRequest(request, &job, &result).isOk());
EXPECT_TRUE(result);
EXPECT_EQ(job.jobId, JOB(1));
- request.fileName = "test_file_2";
+ request.sourceFilePath = "test_source_file_2";
+ request.destinationFilePath = "test_desintaion_file_2";
EXPECT_TRUE(mClient1->submitRequest(request, &job, &result).isOk());
EXPECT_TRUE(result);
EXPECT_EQ(job.jobId, JOB(2));
- // Test submit bad request (no valid fileName) fails.
+ // Test submit bad request (no valid sourceFilePath) fails.
TranscodingRequestParcel badRequest;
- badRequest.fileName = "bad_file";
+ badRequest.sourceFilePath = "bad_source_file";
+ badRequest.destinationFilePath = "bad_destination_file";
EXPECT_TRUE(mClient1->submitRequest(badRequest, &job, &result).isOk());
EXPECT_FALSE(result);
// Test get jobs by id.
EXPECT_TRUE(mClient1->getJobWithId(JOB(2), &job, &result).isOk());
EXPECT_EQ(job.jobId, JOB(2));
- EXPECT_EQ(job.request.fileName, "test_file_2");
+ EXPECT_EQ(job.request.sourceFilePath, "test_source_file_2");
EXPECT_TRUE(result);
// Test get jobs by invalid id fails.
@@ -417,7 +421,8 @@
addMultipleClients();
TranscodingRequestParcel request;
- request.fileName = "test_file_name";
+ request.sourceFilePath = "test_source_file_name";
+ request.destinationFilePath = "test_destination_file_name";
TranscodingJobParcel job;
bool result;
EXPECT_TRUE(mClient1->submitRequest(request, &job, &result).isOk());
@@ -461,12 +466,14 @@
TranscodingJobParcel job;
bool result;
- request.fileName = "test_file_0";
+ request.sourceFilePath = "test_source_file_0";
+ request.destinationFilePath = "test_destination_file_0";
request.priority = TranscodingJobPriority::kUnspecified;
EXPECT_TRUE(client->submitRequest(request, &job, &result).isOk() && result);
EXPECT_EQ(job.jobId, JOB(0));
- request.fileName = "test_file_1";
+ request.sourceFilePath = "test_source_file_1";
+ request.destinationFilePath = "test_destination_file_1";
request.priority = TranscodingJobPriority::kNormal;
EXPECT_TRUE(client->submitRequest(request, &job, &result).isOk() && result);
EXPECT_EQ(job.jobId, JOB(1));
@@ -476,7 +483,8 @@
EXPECT_TRUE(status.isOk());
// Test submit new request after unregister, should fail with ERROR_DISCONNECTED.
- request.fileName = "test_file_2";
+ request.sourceFilePath = "test_source_file_2";
+ request.destinationFilePath = "test_destination_file_2";
request.priority = TranscodingJobPriority::kNormal;
status = client->submitRequest(request, &job, &result);
EXPECT_FALSE(status.isOk());
diff --git a/services/mediatranscoding/tests/mediatranscodingservice_tests.cpp b/services/mediatranscoding/tests/mediatranscodingservice_tests.cpp
index a8d4241..7f7d509 100644
--- a/services/mediatranscoding/tests/mediatranscodingservice_tests.cpp
+++ b/services/mediatranscoding/tests/mediatranscodingservice_tests.cpp
@@ -333,14 +333,15 @@
template <bool expectation = success>
bool submit(const std::shared_ptr<ITranscodingClient>& client, int32_t jobId,
- const char* filename,
+ const char* sourceFilePath, const char* destinationFilePath,
TranscodingJobPriority priority = TranscodingJobPriority::kNormal) {
constexpr bool shouldSucceed = (expectation == success);
bool result;
TranscodingRequestParcel request;
TranscodingJobParcel job;
- request.fileName = filename;
+ request.sourceFilePath = sourceFilePath;
+ request.destinationFilePath = destinationFilePath;
request.priority = priority;
Status status = client->submitRequest(request, &job, &result);
@@ -367,7 +368,7 @@
template <bool expectation = success>
bool getJob(const std::shared_ptr<ITranscodingClient>& client, int32_t jobId,
- const char* filename) {
+ const char* sourceFilePath, const char* destinationFilePath) {
constexpr bool shouldSucceed = (expectation == success);
bool result;
TranscodingJobParcel job;
@@ -377,11 +378,12 @@
EXPECT_EQ(result, shouldSucceed);
if (shouldSucceed) {
EXPECT_EQ(job.jobId, jobId);
- EXPECT_EQ(job.request.fileName, filename);
+ EXPECT_EQ(job.request.sourceFilePath, sourceFilePath);
}
return status.isOk() && (result == shouldSucceed) &&
- (!shouldSucceed || (job.jobId == jobId && job.request.fileName == filename));
+ (!shouldSucceed || (job.jobId == jobId &&
+ job.request.sourceFilePath == sourceFilePath && job.request.destinationFilePath == destinationFilePath));
}
std::shared_ptr<IMediaTranscodingService> mService;
@@ -487,12 +489,12 @@
registerMultipleClients();
// Submit 2 requests on client1 first.
- EXPECT_TRUE(submit(mClient1, 0, "test_file"));
- EXPECT_TRUE(submit(mClient1, 1, "test_file"));
+ EXPECT_TRUE(submit(mClient1, 0, "test_source_file", "test_destination_file"));
+ EXPECT_TRUE(submit(mClient1, 1, "test_source_file", "test_destination_file"));
// Submit 2 requests on client2, jobId should be independent for each client.
- EXPECT_TRUE(submit(mClient2, 0, "test_file"));
- EXPECT_TRUE(submit(mClient2, 1, "test_file"));
+ EXPECT_TRUE(submit(mClient2, 0, "test_source_file", "test_destination_file"));
+ EXPECT_TRUE(submit(mClient2, 1, "test_source_file", "test_destination_file"));
// Cancel all jobs.
EXPECT_TRUE(cancel(mClient1, 0));
@@ -507,12 +509,12 @@
registerMultipleClients();
// Test jobId assignment.
- EXPECT_TRUE(submit(mClient1, 0, "test_file_0"));
- EXPECT_TRUE(submit(mClient1, 1, "test_file_1"));
- EXPECT_TRUE(submit(mClient1, 2, "test_file_2"));
+ EXPECT_TRUE(submit(mClient1, 0, "test_source_file_0", "test_destination_file"));
+ EXPECT_TRUE(submit(mClient1, 1, "test_source_file_1", "test_destination_file"));
+ EXPECT_TRUE(submit(mClient1, 2, "test_source_file_2", "test_destination_file"));
- // Test submit bad request (no valid fileName) fails.
- EXPECT_TRUE(submit<fail>(mClient1, 0, ""));
+ // Test submit bad request (no valid sourceFilePath) fails.
+ EXPECT_TRUE(submit<fail>(mClient1, 0, "", ""));
// Test cancel non-existent job fails.
EXPECT_TRUE(cancel<fail>(mClient1, 100));
@@ -541,22 +543,22 @@
registerMultipleClients();
// Submit 3 requests.
- EXPECT_TRUE(submit(mClient1, 0, "test_file_0"));
- EXPECT_TRUE(submit(mClient1, 1, "test_file_1"));
- EXPECT_TRUE(submit(mClient1, 2, "test_file_2"));
+ EXPECT_TRUE(submit(mClient1, 0, "test_source_file_0", "test_destination_file_0"));
+ EXPECT_TRUE(submit(mClient1, 1, "test_source_file_1", "test_destination_file_1"));
+ EXPECT_TRUE(submit(mClient1, 2, "test_source_file_2", "test_destination_file_2"));
// Test get jobs by id.
- EXPECT_TRUE(getJob(mClient1, 2, "test_file_2"));
- EXPECT_TRUE(getJob(mClient1, 1, "test_file_1"));
- EXPECT_TRUE(getJob(mClient1, 0, "test_file_0"));
+ EXPECT_TRUE(getJob(mClient1, 2, "test_source_file_2", "test_destination_file_2"));
+ EXPECT_TRUE(getJob(mClient1, 1, "test_source_file_1", "test_destination_file_1"));
+ EXPECT_TRUE(getJob(mClient1, 0, "test_source_file_0", "test_destination_file_0"));
// Test get job by invalid id fails.
- EXPECT_TRUE(getJob<fail>(mClient1, 100, ""));
- EXPECT_TRUE(getJob<fail>(mClient1, -1, ""));
+ EXPECT_TRUE(getJob<fail>(mClient1, 100, "", ""));
+ EXPECT_TRUE(getJob<fail>(mClient1, -1, "", ""));
// Test get job after cancel fails.
EXPECT_TRUE(cancel(mClient1, 2));
- EXPECT_TRUE(getJob<fail>(mClient1, 2, ""));
+ EXPECT_TRUE(getJob<fail>(mClient1, 2, "", ""));
// Job 0 should start immediately and finish in 2 seconds, followed by Job 1 start.
EXPECT_EQ(mClientCallback1->pop(kPaddingUs), EventTracker::Start(CLIENT(1), 0));
@@ -564,10 +566,10 @@
EXPECT_EQ(mClientCallback1->pop(kPaddingUs), EventTracker::Start(CLIENT(1), 1));
// Test get job after finish fails.
- EXPECT_TRUE(getJob<fail>(mClient1, 0, ""));
+ EXPECT_TRUE(getJob<fail>(mClient1, 0, "", ""));
// Test get the remaining job 1.
- EXPECT_TRUE(getJob(mClient1, 1, "test_file_1"));
+ EXPECT_TRUE(getJob(mClient1, 1, "test_source_file_1", "test_destination_file_1"));
// Cancel remaining job 1.
EXPECT_TRUE(cancel(mClient1, 1));
@@ -579,15 +581,15 @@
registerMultipleClients();
// Submit some offline jobs first.
- EXPECT_TRUE(submit(mClient1, 0, "test_file_0", TranscodingJobPriority::kUnspecified));
- EXPECT_TRUE(submit(mClient1, 1, "test_file_1", TranscodingJobPriority::kUnspecified));
+ EXPECT_TRUE(submit(mClient1, 0, "test_source_file_0", "test_destination_file_0", TranscodingJobPriority::kUnspecified));
+ EXPECT_TRUE(submit(mClient1, 1, "test_source_file_1", "test_destination_file_1", TranscodingJobPriority::kUnspecified));
// Job 0 should start immediately.
EXPECT_EQ(mClientCallback1->pop(kPaddingUs), EventTracker::Start(CLIENT(1), 0));
// Submit more real-time jobs.
- EXPECT_TRUE(submit(mClient1, 2, "test_file_2"));
- EXPECT_TRUE(submit(mClient1, 3, "test_file_3"));
+ EXPECT_TRUE(submit(mClient1, 2, "test_source_file_2", "test_destination_file_2"));
+ EXPECT_TRUE(submit(mClient1, 3, "test_source_file_3", "test_destination_file_3"));
// Job 0 should pause immediately and job 2 should start.
EXPECT_EQ(mClientCallback1->pop(kPaddingUs), EventTracker::Pause(CLIENT(1), 0));
@@ -652,9 +654,9 @@
// Submit 3 requests.
ALOGD("Submitting job to client1 (app A) ...");
- EXPECT_TRUE(submit(mClient1, 0, "test_file_0"));
- EXPECT_TRUE(submit(mClient1, 1, "test_file_1"));
- EXPECT_TRUE(submit(mClient1, 2, "test_file_2"));
+ EXPECT_TRUE(submit(mClient1, 0, "test_source_file_0", "test_destination_file_0"));
+ EXPECT_TRUE(submit(mClient1, 1, "test_source_file_1", "test_destination_file_1"));
+ EXPECT_TRUE(submit(mClient1, 2, "test_source_file_2", "test_destination_file_2"));
// Job 0 should start immediately.
EXPECT_EQ(mClientCallback1->pop(kPaddingUs), EventTracker::Start(CLIENT(1), 0));
@@ -667,7 +669,7 @@
EXPECT_EQ(mClientCallback1->pop(kPaddingUs), EventTracker::Start(CLIENT(1), 1));
ALOGD("Submitting job to client2 (app B) ...");
- EXPECT_TRUE(submit(mClient2, 0, "test_file_0"));
+ EXPECT_TRUE(submit(mClient2, 0, "test_source_file_0", "test_destination_file_0"));
// Client1's job should pause, client2's job should start.
EXPECT_EQ(mClientCallback1->pop(kPaddingUs), EventTracker::Pause(CLIENT(1), 1));