Transcoder: Preserve source track duration.
Preserve the source track's duration by sending an
EOS sample with the appropriate PTS to the muxer.
Modified MediaSampleWriterTests to verify the extra
EOS sample.
Bug: 159732935
Test: MediaTranscoder and MediaSampleWriter unit tests.
Change-Id: I6792eff8932db126e8734e5d3d6fe8aee2ffb4a1
diff --git a/media/libmediatranscoding/transcoder/tests/MediaSampleWriterTests.cpp b/media/libmediatranscoding/transcoder/tests/MediaSampleWriterTests.cpp
index 98813e7..e3cb192 100644
--- a/media/libmediatranscoding/transcoder/tests/MediaSampleWriterTests.cpp
+++ b/media/libmediatranscoding/transcoder/tests/MediaSampleWriterTests.cpp
@@ -374,6 +374,16 @@
EXPECT_EQ(event.info.flags, sample->info.flags);
}
+ // Verify EOS samples.
+ for (int trackIndex = 0; trackIndex < kNumTracks; ++trackIndex) {
+ auto trackFormat = mediaSource.mTrackFormats[trackIndex % mediaSource.mTrackCount];
+ int64_t duration = 0;
+ AMediaFormat_getInt64(trackFormat.get(), AMEDIAFORMAT_KEY_DURATION, &duration);
+
+ const AMediaCodecBufferInfo info = {0, 0, duration, AMEDIACODEC_BUFFER_FLAG_END_OF_STREAM};
+ EXPECT_EQ(mTestMuxer->popEvent(), TestMuxer::WriteSample(trackIndex, nullptr, &info));
+ }
+
EXPECT_EQ(mTestMuxer->popEvent(), TestMuxer::Stop());
EXPECT_TRUE(writer.stop());
}
diff --git a/media/libmediatranscoding/transcoder/tests/MediaTranscoderTests.cpp b/media/libmediatranscoding/transcoder/tests/MediaTranscoderTests.cpp
index 67f1ca1..7cb435b 100644
--- a/media/libmediatranscoding/transcoder/tests/MediaTranscoderTests.cpp
+++ b/media/libmediatranscoding/transcoder/tests/MediaTranscoderTests.cpp
@@ -203,6 +203,7 @@
std::shared_ptr<MediaSampleReader> sampleReader =
MediaSampleReaderNDK::createFromFd(dstFd, 0, fileSize);
+ ASSERT_NE(sampleReader, nullptr);
std::shared_ptr<AMediaFormat> videoFormat;
const size_t trackCount = sampleReader->getTrackCount();
@@ -211,6 +212,7 @@
if (trackFormat != nullptr) {
const char* mime = nullptr;
AMediaFormat_getString(trackFormat, AMEDIAFORMAT_KEY_MIME, &mime);
+
if (strncmp(mime, "video/", 6) == 0) {
LOG(INFO) << "Track # " << trackIndex << ": "
<< AMediaFormat_toString(trackFormat);