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

Commit a1335e1a authored by Wonsik Kim's avatar Wonsik Kim Committed by Hangyu Kuang
Browse files

MediaCodec: add background mode

Bug: 183751395
Test: manual
Change-Id: If60634c62d44bb828ba309ce376daeddd5d6332f
parent 691d8bef
Loading
Loading
Loading
Loading
+8 −0
Original line number Original line Diff line number Diff line
@@ -90,6 +90,10 @@ public:
        }
        }
    }
    }


    void setPriority(int priority) {
        androidSetThreadPriority(getTid(), priority);
    }

protected:
protected:
    bool threadLoop() override {
    bool threadLoop() override {
        constexpr nsecs_t kIntervalNs = nsecs_t(10) * 1000 * 1000;  // 10ms
        constexpr nsecs_t kIntervalNs = nsecs_t(10) * 1000 * 1000;  // 10ms
@@ -529,4 +533,8 @@ android_dataspace C2OMXNode::getDataspace() {
    return *mDataspace.lock();
    return *mDataspace.lock();
}
}


void C2OMXNode::setPriority(int priority) {
    mQueueThread->setPriority(priority);
}

}  // namespace android
}  // namespace android
+5 −0
Original line number Original line Diff line number Diff line
@@ -98,6 +98,11 @@ struct C2OMXNode : public BnOMXNode {
     */
     */
    android_dataspace getDataspace();
    android_dataspace getDataspace();


    /**
     * Sets priority of the queue thread.
     */
    void setPriority(int priority);

private:
private:
    std::weak_ptr<Codec2Client::Component> mComp;
    std::weak_ptr<Codec2Client::Component> mComp;
    sp<IOMXBufferSource> mBufferSource;
    sp<IOMXBufferSource> mBufferSource;
+19 −0
Original line number Original line Diff line number Diff line
@@ -397,6 +397,14 @@ public:


        // consumer usage is queried earlier.
        // consumer usage is queried earlier.


        // priority
        if (mConfig.mPriority != config.mPriority) {
            if (config.mPriority != INT_MAX) {
                mNode->setPriority(config.mPriority);
            }
            mConfig.mPriority = config.mPriority;
        }

        if (status.str().empty()) {
        if (status.str().empty()) {
            ALOGD("ISConfig not changed");
            ALOGD("ISConfig not changed");
        } else {
        } else {
@@ -944,6 +952,7 @@ void CCodec::configure(const sp<AMessage> &msg) {
                }
                }
            }
            }
            config->mISConfig->mUsage = 0;
            config->mISConfig->mUsage = 0;
            config->mISConfig->mPriority = INT_MAX;
        }
        }


        /*
        /*
@@ -1135,6 +1144,16 @@ void CCodec::configure(const sp<AMessage> &msg) {
            configUpdate.push_back(std::move(qp));
            configUpdate.push_back(std::move(qp));
        }
        }


        int32_t background = 0;
        if ((config->mDomain & Config::IS_VIDEO)
                && msg->findInt32("android._background-mode", &background)
                && background) {
            androidSetThreadPriority(gettid(), ANDROID_PRIORITY_BACKGROUND);
            if (config->mISConfig) {
                config->mISConfig->mPriority = ANDROID_PRIORITY_BACKGROUND;
            }
        }

        err = config->setParameters(comp, configUpdate, C2_DONT_BLOCK);
        err = config->setParameters(comp, configUpdate, C2_DONT_BLOCK);
        if (err != OK) {
        if (err != OK) {
            ALOGW("failed to configure c2 params");
            ALOGW("failed to configure c2 params");
+1 −0
Original line number Original line Diff line number Diff line
@@ -79,6 +79,7 @@ public:
        float mFixedAdjustedFps = 0.0; // fixed fps via PTS manipulation
        float mFixedAdjustedFps = 0.0; // fixed fps via PTS manipulation
        float mMinAdjustedFps = 0.0; // minimum fps via PTS manipulation
        float mMinAdjustedFps = 0.0; // minimum fps via PTS manipulation
        uint64_t mUsage = 0; // consumer usage
        uint64_t mUsage = 0; // consumer usage
        int mPriority = INT_MAX; // priority of queue thread (if any); INT_MAX for no-op
    };
    };


    /**
    /**
+5 −0
Original line number Original line Diff line number Diff line
@@ -3518,6 +3518,11 @@ void MediaCodec::onMessageReceived(const sp<AMessage> &msg) {
                mTunneled = false;
                mTunneled = false;
            }
            }


            int32_t background = 0;
            if (format->findInt32("android._background-mode", &background) && background) {
                androidSetThreadPriority(gettid(), ANDROID_PRIORITY_BACKGROUND);
            }

            mCodec->initiateConfigureComponent(format);
            mCodec->initiateConfigureComponent(format);
            break;
            break;
        }
        }