Transcoder: Add HDR -> SDR unit test using sample plugin.
This commits adds a unit test that force enables loading
sample HDR plugin loading and tries to transcode and HDR10
video. If the codec supports the conversion the test checks
that the transcoded video is SDR. If the codec does not
support the conversion the test checks that transcoding
returns unsupported.
Bug: 180011717
Test: atest HdrTranscodeTests
Change-Id: I9cb26589d320744670b619faa4b35ce5c0541e91
diff --git a/media/libmediatranscoding/transcoder/tests/MediaTranscoderTests.cpp b/media/libmediatranscoding/transcoder/tests/MediaTranscoderTests.cpp
index 4e33ec3..b7c7bd8 100644
--- a/media/libmediatranscoding/transcoder/tests/MediaTranscoderTests.cpp
+++ b/media/libmediatranscoding/transcoder/tests/MediaTranscoderTests.cpp
@@ -27,6 +27,8 @@
#include <media/MediaTranscoder.h>
#include <media/NdkCommon.h>
+#include "TranscoderTestUtils.h"
+
namespace android {
#define DEFINE_FORMAT_VALUE_EQUAL_FUNC(_type, _typeName) \
@@ -53,66 +55,6 @@
{AMEDIAFORMAT_KEY_SAR_HEIGHT, equalInt32}, {AMEDIAFORMAT_KEY_ROTATION, equalInt32},
};
-class TestCallbacks : public MediaTranscoder::CallbackInterface {
-public:
- virtual void onFinished(const MediaTranscoder* transcoder __unused) override {
- std::unique_lock<std::mutex> lock(mMutex);
- EXPECT_FALSE(mFinished);
- mFinished = true;
- mCondition.notify_all();
- }
-
- virtual void onError(const MediaTranscoder* transcoder __unused,
- media_status_t error) override {
- std::unique_lock<std::mutex> lock(mMutex);
- EXPECT_NE(error, AMEDIA_OK);
- EXPECT_FALSE(mFinished);
- mFinished = true;
- mStatus = error;
- mCondition.notify_all();
- }
-
- virtual void onProgressUpdate(const MediaTranscoder* transcoder __unused,
- int32_t progress) override {
- std::unique_lock<std::mutex> lock(mMutex);
- if (progress > 0 && !mProgressMade) {
- mProgressMade = true;
- mCondition.notify_all();
- }
- }
-
- virtual void onHeartBeat(const MediaTranscoder* transcoder __unused) override {
- std::unique_lock<std::mutex> lock(mMutex);
- mHeartBeatCount++;
- }
-
- virtual void onCodecResourceLost(const MediaTranscoder* transcoder __unused,
- const std::shared_ptr<ndk::ScopedAParcel>& pausedState
- __unused) override {}
-
- void waitForTranscodingFinished() {
- std::unique_lock<std::mutex> lock(mMutex);
- while (!mFinished) {
- mCondition.wait(lock);
- }
- }
-
- void waitForProgressMade() {
- std::unique_lock<std::mutex> lock(mMutex);
- while (!mProgressMade && !mFinished) {
- mCondition.wait(lock);
- }
- }
- media_status_t mStatus = AMEDIA_OK;
- bool mFinished = false;
- int32_t mHeartBeatCount = 0;
-
-private:
- std::mutex mMutex;
- std::condition_variable mCondition;
- bool mProgressMade = false;
-};
-
// Write-only, create file if non-existent, don't overwrite existing file.
static constexpr int kOpenFlags = O_WRONLY | O_CREAT | O_EXCL;
// User R+W permission.
@@ -125,7 +67,7 @@
void SetUp() override {
LOG(DEBUG) << "MediaTranscoderTests set up";
- mCallbacks = std::make_shared<TestCallbacks>();
+ mCallbacks = std::make_shared<TestTranscoderCallbacks>();
ABinderProcess_startThreadPool();
}
@@ -325,7 +267,7 @@
close(dstFd);
}
- std::shared_ptr<TestCallbacks> mCallbacks;
+ std::shared_ptr<TestTranscoderCallbacks> mCallbacks;
std::shared_ptr<AMediaFormat> mSourceVideoFormat;
};
@@ -380,7 +322,7 @@
const char* destPath1 = "/data/local/tmp/MediaTranscoder_CustomBitrate_2Mbps.MP4";
const char* destPath2 = "/data/local/tmp/MediaTranscoder_CustomBitrate_8Mbps.MP4";
testTranscodeVideo(srcPath, destPath1, AMEDIA_MIMETYPE_VIDEO_AVC, 2 * 1000 * 1000);
- mCallbacks = std::make_shared<TestCallbacks>();
+ mCallbacks = std::make_shared<TestTranscoderCallbacks>();
testTranscodeVideo(srcPath, destPath2, AMEDIA_MIMETYPE_VIDEO_AVC, 8 * 1000 * 1000);
// The source asset is very short and heavily compressed from the beginning so don't expect the
@@ -410,7 +352,7 @@
EXPECT_EQ(transcodeHelper(srcPath, destPath, getAVCVideoFormat, kCancelAfterProgress),
AMEDIA_OK);
EXPECT_FALSE(mCallbacks->mFinished);
- mCallbacks = std::make_shared<TestCallbacks>();
+ mCallbacks = std::make_shared<TestTranscoderCallbacks>();
}
}
@@ -422,7 +364,7 @@
EXPECT_EQ(transcodeHelper(srcPath, destPath, getAVCVideoFormat, kCancelAfterStart),
AMEDIA_OK);
EXPECT_FALSE(mCallbacks->mFinished);
- mCallbacks = std::make_shared<TestCallbacks>();
+ mCallbacks = std::make_shared<TestTranscoderCallbacks>();
}
}
@@ -434,7 +376,7 @@
EXPECT_EQ(transcodeHelper(srcPath, destPath, getAVCVideoFormat, kPauseAfterProgress),
AMEDIA_OK);
EXPECT_FALSE(mCallbacks->mFinished);
- mCallbacks = std::make_shared<TestCallbacks>();
+ mCallbacks = std::make_shared<TestTranscoderCallbacks>();
}
}
@@ -446,7 +388,7 @@
EXPECT_EQ(transcodeHelper(srcPath, destPath, getAVCVideoFormat, kPauseAfterStart),
AMEDIA_OK);
EXPECT_FALSE(mCallbacks->mFinished);
- mCallbacks = std::make_shared<TestCallbacks>();
+ mCallbacks = std::make_shared<TestTranscoderCallbacks>();
}
}