diff options
author | Andreas Huber <andih@google.com> | 2010-07-01 14:11:31 -0700 |
---|---|---|
committer | Andreas Huber <andih@google.com> | 2010-07-01 16:36:55 -0700 |
commit | bbc2b8289458cfde931b133bad0c9d1026674ee7 (patch) | |
tree | f5132d9e83837fcf2b4214f2335d0d6be1b31b15 /media/libstagefright/foundation/AMessage.cpp | |
parent | 3eaa4e92dbebb5b27cb89f329f31fac6fb6fe1f0 (diff) | |
download | frameworks_av-bbc2b8289458cfde931b133bad0c9d1026674ee7.zip frameworks_av-bbc2b8289458cfde931b133bad0c9d1026674ee7.tar.gz frameworks_av-bbc2b8289458cfde931b133bad0c9d1026674ee7.tar.bz2 |
Added AMessage::debugString() for debugging purposes.
Change-Id: Id43ffd2c56d659dc29f37e277f8c7b38f11c1591
Diffstat (limited to 'media/libstagefright/foundation/AMessage.cpp')
-rw-r--r-- | media/libstagefright/foundation/AMessage.cpp | 103 |
1 files changed, 103 insertions, 0 deletions
diff --git a/media/libstagefright/foundation/AMessage.cpp b/media/libstagefright/foundation/AMessage.cpp index dfd1ae3..26c6d42 100644 --- a/media/libstagefright/foundation/AMessage.cpp +++ b/media/libstagefright/foundation/AMessage.cpp @@ -16,6 +16,8 @@ #include "AMessage.h" +#include <ctype.h> + #include "AAtomizer.h" #include "ADebug.h" #include "ALooperRoster.h" @@ -238,4 +240,105 @@ sp<AMessage> AMessage::dup() const { return msg; } +static void appendIndent(AString *s, int32_t indent) { + static const char kWhitespace[] = + " " + " "; + + CHECK_LT((size_t)indent, sizeof(kWhitespace)); + + s->append(kWhitespace, indent); +} + +static bool isFourcc(uint32_t what) { + return isprint(what & 0xff) + && isprint((what >> 8) & 0xff) + && isprint((what >> 16) & 0xff) + && isprint((what >> 24) & 0xff); +} + +AString AMessage::debugString(int32_t indent) const { + AString s = "AMessage(what = "; + + AString tmp; + if (isFourcc(mWhat)) { + tmp = StringPrintf( + "'%c%c%c%c'", + (char)(mWhat >> 24), + (char)((mWhat >> 16) & 0xff), + (char)((mWhat >> 8) & 0xff), + (char)(mWhat & 0xff)); + } else { + tmp = StringPrintf("0x%08x", mWhat); + } + s.append(tmp); + + if (mTarget != 0) { + tmp = StringPrintf(", target = %d", mTarget); + s.append(tmp); + } + s.append(") = {\n"); + + for (size_t i = 0; i < mNumItems; ++i) { + const Item &item = mItems[i]; + + switch (item.mType) { + case kTypeInt32: + tmp = StringPrintf( + "int32_t %s = %d", item.mName, item.u.int32Value); + break; + case kTypeInt64: + tmp = StringPrintf( + "int64_t %s = %lld", item.mName, item.u.int64Value); + break; + case kTypeSize: + tmp = StringPrintf( + "size_t %s = %d", item.mName, item.u.sizeValue); + break; + case kTypeFloat: + tmp = StringPrintf( + "float %s = %f", item.mName, item.u.floatValue); + break; + case kTypeDouble: + tmp = StringPrintf( + "double %s = %f", item.mName, item.u.doubleValue); + break; + case kTypePointer: + tmp = StringPrintf( + "void *%s = %p", item.mName, item.u.ptrValue); + break; + case kTypeString: + tmp = StringPrintf( + "string %s = \"%s\"", + item.mName, + item.u.stringValue->c_str()); + break; + case kTypeObject: + tmp = StringPrintf( + "RefBase *%s = %p", item.mName, item.u.refValue); + break; + case kTypeMessage: + tmp = StringPrintf( + "AMessage %s = %s", + item.mName, + static_cast<AMessage *>( + item.u.refValue)->debugString( + indent + strlen(item.mName) + 14).c_str()); + break; + default: + TRESPASS(); + } + + appendIndent(&s, indent); + s.append(" "); + s.append(tmp); + s.append("\n"); + } + + appendIndent(&s, indent); + s.append("}"); + + return s; +} + } // namespace android |