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

Commit 28a8cb75 authored by Jamie Gennis's avatar Jamie Gennis Committed by Android (Google) Code Review
Browse files

Merge "Stagefright: Use the ANW min undequeued bufs query."

parents 51caf91f 01951fdb
Loading
Loading
Loading
Loading
+28 −15
Original line number Diff line number Diff line
@@ -429,16 +429,6 @@ status_t ACodec::allocateOutputBuffersFromNativeWindow() {
        return err;
    }

    // Increase the buffer count by one to allow for the ANativeWindow to hold
    // on to one of the buffers.
    def.nBufferCountActual++;
    err = mOMX->setParameter(
            mNode, OMX_IndexParamPortDefinition, &def, sizeof(def));

    if (err != OK) {
        return err;
    }

    // Set up the native window.
    OMX_U32 usage = 0;
    err = mOMX->getGraphicBufferUsage(mNode, kPortIndexOutput, &usage);
@@ -457,6 +447,33 @@ status_t ACodec::allocateOutputBuffersFromNativeWindow() {
        return err;
    }

    int minUndequeuedBufs = 0;
    err = mNativeWindow->query(
            mNativeWindow.get(), NATIVE_WINDOW_MIN_UNDEQUEUED_BUFFERS,
            &minUndequeuedBufs);

    if (err != 0) {
        LOGE("NATIVE_WINDOW_MIN_UNDEQUEUED_BUFFERS query failed: %s (%d)",
                strerror(-err), -err);
        return err;
    }

    // XXX: Is this the right logic to use?  It's not clear to me what the OMX
    // buffer counts refer to - how do they account for the renderer holding on
    // to buffers?
    if (def.nBufferCountActual < def.nBufferCountMin + minUndequeuedBufs) {
        OMX_U32 newBufferCount = def.nBufferCountMin + minUndequeuedBufs;
        def.nBufferCountActual = newBufferCount;
        err = mOMX->setParameter(
                mNode, OMX_IndexParamPortDefinition, &def, sizeof(def));

        if (err != OK) {
            LOGE("[%s] setting nBufferCountActual to %lu failed: %d",
                    mComponentName.c_str(), newBufferCount, err);
            return err;
        }
    }

    err = native_window_set_buffer_count(
            mNativeWindow.get(), def.nBufferCountActual);

@@ -512,11 +529,7 @@ status_t ACodec::allocateOutputBuffersFromNativeWindow() {
        cancelEnd = mBuffers[kPortIndexOutput].size();
    } else {
        // Return the last two buffers to the native window.
        // XXX TODO: The number of buffers the native window owns should
        // probably be queried from it when we put the native window in
        // fixed buffer pool mode (which needs to be implemented).
        // Currently it's hard-coded to 2.
        cancelStart = def.nBufferCountActual - 2;
        cancelStart = def.nBufferCountActual - minUndequeuedBufs;
        cancelEnd = def.nBufferCountActual;
    }

+25 −13
Original line number Diff line number Diff line
@@ -1738,15 +1738,6 @@ status_t OMXCodec::allocateOutputBuffersFromNativeWindow() {
        return err;
    }

    // Increase the buffer count by one to allow for the ANativeWindow to hold
    // on to one of the buffers.
    def.nBufferCountActual++;
    err = mOMX->setParameter(
            mNode, OMX_IndexParamPortDefinition, &def, sizeof(def));
    if (err != OK) {
        return err;
    }

    err = applyRotation();
    if (err != OK) {
        return err;
@@ -1768,6 +1759,30 @@ status_t OMXCodec::allocateOutputBuffersFromNativeWindow() {
        return err;
    }

    int minUndequeuedBufs = 0;
    err = mNativeWindow->query(mNativeWindow.get(),
            NATIVE_WINDOW_MIN_UNDEQUEUED_BUFFERS, &minUndequeuedBufs);
    if (err != 0) {
        LOGE("NATIVE_WINDOW_MIN_UNDEQUEUED_BUFFERS query failed: %s (%d)",
                strerror(-err), -err);
        return err;
    }

    // XXX: Is this the right logic to use?  It's not clear to me what the OMX
    // buffer counts refer to - how do they account for the renderer holding on
    // to buffers?
    if (def.nBufferCountActual < def.nBufferCountMin + minUndequeuedBufs) {
        OMX_U32 newBufferCount = def.nBufferCountMin + minUndequeuedBufs;
        def.nBufferCountActual = newBufferCount;
        err = mOMX->setParameter(
                mNode, OMX_IndexParamPortDefinition, &def, sizeof(def));
        if (err != OK) {
            CODEC_LOGE("setting nBufferCountActual to %lu failed: %d",
                    newBufferCount, err);
            return err;
        }
    }

    err = native_window_set_buffer_count(
            mNativeWindow.get(), def.nBufferCountActual);
    if (err != 0) {
@@ -1822,10 +1837,7 @@ status_t OMXCodec::allocateOutputBuffersFromNativeWindow() {
        cancelEnd = mPortBuffers[kPortIndexOutput].size();
    } else {
        // Return the last two buffers to the native window.
        // XXX TODO: The number of buffers the native window owns should probably be
        // queried from it when we put the native window in fixed buffer pool mode
        // (which needs to be implemented).  Currently it's hard-coded to 2.
        cancelStart = def.nBufferCountActual - 2;
        cancelStart = def.nBufferCountActual - minUndequeuedBufs;
        cancelEnd = def.nBufferCountActual;
    }