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

Commit 13d2c8bb authored by Treehugger Robot's avatar Treehugger Robot Committed by Automerger Merge Worker
Browse files

Merge "C2SoftMp3Dec: fix floating point exception" am: 3992eb95 am: 606c6d58 am: 46a8c116

Original change: https://android-review.googlesource.com/c/platform/frameworks/av/+/1777789

Change-Id: I46199b3f87958c4d3a704e65c6d949c3b54a8e38
parents 44725cfc 46a8c116
Loading
Loading
Loading
Loading
+18 −11
Original line number Original line Diff line number Diff line
@@ -321,6 +321,13 @@ c2_status_t C2SoftMP3::drain(
    return C2_OK;
    return C2_OK;
}
}


static void fillEmptyWork(const std::unique_ptr<C2Work> &work) {
    work->worklets.front()->output.flags = work->input.flags;
    work->worklets.front()->output.buffers.clear();
    work->worklets.front()->output.ordinal = work->input.ordinal;
    work->workletsProcessed = 1u;
}

// TODO: Can overall error checking be improved? As in the check for validity of
// TODO: Can overall error checking be improved? As in the check for validity of
//       work, pool ptr, work->input.buffers.size() == 1, ...
//       work, pool ptr, work->input.buffers.size() == 1, ...
// TODO: Blind removal of 529 samples from the output may not work. Because
// TODO: Blind removal of 529 samples from the output may not work. Because
@@ -486,17 +493,17 @@ void C2SoftMP3::process(
        }
        }
    }
    }


    fillEmptyWork(work);
    if (samplingRate && numChannels) {
        int64_t outTimeStamp = mProcessedSamples * 1000000ll / samplingRate;
        int64_t outTimeStamp = mProcessedSamples * 1000000ll / samplingRate;
        mProcessedSamples += ((outSize - outOffset) / (numChannels * sizeof(int16_t)));
        mProcessedSamples += ((outSize - outOffset) / (numChannels * sizeof(int16_t)));
        ALOGV("out buffer attr. offset %d size %d timestamp %" PRId64 " ", outOffset,
        ALOGV("out buffer attr. offset %d size %d timestamp %" PRId64 " ", outOffset,
               outSize - outOffset, mAnchorTimeStamp + outTimeStamp);
               outSize - outOffset, mAnchorTimeStamp + outTimeStamp);
        decodedSizes.clear();
        decodedSizes.clear();
    work->worklets.front()->output.flags = work->input.flags;
    work->worklets.front()->output.buffers.clear();
        work->worklets.front()->output.buffers.push_back(
        work->worklets.front()->output.buffers.push_back(
                createLinearBuffer(block, outOffset, outSize - outOffset));
                createLinearBuffer(block, outOffset, outSize - outOffset));
    work->worklets.front()->output.ordinal = work->input.ordinal;
        work->worklets.front()->output.ordinal.timestamp = mAnchorTimeStamp + outTimeStamp;
        work->worklets.front()->output.ordinal.timestamp = mAnchorTimeStamp + outTimeStamp;
    }
    if (eos) {
    if (eos) {
        mSignalledOutputEos = true;
        mSignalledOutputEos = true;
        ALOGV("signalled EOS");
        ALOGV("signalled EOS");