Enumerate all hevc encoders to find one that support CQ @ 512x512 size
bug: 132905160
test: ImageReaderTest#testHeic
Change-Id: I497b203f7e21299eb4e322af4d4c5c925cf5a48a
diff --git a/services/camera/libcameraservice/api2/HeicCompositeStream.cpp b/services/camera/libcameraservice/api2/HeicCompositeStream.cpp
index 743c816..5a87134 100644
--- a/services/camera/libcameraservice/api2/HeicCompositeStream.cpp
+++ b/services/camera/libcameraservice/api2/HeicCompositeStream.cpp
@@ -330,9 +330,9 @@
}
bool HeicCompositeStream::isSizeSupportedByHeifEncoder(int32_t width, int32_t height,
- bool* useHeic, bool* useGrid, int64_t* stall) {
+ bool* useHeic, bool* useGrid, int64_t* stall, AString* hevcName) {
static HeicEncoderInfoManager& heicManager = HeicEncoderInfoManager::getInstance();
- return heicManager.isSizeSupported(width, height, useHeic, useGrid, stall);
+ return heicManager.isSizeSupported(width, height, useHeic, useGrid, stall, hevcName);
}
bool HeicCompositeStream::isInMemoryTempFileSupported() {
@@ -1115,8 +1115,9 @@
ALOGV("%s", __FUNCTION__);
bool useGrid = false;
+ AString hevcName;
bool isSizeSupported = isSizeSupportedByHeifEncoder(width, height,
- &mUseHeic, &useGrid, nullptr);
+ &mUseHeic, &useGrid, nullptr, &hevcName);
if (!isSizeSupported) {
ALOGE("%s: Encoder doesnt' support size %u x %u!",
__FUNCTION__, width, height);
@@ -1138,7 +1139,11 @@
}
// Create HEIC/HEVC codec.
- mCodec = MediaCodec::CreateByType(mCodecLooper, desiredMime, true /*encoder*/);
+ if (mUseHeic) {
+ mCodec = MediaCodec::CreateByType(mCodecLooper, desiredMime, true /*encoder*/);
+ } else {
+ mCodec = MediaCodec::CreateByComponentName(mCodecLooper, hevcName);
+ }
if (mCodec == nullptr) {
ALOGE("%s: Failed to create codec for %s", __FUNCTION__, desiredMime);
return NO_INIT;