Transcoder: Add support for progress updates.
Progress updates are delivered as long as any track
in the file has a valid duration.
Fixes: 160277443
Test: MediaSampleWriter and MediaTranscoder unit tests.
Change-Id: I52bbf55cfd2445b98dfc4d9c9ae09bcf7de86a86
diff --git a/media/libmediatranscoding/transcoder/MediaTranscoder.cpp b/media/libmediatranscoding/transcoder/MediaTranscoder.cpp
index bde1cf6..49bfdfe 100644
--- a/media/libmediatranscoding/transcoder/MediaTranscoder.cpp
+++ b/media/libmediatranscoding/transcoder/MediaTranscoder.cpp
@@ -151,11 +151,16 @@
sendCallback(status);
}
-void MediaTranscoder::onSampleWriterFinished(media_status_t status) {
+void MediaTranscoder::onFinished(const MediaSampleWriter* writer __unused, media_status_t status) {
LOG((status != AMEDIA_OK) ? ERROR : DEBUG) << "Sample writer finished with status " << status;
sendCallback(status);
}
+void MediaTranscoder::onProgressUpdate(const MediaSampleWriter* writer __unused, int32_t progress) {
+ // Dispatch progress updated to the client.
+ mCallbacks->onProgressUpdate(this, progress);
+}
+
MediaTranscoder::MediaTranscoder(const std::shared_ptr<CallbackInterface>& callbacks)
: mCallbacks(callbacks) {}
@@ -288,8 +293,7 @@
}
mSampleWriter = std::make_unique<MediaSampleWriter>();
- const bool initOk = mSampleWriter->init(
- fd, std::bind(&MediaTranscoder::onSampleWriterFinished, this, std::placeholders::_1));
+ const bool initOk = mSampleWriter->init(fd, shared_from_this());
if (!initOk) {
LOG(ERROR) << "Unable to initialize sample writer with destination fd: " << fd;