From 16f7863149b400ca52e2e3cb83e50534fee6b58b Mon Sep 17 00:00:00 2001 From: Andreas Huber Date: Tue, 28 Jun 2011 10:11:09 -0700 Subject: New option in the stagefright commandline tool. Use '-S' to allocate decoder buffers from a surface Use '-T' to allocate decoder buffers from a surface texture Change-Id: Ib71ea53d0fd1b2def08bfeac2fd8bcbdc1938161 --- cmds/stagefright/stagefright.cpp | 77 ++++++++++++++++++++++------------------ 1 file changed, 42 insertions(+), 35 deletions(-) (limited to 'cmds') diff --git a/cmds/stagefright/stagefright.cpp b/cmds/stagefright/stagefright.cpp index d7b1e71..656f5fd 100644 --- a/cmds/stagefright/stagefright.cpp +++ b/cmds/stagefright/stagefright.cpp @@ -74,8 +74,6 @@ static String8 gWriteMP4Filename; static sp gSurface; -#define USE_SURFACE_COMPOSER 0 - static int64_t getNowUs() { struct timeval tv; gettimeofday(&tv, NULL); @@ -579,6 +577,7 @@ static void usage(const char *me) { fprintf(stderr, " -x display a histogram of decoding times/fps " "(video only)\n"); fprintf(stderr, " -S allocate buffers from a surface\n"); + fprintf(stderr, " -T allocate buffers from a surface texture\n"); } int main(int argc, char **argv) { @@ -590,6 +589,7 @@ int main(int argc, char **argv) { bool extractThumbnail = false; bool seekTest = false; bool useSurfaceAlloc = false; + bool useSurfaceTexAlloc = false; gNumRepetitions = 1; gMaxNumFrames = 0; gReproduceBug = -1; @@ -604,7 +604,7 @@ int main(int argc, char **argv) { sp liveSession; int res; - while ((res = getopt(argc, argv, "han:lm:b:ptsrow:kxS")) >= 0) { + while ((res = getopt(argc, argv, "han:lm:b:ptsrow:kxST")) >= 0) { switch (res) { case 'a': { @@ -695,6 +695,12 @@ int main(int argc, char **argv) { break; } + case 'T': + { + useSurfaceTexAlloc = true; + break; + } + case '?': case 'h': default: @@ -843,34 +849,35 @@ int main(int argc, char **argv) { sp composerClient; sp control; - if (useSurfaceAlloc && !audioOnly) { -#if USE_SURFACE_COMPOSER - composerClient = new SurfaceComposerClient; - CHECK_EQ(composerClient->initCheck(), (status_t)OK); - - control = composerClient->createSurface( - getpid(), - String8("A Surface"), - 0, - 1280, - 800, - PIXEL_FORMAT_RGB_565, - 0); - - CHECK(control != NULL); - CHECK(control->isValid()); - - CHECK_EQ(composerClient->openTransaction(), (status_t)OK); - CHECK_EQ(control->setLayer(30000), (status_t)OK); - CHECK_EQ(control->show(), (status_t)OK); - CHECK_EQ(composerClient->closeTransaction(), (status_t)OK); - - gSurface = control->getSurface(); - CHECK(gSurface != NULL); -#else - sp texture = new SurfaceTexture(0 /* tex */); - gSurface = new SurfaceTextureClient(texture); -#endif + if ((useSurfaceAlloc || useSurfaceTexAlloc) && !audioOnly) { + if (useSurfaceAlloc) { + composerClient = new SurfaceComposerClient; + CHECK_EQ(composerClient->initCheck(), (status_t)OK); + + control = composerClient->createSurface( + String8("A Surface"), + 0, + 1280, + 800, + PIXEL_FORMAT_RGB_565, + 0); + + CHECK(control != NULL); + CHECK(control->isValid()); + + CHECK_EQ(composerClient->openTransaction(), (status_t)OK); + CHECK_EQ(control->setLayer(30000), (status_t)OK); + CHECK_EQ(control->show(), (status_t)OK); + CHECK_EQ(composerClient->closeTransaction(), (status_t)OK); + + gSurface = control->getSurface(); + CHECK(gSurface != NULL); + } else { + CHECK(useSurfaceTexAlloc); + + sp texture = new SurfaceTexture(0 /* tex */); + gSurface = new SurfaceTextureClient(texture); + } } DataSource::RegisterDefaultSniffers(); @@ -1061,12 +1068,12 @@ int main(int argc, char **argv) { } } - if (useSurfaceAlloc && !audioOnly) { + if ((useSurfaceAlloc || useSurfaceTexAlloc) && !audioOnly) { gSurface.clear(); -#if USE_SURFACE_COMPOSER - composerClient->dispose(); -#endif + if (useSurfaceAlloc) { + composerClient->dispose(); + } } client.disconnect(); -- cgit v1.1