Skip to content

Commit d0a524f

Browse files
committed
Add MetaData::dumpToLog
Utility method for dumping the content of a MetaData object to the log. Change-Id: I2d91b991e1d9fed2215e8995a73c2b1854205074
1 parent 8fca15f commit d0a524f

File tree

2 files changed

+63
-0
lines changed

2 files changed

+63
-0
lines changed

include/media/stagefright/MetaData.h

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@
2424

2525
#include <utils/RefBase.h>
2626
#include <utils/KeyedVector.h>
27+
#include <utils/String8.h>
2728

2829
namespace android {
2930

@@ -180,6 +181,8 @@ class MetaData : public RefBase {
180181
bool findData(uint32_t key, uint32_t *type,
181182
const void **data, size_t *size) const;
182183

184+
void dumpToLog() const;
185+
183186
protected:
184187
virtual ~MetaData();
185188

@@ -194,6 +197,7 @@ class MetaData : public RefBase {
194197
void clear();
195198
void setData(uint32_t type, const void *data, size_t size);
196199
void getData(uint32_t *type, const void **data, size_t *size) const;
200+
String8 asString() const;
197201

198202
private:
199203
uint32_t mType;

media/libstagefright/MetaData.cpp

Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,10 @@
1414
* limitations under the License.
1515
*/
1616

17+
//#define LOG_NDEBUG 0
18+
#define LOG_TAG "MetaData"
19+
#include <utils/Log.h>
20+
1721
#include <stdlib.h>
1822
#include <string.h>
1923

@@ -282,5 +286,60 @@ void MetaData::typed_data::freeStorage() {
282286
mSize = 0;
283287
}
284288

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+
285344
} // namespace android
286345

0 commit comments

Comments
 (0)