Merge "Benchmark Timer : add support for frameSizes" am: 09df62407d am: eedc9bbae6
am: f1a300c6df
Change-Id: I602a9943431b1051086f97f4d1105985cb2fb7ac
diff --git a/media/tests/benchmark/src/native/common/Android.bp b/media/tests/benchmark/src/native/common/Android.bp
index 64ea1ee..527f588 100644
--- a/media/tests/benchmark/src/native/common/Android.bp
+++ b/media/tests/benchmark/src/native/common/Android.bp
@@ -23,7 +23,7 @@
srcs: [
"BenchmarkCommon.cpp",
- "Timer.cpp",
+ "Stats.cpp",
],
export_include_dirs: ["."],
diff --git a/media/tests/benchmark/src/native/common/BenchmarkCommon.cpp b/media/tests/benchmark/src/native/common/BenchmarkCommon.cpp
index bbc8790..5bdb48a 100644
--- a/media/tests/benchmark/src/native/common/BenchmarkCommon.cpp
+++ b/media/tests/benchmark/src/native/common/BenchmarkCommon.cpp
@@ -31,7 +31,7 @@
void OnInputAvailableCB(AMediaCodec *codec, void *userdata, int32_t index) {
ALOGV("OnInputAvailableCB: index(%d)", index);
CallBackHandle *self = (CallBackHandle *)userdata;
- self->getTimer()->addInputTime();
+ self->getStats()->addInputTime();
self->mIOQueue.push([self, codec, index]() { self->onInputAvailable(codec, index); });
}
@@ -40,7 +40,7 @@
ALOGV("OnOutputAvailableCB: index(%d), (%d, %d, %lld, 0x%x)", index, bufferInfo->offset,
bufferInfo->size, (long long)bufferInfo->presentationTimeUs, bufferInfo->flags);
CallBackHandle *self = (CallBackHandle *)userdata;
- self->getTimer()->addOutputTime();
+ self->getStats()->addOutputTime();
AMediaCodecBufferInfo bufferInfoCopy = *bufferInfo;
self->mIOQueue.push([self, codec, index, bufferInfoCopy]() {
AMediaCodecBufferInfo bc = bufferInfoCopy;
diff --git a/media/tests/benchmark/src/native/common/BenchmarkCommon.h b/media/tests/benchmark/src/native/common/BenchmarkCommon.h
index 7b87c04..df16baf 100644
--- a/media/tests/benchmark/src/native/common/BenchmarkCommon.h
+++ b/media/tests/benchmark/src/native/common/BenchmarkCommon.h
@@ -27,7 +27,7 @@
#include <media/NdkMediaCodec.h>
#include <media/NdkMediaError.h>
-#include "Timer.h"
+#include "Stats.h"
using namespace std;
@@ -69,11 +69,13 @@
class CallBackHandle {
public:
- CallBackHandle() : mSawError(false), mIsDone(false), mTimer(nullptr) {}
+ CallBackHandle() : mSawError(false), mIsDone(false), mStats(nullptr) {
+ mStats = new Stats();
+ }
virtual ~CallBackHandle() {
if (mIOThread.joinable()) mIOThread.join();
- if (mTimer) delete mTimer;
+ if (mStats) delete mStats;
}
void ioThread();
@@ -94,7 +96,7 @@
(void)bufferInfo;
}
- virtual Timer *getTimer() { return mTimer; }
+ Stats *getStats() { return mStats; }
// Keep a queue of all function callbacks.
typedef function<void()> IOTask;
@@ -103,8 +105,8 @@
bool mSawError;
bool mIsDone;
- private:
- Timer *mTimer;
+ protected:
+ Stats *mStats;
};
// Async API's callback
diff --git a/media/tests/benchmark/src/native/common/Timer.cpp b/media/tests/benchmark/src/native/common/Stats.cpp
similarity index 90%
rename from media/tests/benchmark/src/native/common/Timer.cpp
rename to media/tests/benchmark/src/native/common/Stats.cpp
index 0487123..6bcd3ce 100644
--- a/media/tests/benchmark/src/native/common/Timer.cpp
+++ b/media/tests/benchmark/src/native/common/Stats.cpp
@@ -15,13 +15,13 @@
*/
//#define LOG_NDEBUG 0
-#define LOG_TAG "Timer"
+#define LOG_TAG "Stats"
#include <iostream>
#include <stdint.h>
#include <utils/Log.h>
-#include "Timer.h"
+#include "Stats.h"
/**
* Dumps the stats of the operation for a given input media.
@@ -31,7 +31,7 @@
* \param inputReference input media
* \param duarationUs is a duration of the input media in microseconds.
*/
-void Timer::dumpStatistics(std::string operation, std::string inputReference, int64_t duarationUs) {
+void Stats::dumpStatistics(std::string operation, std::string inputReference, int64_t duarationUs) {
ALOGV("In %s", __func__);
if (!mOutputTimer.size()) {
ALOGE("No output produced");
@@ -40,6 +40,7 @@
nsecs_t totalTimeTakenNs = getTotalTime();
nsecs_t timeTakenPerSec = (totalTimeTakenNs * 1000000) / duarationUs;
nsecs_t timeToFirstFrameNs = *mOutputTimer.begin() - mStartTimeNs;
+ int32_t size = std::accumulate(mFrameSizes.begin(), mFrameSizes.end(), 0);
// get min and max output intervals.
nsecs_t intervalNs;
nsecs_t minTimeTakenNs = INT64_MAX;
@@ -59,6 +60,7 @@
std::cout << "Time to first frame in nano sec : " << timeToFirstFrameNs << endl;
std::cout << "Time taken (in nano sec) to " << operation
<< " 1 sec of content : " << timeTakenPerSec << endl;
+ std::cout << "Total bytes " << operation << "ed : " << size << endl;
std::cout << "Minimum Time in nano sec : " << minTimeTakenNs << endl;
std::cout << "Maximum Time in nano sec : " << maxTimeTakenNs << endl;
std::cout << "Destroy Time in nano sec : " << mDeInitTimeNs << endl;
diff --git a/media/tests/benchmark/src/native/common/Timer.h b/media/tests/benchmark/src/native/common/Stats.h
similarity index 86%
rename from media/tests/benchmark/src/native/common/Timer.h
rename to media/tests/benchmark/src/native/common/Stats.h
index 92af86f..024319a 100644
--- a/media/tests/benchmark/src/native/common/Timer.h
+++ b/media/tests/benchmark/src/native/common/Stats.h
@@ -14,8 +14,8 @@
* limitations under the License.
*/
-#ifndef __TIMER_H__
-#define __TIMER_H__
+#ifndef __STATS_H__
+#define __STATS_H__
#include <sys/time.h>
#include <algorithm>
@@ -25,22 +25,22 @@
using namespace std;
-class Timer {
+class Stats {
public:
- Timer() {
+ Stats() {
mInitTimeNs = 0;
mDeInitTimeNs = 0;
}
- ~Timer() {
- if (!mInputTimer.empty()) mInputTimer.clear();
- if (!mOutputTimer.empty()) mOutputTimer.clear();
+ ~Stats() {
+ reset();
}
private:
nsecs_t mInitTimeNs;
nsecs_t mDeInitTimeNs;
nsecs_t mStartTimeNs;
+ std::vector<int32_t> mFrameSizes;
std::vector<nsecs_t> mInputTimer;
std::vector<nsecs_t> mOutputTimer;
@@ -53,11 +53,14 @@
void setStartTime() { mStartTimeNs = systemTime(CLOCK_MONOTONIC); }
+ void addFrameSize(int32_t size) { mFrameSizes.push_back(size); }
+
void addInputTime() { mInputTimer.push_back(systemTime(CLOCK_MONOTONIC)); }
void addOutputTime() { mOutputTimer.push_back(systemTime(CLOCK_MONOTONIC)); }
- void resetTimers() {
+ void reset() {
+ if (!mFrameSizes.empty()) mFrameSizes.clear();
if (!mInputTimer.empty()) mInputTimer.clear();
if (!mOutputTimer.empty()) mOutputTimer.clear();
}
@@ -78,4 +81,4 @@
void dumpStatistics(std::string operation, std::string inputReference, int64_t duarationUs);
};
-#endif // __TIMER_H__
+#endif // __STATS_H__
diff --git a/media/tests/benchmark/src/native/decoder/Decoder.cpp b/media/tests/benchmark/src/native/decoder/Decoder.cpp
index eeea60f..ef84537 100644
--- a/media/tests/benchmark/src/native/decoder/Decoder.cpp
+++ b/media/tests/benchmark/src/native/decoder/Decoder.cpp
@@ -81,6 +81,7 @@
mDecoderDoneCondition.notify_one();
return;
}
+ mStats->addFrameSize(bytesRead);
mNumInputFrame++;
}
}
@@ -128,7 +129,6 @@
void Decoder::setupDecoder() {
if (!mFormat) mFormat = mExtractor->getFormat();
- if (!mTimer) mTimer = new Timer();
}
int32_t Decoder::decode(uint8_t *inputBuffer, vector<AMediaCodecBufferInfo> &frameInfo,
@@ -143,7 +143,7 @@
AMediaFormat_getString(mFormat, AMEDIAFORMAT_KEY_MIME, &mime);
if (!mime) return AMEDIA_ERROR_INVALID_OBJECT;
- int64_t sTime = mTimer->getCurTime();
+ int64_t sTime = mStats->getCurTime();
mCodec = createMediaCodec(mFormat, mime, codecName, false /*isEncoder*/);
if (!mCodec) return AMEDIA_ERROR_INVALID_OBJECT;
@@ -152,16 +152,15 @@
OnFormatChangedCB, OnErrorCB};
AMediaCodec_setAsyncNotifyCallback(mCodec, aCB, this);
- CallBackHandle *callbackHandle = new CallBackHandle();
- callbackHandle->mIOThread = thread(&CallBackHandle::ioThread, this);
+ mIOThread = thread(&CallBackHandle::ioThread, this);
}
AMediaCodec_start(mCodec);
- int64_t eTime = mTimer->getCurTime();
- int64_t timeTaken = mTimer->getTimeDiff(sTime, eTime);
- mTimer->setInitTime(timeTaken);
+ int64_t eTime = mStats->getCurTime();
+ int64_t timeTaken = mStats->getTimeDiff(sTime, eTime);
+ mStats->setInitTime(timeTaken);
- mTimer->setStartTime();
+ mStats->setStartTime();
if (!asyncMode) {
while (!mSawOutputEOS && !mSignalledError) {
/* Queue input data */
@@ -171,7 +170,7 @@
ALOGE("AMediaCodec_dequeueInputBuffer returned invalid index %zd\n", inIdx);
return AMEDIA_ERROR_IO;
} else if (inIdx >= 0) {
- mTimer->addInputTime();
+ mStats->addInputTime();
onInputAvailable(mCodec, inIdx);
}
}
@@ -184,7 +183,7 @@
const char *s = AMediaFormat_toString(mFormat);
ALOGI("Output format: %s\n", s);
} else if (outIdx >= 0) {
- mTimer->addOutputTime();
+ mStats->addOutputTime();
onOutputAvailable(mCodec, outIdx, &info);
} else if (!(outIdx == AMEDIACODEC_INFO_TRY_AGAIN_LATER ||
outIdx == AMEDIACODEC_INFO_OUTPUT_BUFFERS_CHANGED)) {
@@ -207,7 +206,7 @@
}
void Decoder::deInitCodec() {
- int64_t sTime = mTimer->getCurTime();
+ int64_t sTime = mStats->getCurTime();
if (mFormat) {
AMediaFormat_delete(mFormat);
mFormat = nullptr;
@@ -215,19 +214,19 @@
if (!mCodec) return;
AMediaCodec_stop(mCodec);
AMediaCodec_delete(mCodec);
- int64_t eTime = mTimer->getCurTime();
- int64_t timeTaken = mTimer->getTimeDiff(sTime, eTime);
- mTimer->setDeInitTime(timeTaken);
+ int64_t eTime = mStats->getCurTime();
+ int64_t timeTaken = mStats->getTimeDiff(sTime, eTime);
+ mStats->setDeInitTime(timeTaken);
}
void Decoder::dumpStatistics(string inputReference) {
int64_t durationUs = mExtractor->getClipDuration();
string operation = "decode";
- mTimer->dumpStatistics(operation, inputReference, durationUs);
+ mStats->dumpStatistics(operation, inputReference, durationUs);
}
void Decoder::resetDecoder() {
- if (mTimer) mTimer->resetTimers();
+ if (mStats) mStats->reset();
if (mInputBuffer) mInputBuffer = nullptr;
if (!mFrameMetaData.empty()) mFrameMetaData.clear();
}
diff --git a/media/tests/benchmark/src/native/decoder/Decoder.h b/media/tests/benchmark/src/native/decoder/Decoder.h
index 7f64de3..7630e7b 100644
--- a/media/tests/benchmark/src/native/decoder/Decoder.h
+++ b/media/tests/benchmark/src/native/decoder/Decoder.h
@@ -25,7 +25,7 @@
#include "BenchmarkCommon.h"
#include "Extractor.h"
-#include "Timer.h"
+#include "Stats.h"
class Decoder : public CallBackHandle {
public:
@@ -33,7 +33,6 @@
: mCodec(nullptr),
mFormat(nullptr),
mExtractor(nullptr),
- mTimer(nullptr),
mNumInputFrame(0),
mNumOutputFrame(0),
mSawInputEOS(false),
@@ -45,12 +44,9 @@
}
virtual ~Decoder() {
- if (mTimer) delete mTimer;
if (mExtractor) delete mExtractor;
}
- Timer *getTimer() override { return mTimer; }
-
Extractor *getExtractor() { return mExtractor; }
// Decoder related utilities
@@ -80,8 +76,6 @@
Extractor *mExtractor;
- Timer *mTimer;
-
int32_t mNumInputFrame;
int32_t mNumOutputFrame;
diff --git a/media/tests/benchmark/src/native/encoder/Encoder.cpp b/media/tests/benchmark/src/native/encoder/Encoder.cpp
index 73a559a..5fdf9e3 100644
--- a/media/tests/benchmark/src/native/encoder/Encoder.cpp
+++ b/media/tests/benchmark/src/native/encoder/Encoder.cpp
@@ -112,6 +112,7 @@
return;
}
+ mStats->addFrameSize(bufferInfo->size);
AMediaCodec_releaseOutputBuffer(mCodec, bufIdx, false);
mSawOutputEOS = (0 != (bufferInfo->flags & AMEDIACODEC_BUFFER_FLAG_END_OF_STREAM));
mNumOutputFrame++;
@@ -134,24 +135,23 @@
void Encoder::setupEncoder() {
if (!mFormat) mFormat = AMediaFormat_new();
- if (!mTimer) mTimer = new Timer();
}
void Encoder::deInitCodec() {
- int64_t sTime = mTimer->getCurTime();
+ int64_t sTime = mStats->getCurTime();
if (mFormat) {
AMediaFormat_delete(mFormat);
mFormat = nullptr;
}
AMediaCodec_stop(mCodec);
AMediaCodec_delete(mCodec);
- int64_t eTime = mTimer->getCurTime();
- int64_t timeTaken = mTimer->getTimeDiff(sTime, eTime);
- mTimer->setDeInitTime(timeTaken);
+ int64_t eTime = mStats->getCurTime();
+ int64_t timeTaken = mStats->getTimeDiff(sTime, eTime);
+ mStats->setDeInitTime(timeTaken);
}
void Encoder::resetEncoder() {
- if (mTimer) mTimer->resetTimers();
+ if (mStats) mStats->reset();
if (mEleStream) mEleStream = nullptr;
if (mMime) mMime = nullptr;
mInputBufferSize = 0;
@@ -160,7 +160,7 @@
void Encoder::dumpStatistics(string inputReference, int64_t durationUs) {
string operation = "encode";
- mTimer->dumpStatistics(operation, inputReference, durationUs);
+ mStats->dumpStatistics(operation, inputReference, durationUs);
}
int32_t Encoder::encode(string &codecName, ifstream &eleStream, size_t eleSize,
@@ -192,11 +192,11 @@
const char *s = AMediaFormat_toString(mFormat);
ALOGV("Input format: %s\n", s);
- int64_t sTime = mTimer->getCurTime();
+ int64_t sTime = mStats->getCurTime();
mCodec = createMediaCodec(mFormat, mMime, codecName, true /*isEncoder*/);
if (!mCodec) return AMEDIA_ERROR_INVALID_OBJECT;
- int64_t eTime = mTimer->getCurTime();
- int64_t timeTaken = mTimer->getTimeDiff(sTime, eTime);
+ int64_t eTime = mStats->getCurTime();
+ int64_t timeTaken = mStats->getTimeDiff(sTime, eTime);
if (!strncmp(mMime, "video/", 6)) {
mParams.frameSize = mParams.width * mParams.height * 3 / 2;
@@ -215,20 +215,19 @@
}
mParams.numFrames = (mInputBufferSize + mParams.frameSize - 1) / mParams.frameSize;
- sTime = mTimer->getCurTime();
+ sTime = mStats->getCurTime();
if (asyncMode) {
AMediaCodecOnAsyncNotifyCallback aCB = {OnInputAvailableCB, OnOutputAvailableCB,
OnFormatChangedCB, OnErrorCB};
AMediaCodec_setAsyncNotifyCallback(mCodec, aCB, this);
- CallBackHandle *callbackHandle = new CallBackHandle();
- callbackHandle->mIOThread = thread(&CallBackHandle::ioThread, this);
+ mIOThread = thread(&CallBackHandle::ioThread, this);
}
AMediaCodec_start(mCodec);
- eTime = mTimer->getCurTime();
- timeTaken += mTimer->getTimeDiff(sTime, eTime);
- mTimer->setInitTime(timeTaken);
+ eTime = mStats->getCurTime();
+ timeTaken += mStats->getTimeDiff(sTime, eTime);
+ mStats->setInitTime(timeTaken);
- mTimer->setStartTime();
+ mStats->setStartTime();
if (!asyncMode) {
while (!mSawOutputEOS && !mSignalledError) {
// Queue input data
@@ -238,7 +237,7 @@
ALOGE("AMediaCodec_dequeueInputBuffer returned invalid index %zd\n", inIdx);
return AMEDIA_ERROR_IO;
} else if (inIdx >= 0) {
- mTimer->addInputTime();
+ mStats->addInputTime();
onInputAvailable(mCodec, inIdx);
}
}
@@ -251,7 +250,7 @@
const char *s = AMediaFormat_toString(mFormat);
ALOGI("Output format: %s\n", s);
} else if (outIdx >= 0) {
- mTimer->addOutputTime();
+ mStats->addOutputTime();
onOutputAvailable(mCodec, outIdx, &info);
} else if (!(outIdx == AMEDIACODEC_INFO_TRY_AGAIN_LATER ||
outIdx == AMEDIACODEC_INFO_OUTPUT_BUFFERS_CHANGED)) {
diff --git a/media/tests/benchmark/src/native/encoder/Encoder.h b/media/tests/benchmark/src/native/encoder/Encoder.h
index 903d52b..75d9941 100644
--- a/media/tests/benchmark/src/native/encoder/Encoder.h
+++ b/media/tests/benchmark/src/native/encoder/Encoder.h
@@ -24,7 +24,7 @@
#include <thread>
#include "BenchmarkCommon.h"
-#include "Timer.h"
+#include "Stats.h"
struct encParameter {
int32_t bitrate = -1;
@@ -45,18 +45,13 @@
Encoder()
: mCodec(nullptr),
mFormat(nullptr),
- mTimer(nullptr),
mNumInputFrame(0),
mNumOutputFrame(0),
mSawInputEOS(false),
mSawOutputEOS(false),
mSignalledError(false) {}
- virtual ~Encoder() {
- if (mTimer) delete mTimer;
- }
-
- Timer *getTimer() override { return mTimer; }
+ virtual ~Encoder() {}
// Encoder related utilities
void setupEncoder();
@@ -83,8 +78,6 @@
AMediaCodec *mCodec;
AMediaFormat *mFormat;
- Timer *mTimer;
-
int32_t mNumInputFrame;
int32_t mNumOutputFrame;
bool mSawInputEOS;
diff --git a/media/tests/benchmark/src/native/extractor/Extractor.cpp b/media/tests/benchmark/src/native/extractor/Extractor.cpp
index 0726ae3..b4cad0b 100644
--- a/media/tests/benchmark/src/native/extractor/Extractor.cpp
+++ b/media/tests/benchmark/src/native/extractor/Extractor.cpp
@@ -22,21 +22,21 @@
#include "Extractor.h"
int32_t Extractor::initExtractor(int32_t fd, size_t fileSize) {
- mTimer = new Timer();
+ mStats = new Stats();
mFrameBuf = (uint8_t *)calloc(kMaxBufferSize, sizeof(uint8_t));
if (!mFrameBuf) return -1;
- int64_t sTime = mTimer->getCurTime();
+ int64_t sTime = mStats->getCurTime();
mExtractor = AMediaExtractor_new();
if (!mExtractor) return AMEDIACODEC_ERROR_INSUFFICIENT_RESOURCE;
media_status_t status = AMediaExtractor_setDataSourceFd(mExtractor, fd, 0, fileSize);
if (status != AMEDIA_OK) return status;
- int64_t eTime = mTimer->getCurTime();
- int64_t timeTaken = mTimer->getTimeDiff(sTime, eTime);
- mTimer->setInitTime(timeTaken);
+ int64_t eTime = mStats->getCurTime();
+ int64_t timeTaken = mStats->getTimeDiff(sTime, eTime);
+ mStats->setInitTime(timeTaken);
return AMediaExtractor_getTrackCount(mExtractor);
}
@@ -52,6 +52,7 @@
bool csdFound = AMediaFormat_getBuffer(mFormat, csdName, &csdBuffer, &size);
if (!csdFound) return nullptr;
frameInfo.size = (int32_t)size;
+ mStats->addFrameSize(frameInfo.size);
return csdBuffer;
}
@@ -62,6 +63,7 @@
frameInfo.flags = AMediaExtractor_getSampleFlags(mExtractor);
frameInfo.size = size;
+ mStats->addFrameSize(frameInfo.size);
frameInfo.presentationTimeUs = AMediaExtractor_getSampleTime(mExtractor);
AMediaExtractor_advance(mExtractor);
@@ -92,11 +94,11 @@
idx++;
}
- mTimer->setStartTime();
+ mStats->setStartTime();
while (1) {
int32_t status = getFrameSample(frameInfo);
if (status || !frameInfo.size) break;
- mTimer->addOutputTime();
+ mStats->addOutputTime();
}
if (mFormat) {
@@ -111,7 +113,7 @@
void Extractor::dumpStatistics(string inputReference) {
string operation = "extract";
- mTimer->dumpStatistics(operation, inputReference, mDurationUs);
+ mStats->dumpStatistics(operation, inputReference, mDurationUs);
}
void Extractor::deInitExtractor() {
@@ -120,14 +122,14 @@
mFrameBuf = nullptr;
}
- int64_t sTime = mTimer->getCurTime();
+ int64_t sTime = mStats->getCurTime();
if (mExtractor) {
// TODO: (b/140128505) Multiple calls result in DoS.
// Uncomment call to AMediaExtractor_delete() once this is resolved
// AMediaExtractor_delete(mExtractor);
mExtractor = nullptr;
}
- int64_t eTime = mTimer->getCurTime();
- int64_t deInitTime = mTimer->getTimeDiff(sTime, eTime);
- mTimer->setDeInitTime(deInitTime);
+ int64_t eTime = mStats->getCurTime();
+ int64_t deInitTime = mStats->getTimeDiff(sTime, eTime);
+ mStats->setDeInitTime(deInitTime);
}
diff --git a/media/tests/benchmark/src/native/extractor/Extractor.h b/media/tests/benchmark/src/native/extractor/Extractor.h
index 361bcd7..4c39a72 100644
--- a/media/tests/benchmark/src/native/extractor/Extractor.h
+++ b/media/tests/benchmark/src/native/extractor/Extractor.h
@@ -20,19 +20,19 @@
#include <media/NdkMediaExtractor.h>
#include "BenchmarkCommon.h"
-#include "Timer.h"
+#include "Stats.h"
class Extractor {
public:
Extractor()
: mFormat(nullptr),
mExtractor(nullptr),
- mTimer(nullptr),
+ mStats(nullptr),
mFrameBuf{nullptr},
mDurationUs{0} {}
~Extractor() {
- if (mTimer) delete mTimer;
+ if (mStats) delete mStats;
}
int32_t initExtractor(int32_t fd, size_t fileSize);
@@ -58,7 +58,7 @@
private:
AMediaFormat *mFormat;
AMediaExtractor *mExtractor;
- Timer *mTimer;
+ Stats *mStats;
uint8_t *mFrameBuf;
int64_t mDurationUs;
};
diff --git a/media/tests/benchmark/src/native/muxer/Muxer.cpp b/media/tests/benchmark/src/native/muxer/Muxer.cpp
index 877f7ad..b297a66 100644
--- a/media/tests/benchmark/src/native/muxer/Muxer.cpp
+++ b/media/tests/benchmark/src/native/muxer/Muxer.cpp
@@ -24,9 +24,9 @@
int32_t Muxer::initMuxer(int32_t fd, MUXER_OUTPUT_T outputFormat) {
if (!mFormat) mFormat = mExtractor->getFormat();
- if (!mTimer) mTimer = new Timer();
+ if (!mStats) mStats = new Stats();
- int64_t sTime = mTimer->getCurTime();
+ int64_t sTime = mStats->getCurTime();
mMuxer = AMediaMuxer_new(fd, (OutputFormat)outputFormat);
if (!mMuxer) {
cout << "[ WARN ] Test Skipped. Unable to create muxer \n";
@@ -42,14 +42,14 @@
return index;
}
AMediaMuxer_start(mMuxer);
- int64_t eTime = mTimer->getCurTime();
- int64_t timeTaken = mTimer->getTimeDiff(sTime, eTime);
- mTimer->setInitTime(timeTaken);
+ int64_t eTime = mStats->getCurTime();
+ int64_t timeTaken = mStats->getTimeDiff(sTime, eTime);
+ mStats->setInitTime(timeTaken);
return AMEDIA_OK;
}
void Muxer::deInitMuxer() {
- int64_t sTime = mTimer->getCurTime();
+ int64_t sTime = mStats->getCurTime();
if (mFormat) {
AMediaFormat_delete(mFormat);
mFormat = nullptr;
@@ -57,24 +57,24 @@
if (!mMuxer) return;
AMediaMuxer_stop(mMuxer);
AMediaMuxer_delete(mMuxer);
- int64_t eTime = mTimer->getCurTime();
- int64_t timeTaken = mTimer->getTimeDiff(sTime, eTime);
- mTimer->setDeInitTime(timeTaken);
+ int64_t eTime = mStats->getCurTime();
+ int64_t timeTaken = mStats->getTimeDiff(sTime, eTime);
+ mStats->setDeInitTime(timeTaken);
}
void Muxer::resetMuxer() {
- if (mTimer) mTimer->resetTimers();
+ if (mStats) mStats->reset();
}
void Muxer::dumpStatistics(string inputReference) {
string operation = "mux";
- mTimer->dumpStatistics(operation, inputReference, mExtractor->getClipDuration());
+ mStats->dumpStatistics(operation, inputReference, mExtractor->getClipDuration());
}
int32_t Muxer::mux(uint8_t *inputBuffer, vector<AMediaCodecBufferInfo> &frameInfos) {
// Mux frame data
size_t frameIdx = 0;
- mTimer->setStartTime();
+ mStats->setStartTime();
while (frameIdx < frameInfos.size()) {
AMediaCodecBufferInfo info = frameInfos.at(frameIdx);
media_status_t status = AMediaMuxer_writeSampleData(mMuxer, 0, inputBuffer, &info);
@@ -82,7 +82,8 @@
ALOGE("Error in AMediaMuxer_writeSampleData");
return status;
}
- mTimer->addOutputTime();
+ mStats->addOutputTime();
+ mStats->addFrameSize(info.size);
frameIdx++;
}
return AMEDIA_OK;
diff --git a/media/tests/benchmark/src/native/muxer/Muxer.h b/media/tests/benchmark/src/native/muxer/Muxer.h
index 154fd20..eee3146 100644
--- a/media/tests/benchmark/src/native/muxer/Muxer.h
+++ b/media/tests/benchmark/src/native/muxer/Muxer.h
@@ -20,7 +20,7 @@
#include <media/NdkMediaMuxer.h>
#include "BenchmarkCommon.h"
-#include "Timer.h"
+#include "Stats.h"
#include "Extractor.h"
typedef enum {
@@ -33,14 +33,14 @@
class Muxer {
public:
- Muxer() : mFormat(nullptr), mMuxer(nullptr), mTimer(nullptr) { mExtractor = new Extractor(); }
+ Muxer() : mFormat(nullptr), mMuxer(nullptr), mStats(nullptr) { mExtractor = new Extractor(); }
virtual ~Muxer() {
- if (mTimer) delete mTimer;
+ if (mStats) delete mStats;
if (mExtractor) delete mExtractor;
}
- Timer *getTimer() { return mTimer; }
+ Stats *getStats() { return mStats; }
Extractor *getExtractor() { return mExtractor; }
/* Muxer related utilities */
@@ -57,7 +57,7 @@
AMediaFormat *mFormat;
AMediaMuxer *mMuxer;
Extractor *mExtractor;
- Timer *mTimer;
+ Stats *mStats;
};
#endif // __MUXER_H__