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

Commit 0167414e authored by Andreas Huber's avatar Andreas Huber
Browse files

You can now opt-in to having the video decoder push blank buffers to the

surface on the transition from executing->idle by specifying the key
"push-blank-buffers-on-shutdown" with a value of 1 in the call to configure.

Change-Id: I1155fccf89f18e717728c985e590651597595515
parent cd06d357
Loading
Loading
Loading
Loading
+2 −1
Original line number Diff line number Diff line
@@ -125,6 +125,7 @@ private:

    enum {
        kFlagIsSecure                                 = 1,
        kFlagPushBlankBuffersToNativeWindowOnShutdown = 2,
    };

    struct BufferInfo {
+9 −1
Original line number Diff line number Diff line
@@ -1114,6 +1114,12 @@ status_t ACodec::configureCodec(
            ALOGV("[%s] storeMetaDataInBuffers succeeded", mComponentName.c_str());
            mStoreMetaDataInOutputBuffers = true;
        }

        int32_t push;
        if (msg->findInt32("push-blank-buffers-on-shutdown", &push)
                && push != 0) {
            mFlags |= kFlagPushBlankBuffersToNativeWindowOnShutdown;
        }
    }

    if (video) {
@@ -3584,6 +3590,7 @@ bool ACodec::UninitializedState::onAllocateComponent(const sp<AMessage> &msg) {

    if (componentName.endsWith(".secure")) {
        mCodec->mFlags |= kFlagIsSecure;
        mCodec->mFlags |= kFlagPushBlankBuffersToNativeWindowOnShutdown;
    }

    mCodec->mQuirks = quirks;
@@ -4413,7 +4420,8 @@ void ACodec::ExecutingToIdleState::changeStateIfWeOwnAllBuffers() {
        CHECK_EQ(mCodec->freeBuffersOnPort(kPortIndexInput), (status_t)OK);
        CHECK_EQ(mCodec->freeBuffersOnPort(kPortIndexOutput), (status_t)OK);

        if (mCodec->mFlags & kFlagIsSecure && mCodec->mNativeWindow != NULL) {
        if ((mCodec->mFlags & kFlagPushBlankBuffersToNativeWindowOnShutdown)
                && mCodec->mNativeWindow != NULL) {
            // We push enough 1x1 blank buffers to ensure that one of
            // them has made it to the display.  This allows the OMX
            // component teardown to zero out any protected buffers