transcoding: post progress update to client

bug: 160277443
bug: 154733526
test: unit tests
Change-Id: I04cd198d5fb1e83b1d256e4968fb3685c16b7a55
diff --git a/media/libmediatranscoding/TranscoderWrapper.cpp b/media/libmediatranscoding/TranscoderWrapper.cpp
index aaa15c4..bd03671 100644
--- a/media/libmediatranscoding/TranscoderWrapper.cpp
+++ b/media/libmediatranscoding/TranscoderWrapper.cpp
@@ -103,6 +103,8 @@
         return "Finish";
     case Event::Error:
         return "Error";
+    case Event::Progress:
+        return "Progress";
     default:
         break;
     }
@@ -132,8 +134,10 @@
 
     virtual void onProgressUpdate(const MediaTranscoder* transcoder __unused,
                                   int32_t progress) override {
-        ALOGV("%s: job {%lld, %d}, progress %d", __FUNCTION__, (long long)mClientId, mJobId,
-              progress);
+        auto owner = mOwner.lock();
+        if (owner != nullptr) {
+            owner->onProgress(mClientId, mJobId, progress);
+        }
     }
 
     virtual void onCodecResourceLost(const MediaTranscoder* transcoder __unused,
@@ -261,6 +265,15 @@
     });
 }
 
+void TranscoderWrapper::onProgress(ClientIdType clientId, JobIdType jobId, int32_t progress) {
+    queueEvent(Event::Progress, clientId, jobId, [=] {
+        auto callback = mCallback.lock();
+        if (callback != nullptr) {
+            callback->onProgressUpdate(clientId, jobId, progress);
+        }
+    });
+}
+
 TranscodingErrorCode TranscoderWrapper::setupTranscoder(
         ClientIdType clientId, JobIdType jobId, const TranscodingRequestParcel& request,
         const std::shared_ptr<ITranscodingClientCallback>& clientCb,
diff --git a/media/libmediatranscoding/include/media/TranscoderWrapper.h b/media/libmediatranscoding/include/media/TranscoderWrapper.h
index 804119f..a4c92c5 100644
--- a/media/libmediatranscoding/include/media/TranscoderWrapper.h
+++ b/media/libmediatranscoding/include/media/TranscoderWrapper.h
@@ -51,7 +51,7 @@
 private:
     class CallbackImpl;
     struct Event {
-        enum Type { NoEvent, Start, Pause, Resume, Stop, Finish, Error } type;
+        enum Type { NoEvent, Start, Pause, Resume, Stop, Finish, Error, Progress } type;
         ClientIdType clientId;
         JobIdType jobId;
         std::function<void()> runnable;
@@ -71,6 +71,7 @@
     static const char* toString(Event::Type type);
     void onFinish(ClientIdType clientId, JobIdType jobId);
     void onError(ClientIdType clientId, JobIdType jobId, TranscodingErrorCode error);
+    void onProgress(ClientIdType clientId, JobIdType jobId, int32_t progress);
 
     TranscodingErrorCode handleStart(ClientIdType clientId, JobIdType jobId,
                                      const TranscodingRequestParcel& request,