Codec2 pass standard QP bounding keys
Have the Codec2 framework pass the newly standardized QP bounding
information through to the underlying codecs.
Bug: 181830609
Test: vq framework testing
Change-Id: I837dff6a7a12ab782c70016f78b582ca77fe168c
diff --git a/media/codec2/core/include/C2Config.h b/media/codec2/core/include/C2Config.h
index 752140a..8e8a08b 100644
--- a/media/codec2/core/include/C2Config.h
+++ b/media/codec2/core/include/C2Config.h
@@ -187,6 +187,8 @@
kParamIndexPictureType,
kParamIndexHdr10PlusMetadata,
+ kParamIndexQuantization,
+
/* ------------------------------------ video components ------------------------------------ */
kParamIndexFrameRate = C2_PARAM_INDEX_VIDEO_PARAM_START,
@@ -708,6 +710,38 @@
C2StreamProfileLevelInfo;
constexpr char C2_PARAMKEY_PROFILE_LEVEL[] = "coded.pl";
+struct C2QuantizationStruct {
+ int32_t iMax; ///< max/min for I frames
+ int32_t iMin;
+ int32_t pMax; ///< max/min for P frames
+ int32_t pMin;
+ int32_t bMax; ///< max/min for B frames
+ int32_t bMin;
+
+ C2QuantizationStruct(
+ int32_t iMax_ = INT32_MAX,
+ int32_t iMin_ = INT32_MIN,
+ int32_t pMax_ = INT32_MAX,
+ int32_t pMin_ = INT32_MIN,
+ int32_t bMax_ = INT32_MAX,
+ int32_t bMin_ = INT32_MIN)
+ : iMax(iMax_), iMin(iMin_),
+ pMax(pMax_), pMin(pMin_),
+ bMax(bMax_), bMin(bMin_) { }
+
+ DEFINE_AND_DESCRIBE_C2STRUCT(Quantization) // reference?
+ C2FIELD(iMax, "i-max")
+ C2FIELD(iMin, "i-min")
+ C2FIELD(pMax, "p-max")
+ C2FIELD(pMin, "p-min")
+ C2FIELD(bMax, "b-max")
+ C2FIELD(bMin, "b-min")
+};
+
+typedef C2StreamParam<C2Info, C2QuantizationStruct, kParamIndexQuantization>
+ C2StreamQuantizationInfo;
+constexpr char C2_PARAMKEY_QUANTIZATION[] = "coded.qp";
+
/**
* Codec-specific initialization data.
*
diff --git a/media/codec2/sfplugin/CCodecConfig.cpp b/media/codec2/sfplugin/CCodecConfig.cpp
index d3814fb..2190f46 100644
--- a/media/codec2/sfplugin/CCodecConfig.cpp
+++ b/media/codec2/sfplugin/CCodecConfig.cpp
@@ -727,6 +727,19 @@
return C2Value();
}));
+ add(ConfigMapper(KEY_VIDEO_QP_I_MAX, C2_PARAMKEY_QUANTIZATION, "i-max")
+ .limitTo(D::VIDEO & D::ENCODER));
+ add(ConfigMapper(KEY_VIDEO_QP_I_MIN, C2_PARAMKEY_QUANTIZATION, "i-min")
+ .limitTo(D::VIDEO & D::ENCODER));
+ add(ConfigMapper(KEY_VIDEO_QP_P_MAX, C2_PARAMKEY_QUANTIZATION, "p-max")
+ .limitTo(D::VIDEO & D::ENCODER));
+ add(ConfigMapper(KEY_VIDEO_QP_P_MIN, C2_PARAMKEY_QUANTIZATION, "p-min")
+ .limitTo(D::VIDEO & D::ENCODER));
+ add(ConfigMapper(KEY_VIDEO_QP_B_MAX, C2_PARAMKEY_QUANTIZATION, "b-max")
+ .limitTo(D::VIDEO & D::ENCODER));
+ add(ConfigMapper(KEY_VIDEO_QP_B_MIN, C2_PARAMKEY_QUANTIZATION, "b-min")
+ .limitTo(D::VIDEO & D::ENCODER));
+
// convert to dBFS and add default
add(ConfigMapper(KEY_AAC_DRC_TARGET_REFERENCE_LEVEL, C2_PARAMKEY_DRC_TARGET_REFERENCE_LEVEL, "value")
.limitTo(D::AUDIO & D::DECODER & (D::CONFIG | D::PARAM | D::READ))