Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 9470d46b authored by Ray Essick's avatar Ray Essick
Browse files

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
parent 3435b897
Loading
Loading
Loading
Loading
+34 −0
Original line number Diff line number Diff line
@@ -187,6 +187,8 @@ enum C2ParamIndexKind : C2Param::type_index_t {
    kParamIndexPictureType,
    kParamIndexHdr10PlusMetadata,

    kParamIndexQuantization,

    /* ------------------------------------ video components ------------------------------------ */

    kParamIndexFrameRate = C2_PARAM_INDEX_VIDEO_PARAM_START,
@@ -708,6 +710,38 @@ typedef C2StreamParam<C2Info, C2ProfileLevelStruct, kParamIndexProfileLevel>
        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.
 *
+13 −0
Original line number Diff line number Diff line
@@ -727,6 +727,19 @@ void CCodecConfig::initializeStandardParams() {
            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))