|
14 | 14 | * limitations under the License. |
15 | 15 | */ |
16 | 16 |
|
| 17 | +//#define LOG_NDEBUG 0 |
| 18 | +#define LOG_TAG "MetaData" |
| 19 | +#include <utils/Log.h> |
| 20 | + |
17 | 21 | #include <stdlib.h> |
18 | 22 | #include <string.h> |
19 | 23 |
|
@@ -282,5 +286,60 @@ void MetaData::typed_data::freeStorage() { |
282 | 286 | mSize = 0; |
283 | 287 | } |
284 | 288 |
|
| 289 | +String8 MetaData::typed_data::asString() const { |
| 290 | + String8 out; |
| 291 | + const void *data = storage(); |
| 292 | + switch(mType) { |
| 293 | + case TYPE_NONE: |
| 294 | + out = String8::format("no type, size %d)", mSize); |
| 295 | + break; |
| 296 | + case TYPE_C_STRING: |
| 297 | + out = String8::format("(char*) %s", (const char *)data); |
| 298 | + break; |
| 299 | + case TYPE_INT32: |
| 300 | + out = String8::format("(int32_t) %d", *(int32_t *)data); |
| 301 | + break; |
| 302 | + case TYPE_INT64: |
| 303 | + out = String8::format("(int64_t) %lld", *(int64_t *)data); |
| 304 | + break; |
| 305 | + case TYPE_FLOAT: |
| 306 | + out = String8::format("(float) %f", *(float *)data); |
| 307 | + break; |
| 308 | + case TYPE_POINTER: |
| 309 | + out = String8::format("(void*) %p", *(void **)data); |
| 310 | + break; |
| 311 | + case TYPE_RECT: |
| 312 | + { |
| 313 | + const Rect *r = (const Rect *)data; |
| 314 | + out = String8::format("Rect(%d, %d, %d, %d)", |
| 315 | + r->mLeft, r->mTop, r->mRight, r->mBottom); |
| 316 | + break; |
| 317 | + } |
| 318 | + |
| 319 | + default: |
| 320 | + out = String8::format("(unknown type %d, size %d)", mType, mSize); |
| 321 | + break; |
| 322 | + } |
| 323 | + return out; |
| 324 | +} |
| 325 | + |
| 326 | +static void MakeFourCCString(uint32_t x, char *s) { |
| 327 | + s[0] = x >> 24; |
| 328 | + s[1] = (x >> 16) & 0xff; |
| 329 | + s[2] = (x >> 8) & 0xff; |
| 330 | + s[3] = x & 0xff; |
| 331 | + s[4] = '\0'; |
| 332 | +} |
| 333 | + |
| 334 | +void MetaData::dumpToLog() const { |
| 335 | + for (int i = mItems.size(); --i >= 0;) { |
| 336 | + int32_t key = mItems.keyAt(i); |
| 337 | + char cc[5]; |
| 338 | + MakeFourCCString(key, cc); |
| 339 | + const typed_data &item = mItems.valueAt(i); |
| 340 | + ALOGI("%s: %s", cc, item.asString().string()); |
| 341 | + } |
| 342 | +} |
| 343 | + |
285 | 344 | } // namespace android |
286 | 345 |
|
0 commit comments