Loading media/libstagefright/foundation/AMessage.cpp +43 −0 Original line number Diff line number Diff line Loading @@ -944,4 +944,47 @@ const char *AMessage::getEntryNameAt(size_t index, Type *type) const { return mItems[index].mName; } status_t AMessage::setEntryNameAt(size_t index, const char *name) { if (index >= mNumItems) { return BAD_INDEX; } if (name == nullptr) { return BAD_VALUE; } if (!strcmp(name, mItems[index].mName)) { return OK; // name has not changed } size_t len = strlen(name); if (findItemIndex(name, len) < mNumItems) { return ALREADY_EXISTS; } delete[] mItems[index].mName; mItems[index].mName = nullptr; mItems[index].setName(name, len); return OK; } status_t AMessage::removeEntryAt(size_t index) { if (index >= mNumItems) { return BAD_INDEX; } // delete entry data and objects --mNumItems; delete[] mItems[index].mName; mItems[index].mName = nullptr; freeItemValue(&mItems[index]); // swap entry with last entry and clear last entry's data if (index < mNumItems) { mItems[index] = mItems[mNumItems]; mItems[mNumItems].mName = nullptr; mItems[mNumItems].mType = kTypeInt32; } return OK; } size_t AMessage::findEntryByName(const char *name) const { return name == nullptr ? countEntries() : findItemIndex(name, strlen(name)); } } // namespace android media/libstagefright/foundation/include/media/stagefright/foundation/AMessage.h +30 −0 Original line number Diff line number Diff line Loading @@ -183,6 +183,36 @@ struct AMessage : public RefBase { size_t countEntries() const; const char *getEntryNameAt(size_t index, Type *type) const; /** * Finds an entry by name and returns its index. * * \retval countEntries() if the entry is not found. */ size_t findEntryByName(const char *name) const; /** * Sets the name of an entry based on index. * * \param index index of the entry * \param name (new) name of the entry * * \retval OK the name was set successfully * \retval BAD_INDEX invalid index * \retval BAD_VALUE name is invalid (null) * \retval ALREADY_EXISTS name is already used by another entry */ status_t setEntryNameAt(size_t index, const char *name); /** * Removes an entry based on index. * * \param index index of the entry * * \retval OK the entry was removed successfully * \retval BAD_INDEX invalid index */ status_t removeEntryAt(size_t index); protected: virtual ~AMessage(); Loading Loading
media/libstagefright/foundation/AMessage.cpp +43 −0 Original line number Diff line number Diff line Loading @@ -944,4 +944,47 @@ const char *AMessage::getEntryNameAt(size_t index, Type *type) const { return mItems[index].mName; } status_t AMessage::setEntryNameAt(size_t index, const char *name) { if (index >= mNumItems) { return BAD_INDEX; } if (name == nullptr) { return BAD_VALUE; } if (!strcmp(name, mItems[index].mName)) { return OK; // name has not changed } size_t len = strlen(name); if (findItemIndex(name, len) < mNumItems) { return ALREADY_EXISTS; } delete[] mItems[index].mName; mItems[index].mName = nullptr; mItems[index].setName(name, len); return OK; } status_t AMessage::removeEntryAt(size_t index) { if (index >= mNumItems) { return BAD_INDEX; } // delete entry data and objects --mNumItems; delete[] mItems[index].mName; mItems[index].mName = nullptr; freeItemValue(&mItems[index]); // swap entry with last entry and clear last entry's data if (index < mNumItems) { mItems[index] = mItems[mNumItems]; mItems[mNumItems].mName = nullptr; mItems[mNumItems].mType = kTypeInt32; } return OK; } size_t AMessage::findEntryByName(const char *name) const { return name == nullptr ? countEntries() : findItemIndex(name, strlen(name)); } } // namespace android
media/libstagefright/foundation/include/media/stagefright/foundation/AMessage.h +30 −0 Original line number Diff line number Diff line Loading @@ -183,6 +183,36 @@ struct AMessage : public RefBase { size_t countEntries() const; const char *getEntryNameAt(size_t index, Type *type) const; /** * Finds an entry by name and returns its index. * * \retval countEntries() if the entry is not found. */ size_t findEntryByName(const char *name) const; /** * Sets the name of an entry based on index. * * \param index index of the entry * \param name (new) name of the entry * * \retval OK the name was set successfully * \retval BAD_INDEX invalid index * \retval BAD_VALUE name is invalid (null) * \retval ALREADY_EXISTS name is already used by another entry */ status_t setEntryNameAt(size_t index, const char *name); /** * Removes an entry based on index. * * \param index index of the entry * * \retval OK the entry was removed successfully * \retval BAD_INDEX invalid index */ status_t removeEntryAt(size_t index); protected: virtual ~AMessage(); Loading