Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 16f78631 authored by Andreas Huber's avatar Andreas Huber
Browse files

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
parent 1e06f435
Loading
Loading
Loading
Loading
+42 −35
Original line number Diff line number Diff line
@@ -74,8 +74,6 @@ static String8 gWriteMP4Filename;

static sp<ANativeWindow> 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> 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,13 +849,12 @@ int main(int argc, char **argv) {
    sp<SurfaceComposerClient> composerClient;
    sp<SurfaceControl> control;

    if (useSurfaceAlloc && !audioOnly) {
#if USE_SURFACE_COMPOSER
    if ((useSurfaceAlloc || useSurfaceTexAlloc) && !audioOnly) {
        if (useSurfaceAlloc) {
            composerClient = new SurfaceComposerClient;
            CHECK_EQ(composerClient->initCheck(), (status_t)OK);

            control = composerClient->createSurface(
                getpid(),
                    String8("A Surface"),
                    0,
                    1280,
@@ -867,10 +872,12 @@ int main(int argc, char **argv) {

            gSurface = control->getSurface();
            CHECK(gSurface != NULL);
#else
        } else {
            CHECK(useSurfaceTexAlloc);

            sp<SurfaceTexture> texture = new SurfaceTexture(0 /* tex */);
            gSurface = new SurfaceTextureClient(texture);
#endif
        }
    }

    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
        if (useSurfaceAlloc) {
            composerClient->dispose();
#endif
        }
    }

    client.disconnect();