diff options
author | Andreas Huber <andih@google.com> | 2011-09-23 10:25:32 -0700 |
---|---|---|
committer | Andreas Huber <andih@google.com> | 2011-09-23 10:25:32 -0700 |
commit | d10c07603a28429beb7471c0fb23a5f9ec90bf26 (patch) | |
tree | de924db144aa49b74bd594801a519a5654b293ec /cmds/stagefright/stagefright.cpp | |
parent | e2c10206a506381ecd466e050f8b5cdf87db7100 (diff) | |
download | frameworks_av-d10c07603a28429beb7471c0fb23a5f9ec90bf26.zip frameworks_av-d10c07603a28429beb7471c0fb23a5f9ec90bf26.tar.gz frameworks_av-d10c07603a28429beb7471c0fb23a5f9ec90bf26.tar.bz2 |
Add an option to dump the raw stream to a file in the stagefright cmdline tool.
Change-Id: Ie19eca2cdf162d6973037ec554ef5916243ea7d7
Diffstat (limited to 'cmds/stagefright/stagefright.cpp')
-rw-r--r-- | cmds/stagefright/stagefright.cpp | 47 |
1 files changed, 46 insertions, 1 deletions
diff --git a/cmds/stagefright/stagefright.cpp b/cmds/stagefright/stagefright.cpp index 34f0a64..a126e83 100644 --- a/cmds/stagefright/stagefright.cpp +++ b/cmds/stagefright/stagefright.cpp @@ -133,6 +133,39 @@ static void displayAVCProfileLevelIfPossible(const sp<MetaData>& meta) { } } +static void dumpSource(const sp<MediaSource> &source, const String8 &filename) { + FILE *out = fopen(filename.string(), "wb"); + + CHECK_EQ((status_t)OK, source->start()); + + status_t err; + for (;;) { + MediaBuffer *mbuf; + err = source->read(&mbuf); + + if (err == INFO_FORMAT_CHANGED) { + continue; + } else if (err != OK) { + break; + } + + CHECK_EQ( + fwrite((const uint8_t *)mbuf->data() + mbuf->range_offset(), + 1, + mbuf->range_length(), + out), + (ssize_t)mbuf->range_length()); + + mbuf->release(); + mbuf = NULL; + } + + CHECK_EQ((status_t)OK, source->stop()); + + fclose(out); + out = NULL; +} + static void playSource(OMXClient *client, sp<MediaSource> &source) { sp<MetaData> meta = source->getFormat(); @@ -578,6 +611,7 @@ static void usage(const char *me) { "(video only)\n"); fprintf(stderr, " -S allocate buffers from a surface\n"); fprintf(stderr, " -T allocate buffers from a surface texture\n"); + fprintf(stderr, " -d(ump) filename (raw stream data to a file)\n"); } int main(int argc, char **argv) { @@ -590,6 +624,8 @@ int main(int argc, char **argv) { bool seekTest = false; bool useSurfaceAlloc = false; bool useSurfaceTexAlloc = false; + bool dumpStream = false; + String8 dumpStreamFilename; gNumRepetitions = 1; gMaxNumFrames = 0; gReproduceBug = -1; @@ -604,7 +640,7 @@ int main(int argc, char **argv) { sp<LiveSession> liveSession; int res; - while ((res = getopt(argc, argv, "han:lm:b:ptsrow:kxST")) >= 0) { + while ((res = getopt(argc, argv, "han:lm:b:ptsrow:kxSTd:")) >= 0) { switch (res) { case 'a': { @@ -612,6 +648,13 @@ int main(int argc, char **argv) { break; } + case 'd': + { + dumpStream = true; + dumpStreamFilename.setTo(optarg); + break; + } + case 'l': { listComponents = true; @@ -1062,6 +1105,8 @@ int main(int argc, char **argv) { if (gWriteMP4) { writeSourcesToMP4(mediaSources, syncInfoPresent); + } else if (dumpStream) { + dumpSource(mediaSource, dumpStreamFilename); } else if (seekTest) { performSeekTest(mediaSource); } else { |