Merge "Transcoder: Detect input/output frame count mismatch due to codec error"
diff --git a/media/libmediatranscoding/transcoder/VideoTrackTranscoder.cpp b/media/libmediatranscoding/transcoder/VideoTrackTranscoder.cpp
index 45e25ac..e3c0b05 100644
--- a/media/libmediatranscoding/transcoder/VideoTrackTranscoder.cpp
+++ b/media/libmediatranscoding/transcoder/VideoTrackTranscoder.cpp
@@ -396,6 +396,10 @@
mStatus = status;
return;
}
+
+ if (mSampleInfo.size) {
+ ++mInputFrameCount;
+ }
} else {
LOG(DEBUG) << "EOS from source.";
mEosFromSource = true;
@@ -445,6 +449,9 @@
sample->info.flags = bufferInfo.flags;
sample->info.presentationTimeUs = bufferInfo.presentationTimeUs;
+ if (bufferInfo.size > 0 && (bufferInfo.flags & SAMPLE_FLAG_CODEC_CONFIG) == 0) {
+ ++mOutputFrameCount;
+ }
onOutputSampleAvailable(sample);
mLastSampleWasSync = sample->info.flags & SAMPLE_FLAG_SYNC_SAMPLE;
@@ -456,6 +463,15 @@
if (bufferInfo.flags & AMEDIACODEC_BUFFER_FLAG_END_OF_STREAM) {
LOG(DEBUG) << "EOS from encoder.";
mEosFromEncoder = true;
+
+ if (mInputFrameCount != mOutputFrameCount) {
+ LOG(WARNING) << "Input / Output frame count mismatch: " << mInputFrameCount << " vs "
+ << mOutputFrameCount;
+ if (mInputFrameCount > 0 && mOutputFrameCount == 0) {
+ LOG(ERROR) << "Encoder did not produce any output frames.";
+ mStatus = AMEDIA_ERROR_UNKNOWN;
+ }
+ }
}
}
diff --git a/media/libmediatranscoding/transcoder/benchmark/MediaTranscoderBenchmark.cpp b/media/libmediatranscoding/transcoder/benchmark/MediaTranscoderBenchmark.cpp
index d47a30c..e0b2050 100644
--- a/media/libmediatranscoding/transcoder/benchmark/MediaTranscoderBenchmark.cpp
+++ b/media/libmediatranscoding/transcoder/benchmark/MediaTranscoderBenchmark.cpp
@@ -33,6 +33,7 @@
#include <binder/ProcessState.h>
#include <fcntl.h>
#include <media/MediaTranscoder.h>
+
#include <iostream>
using namespace android;
diff --git a/media/libmediatranscoding/transcoder/include/media/VideoTrackTranscoder.h b/media/libmediatranscoding/transcoder/include/media/VideoTrackTranscoder.h
index d2ffb01..4413a6c 100644
--- a/media/libmediatranscoding/transcoder/include/media/VideoTrackTranscoder.h
+++ b/media/libmediatranscoding/transcoder/include/media/VideoTrackTranscoder.h
@@ -99,6 +99,8 @@
std::shared_ptr<AMediaFormat> mActualOutputFormat;
pid_t mPid;
uid_t mUid;
+ uint64_t mInputFrameCount = 0;
+ uint64_t mOutputFrameCount = 0;
};
} // namespace android