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

Commit d7dbc9e6 authored by Andreas Huber's avatar Andreas Huber Committed by Android Git Automerger
Browse files

am d12dc284: Merge "If an error occurs that prevents us from reallocating...

am d12dc284: Merge "If an error occurs that prevents us from reallocating buffers during a format change" into ics-mr1

* commit 'd12dc28460f622ab29e83fa688ad83a8263e9417':
  If an error occurs that prevents us from reallocating buffers during a format change
parents 4d1ba696 5274010d
Loading
Loading
Loading
Loading
+2 −0
Original line number Diff line number Diff line
@@ -166,6 +166,8 @@ private:

    bool allYourBuffersAreBelongToUs();

    size_t countBuffersOwnedByComponent(OMX_U32 portIndex) const;

    void deferMessage(const sp<AMessage> &msg);
    void processDeferredMessages();

+32 −0
Original line number Diff line number Diff line
@@ -342,6 +342,7 @@ void ACodec::initiateSetup(const sp<AMessage> &msg) {
}

void ACodec::signalFlush() {
    LOGV("[%s] signalFlush", mComponentName.c_str());
    (new AMessage(kWhatFlush, id()))->post();
}

@@ -1092,6 +1093,20 @@ status_t ACodec::initNativeWindow() {
    return OK;
}

size_t ACodec::countBuffersOwnedByComponent(OMX_U32 portIndex) const {
    size_t n = 0;

    for (size_t i = 0; i < mBuffers[portIndex].size(); ++i) {
        const BufferInfo &info = mBuffers[portIndex].itemAt(i);

        if (info.mStatus == BufferInfo::OWNED_BY_COMPONENT) {
            ++n;
        }
    }

    return n;
}

bool ACodec::allYourBuffersAreBelongToUs(
        OMX_U32 portIndex) {
    for (size_t i = 0; i < mBuffers[portIndex].size(); ++i) {
@@ -2041,6 +2056,14 @@ bool ACodec::ExecutingState::onMessageReceived(const sp<AMessage> &msg) {

        case kWhatFlush:
        {
            LOGV("[%s] ExecutingState flushing now "
                 "(codec owns %d/%d input, %d/%d output).",
                    mCodec->mComponentName.c_str(),
                    mCodec->countBuffersOwnedByComponent(kPortIndexInput),
                    mCodec->mBuffers[kPortIndexInput].size(),
                    mCodec->countBuffersOwnedByComponent(kPortIndexOutput),
                    mCodec->mBuffers[kPortIndexOutput].size());

            mActive = false;

            CHECK_EQ(mCodec->mOMX->sendCommand(
@@ -2180,6 +2203,12 @@ bool ACodec::OutputPortSettingsChangedState::onOMXEvent(
                         err);

                    mCodec->signalError();

                    // This is technically not correct, since we were unable
                    // to allocate output buffers and therefore the output port
                    // remains disabled. It is necessary however to allow us
                    // to shutdown the codec properly.
                    mCodec->changeState(mCodec->mExecutingState);
                }

                return true;
@@ -2408,6 +2437,9 @@ bool ACodec::FlushingState::onMessageReceived(const sp<AMessage> &msg) {

bool ACodec::FlushingState::onOMXEvent(
        OMX_EVENTTYPE event, OMX_U32 data1, OMX_U32 data2) {
    LOGV("[%s] FlushingState onOMXEvent(%d,%ld)",
            mCodec->mComponentName.c_str(), event, data1);

    switch (event) {
        case OMX_EventCmdComplete:
        {