CCodec: Allow bitrate to be not set in CQ mode for video encoders
In constant quality mode, bitrate field is optional for video encoders.
Update the check to look for quality for CQ Mode and bitrate for other
modes.
Bug: 125010575
Test: Manual with HEIF encoding application
Change-Id: Icb294e1becaf47c8fdabb6839d1aa57178e17737
diff --git a/media/codec2/sfplugin/CCodec.cpp b/media/codec2/sfplugin/CCodec.cpp
index 5f60378..9c679aa 100644
--- a/media/codec2/sfplugin/CCodec.cpp
+++ b/media/codec2/sfplugin/CCodec.cpp
@@ -742,10 +742,21 @@
return BAD_VALUE;
}
if ((config->mDomain & Config::IS_ENCODER) && (config->mDomain & Config::IS_VIDEO)) {
- if (!msg->findInt32(KEY_BIT_RATE, &i32)
- && !msg->findFloat(KEY_BIT_RATE, &flt)) {
- ALOGD("bitrate is missing, which is required for video encoders.");
- return BAD_VALUE;
+ C2Config::bitrate_mode_t mode = C2Config::BITRATE_VARIABLE;
+ if (msg->findInt32(KEY_BITRATE_MODE, &i32)) {
+ mode = (C2Config::bitrate_mode_t) i32;
+ }
+ if (mode == BITRATE_MODE_CQ) {
+ if (!msg->findInt32(KEY_QUALITY, &i32)) {
+ ALOGD("quality is missing, which is required for video encoders in CQ.");
+ return BAD_VALUE;
+ }
+ } else {
+ if (!msg->findInt32(KEY_BIT_RATE, &i32)
+ && !msg->findFloat(KEY_BIT_RATE, &flt)) {
+ ALOGD("bitrate is missing, which is required for video encoders.");
+ return BAD_VALUE;
+ }
}
if (!msg->findInt32(KEY_I_FRAME_INTERVAL, &i32)
&& !msg->findFloat(KEY_I_FRAME_INTERVAL, &flt)) {