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

Commit d6648a9b authored by Lajos Molnar's avatar Lajos Molnar
Browse files

codec2: add setFlexSize() to flexible C2Param

Bug: 165694889
Change-Id: I23847ac72638cbfe4279dd9fcfc47eacc7021e3b
parent df3f88bc
Loading
Loading
Loading
Loading
+8 −0
Original line number Diff line number Diff line
@@ -508,6 +508,14 @@ protected:
        return _mIndex.setPort(output);
    }

    /// sets the size of this parameter.
    inline void setSize(size_t size) {
        if (size < sizeof(C2Param)) {
            size = 0;
        }
        _mSize = c2_min(size, _mSize);
    }

public:
    /// invalidate this parameter. There is no recovery from this call; e.g. parameter
    /// cannot be 'corrected' to be valid.
+5 −0
Original line number Diff line number Diff line
@@ -270,6 +270,11 @@ protected:
        } \
        return 0; \
    } \
    inline void setFlexCount(size_t count) { \
        if (count < flexCount()) { \
            this->setSize(sizeof(_Type) + _Type::FLEX_SIZE * count); \
        } \
    } \

/// Mark flexible member variable and make structure flexible.
#define FLEX(cls, m) \
+11 −0
Original line number Diff line number Diff line
@@ -2328,6 +2328,17 @@ TEST_F(C2ParamTest, FlexParamOpsTest) {
        static_assert(std::is_same<decltype(blobValue->m.value), uint8_t[]>::value, "should be uint8_t[]");
        EXPECT_EQ(0, memcmp(blobValue->m.value, "ABCD\0", 6));
        EXPECT_EQ(6u, blobValue->flexCount());
        blobValue->setFlexCount(7u); // increasing the count does not change it
        EXPECT_EQ(6u, blobValue->flexCount());
        blobValue->setFlexCount(2u); // decreasing the count changes it to it
        EXPECT_EQ(2u, blobValue->flexCount());
        blobValue->setFlexCount(0u); // can decrease to 0 and blob remains valid
        EXPECT_EQ(0u, blobValue->flexCount());
        EXPECT_TRUE(*blobValue);
        blobValue->invalidate(); // flex params can be invalidated => results in 0 size
        EXPECT_FALSE(*blobValue);
        EXPECT_EQ(0u, blobValue->size());

        std::vector<C2FieldDescriptor> fields = blobValue->FieldList();
        EXPECT_EQ(1u, fields.size());
        EXPECT_EQ(FD::BLOB, fields.cbegin()->type());