diff options
author | Marco Nelissen <marcone@google.com> | 2014-05-06 22:46:09 +0000 |
---|---|---|
committer | Android (Google) Code Review <android-gerrit@google.com> | 2014-05-06 22:46:09 +0000 |
commit | 8e085cbeccb1138d52a0a423af02e6ab41b4fee4 (patch) | |
tree | 1d8b84f794ba38e0670e0ce7321d5ee00c90fc61 /media/ndk | |
parent | 14136039b752376240698e8b422c76de01488bc5 (diff) | |
parent | 7c9b141d551fde406f199f0dd21582f8551aea23 (diff) | |
download | frameworks_av-8e085cbeccb1138d52a0a423af02e6ab41b4fee4.zip frameworks_av-8e085cbeccb1138d52a0a423af02e6ab41b4fee4.tar.gz frameworks_av-8e085cbeccb1138d52a0a423af02e6ab41b4fee4.tar.bz2 |
Merge "MediaFormat owns its strings"
Diffstat (limited to 'media/ndk')
-rw-r--r-- | media/ndk/NdkMediaFormat.cpp | 17 |
1 files changed, 15 insertions, 2 deletions
diff --git a/media/ndk/NdkMediaFormat.cpp b/media/ndk/NdkMediaFormat.cpp index 359f37e..6f69f8d 100644 --- a/media/ndk/NdkMediaFormat.cpp +++ b/media/ndk/NdkMediaFormat.cpp @@ -34,6 +34,8 @@ using namespace android; struct AMediaFormat { sp<AMessage> mFormat; + String8 mDebug; + KeyedVector<String8, String8> mStringCache; }; extern "C" { @@ -135,7 +137,8 @@ const char* AMediaFormat_toString(AMediaFormat *mData) { } } ret.append("}"); - return strdup(ret.string()); + mData->mDebug = ret; + return mData->mDebug.string(); } bool AMediaFormat_getInt32(AMediaFormat* mData, const char *name, int32_t *out) { @@ -159,9 +162,19 @@ bool AMediaFormat_getSize(AMediaFormat* mData, const char *name, size_t *out) { } bool AMediaFormat_getString(AMediaFormat* mData, const char *name, const char **out) { + + for (size_t i = 0; i < mData->mStringCache.size(); i++) { + if (strcmp(mData->mStringCache.keyAt(i).string(), name) == 0) { + mData->mStringCache.removeItemsAt(i, 1); + break; + } + } + AString tmp; if (mData->mFormat->findString(name, &tmp)) { - *out = strdup(tmp.c_str()); + String8 ret(tmp.c_str()); + mData->mStringCache.add(String8(name), ret); + *out = ret.string(); return true; } return false; |