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

Commit b07ae06e authored by Andreas Huber's avatar Andreas Huber Committed by Android (Google) Code Review
Browse files

Merge "Be more greedy when it comes to gathering input and output buffers."

parents 6723dd95 a2798e25
Loading
Loading
Loading
Loading
+48 −25
Original line number Diff line number Diff line
@@ -259,7 +259,7 @@ void SimplePlayer::onMessageReceived(const sp<AMessage> &msg) {
            status_t err = onDoMoreStuff();

            if (err == OK) {
                msg->post(5000ll);
                msg->post(10000ll);
            }
            break;
        }
@@ -411,16 +411,27 @@ status_t SimplePlayer::onReset() {
}

status_t SimplePlayer::onDoMoreStuff() {
    ALOGV("onDoMoreStuff");
    for (size_t i = 0; i < mStateByTrackIndex.size(); ++i) {
        CodecState *state = &mStateByTrackIndex.editValueAt(i);

        status_t err;
        do {
            size_t index;
        status_t err = state->mCodec->dequeueInputBuffer(&index);
            err = state->mCodec->dequeueInputBuffer(&index);

            if (err == OK) {
                ALOGV("dequeued input buffer on track %d",
                      mStateByTrackIndex.keyAt(i));

                state->mAvailInputBufferIndices.push_back(index);
            } else {
                ALOGV("dequeueInputBuffer on track %d returned %d",
                      mStateByTrackIndex.keyAt(i), err);
            }
        } while (err == OK);

        do {
            BufferInfo info;
            err = state->mCodec->dequeueOutputBuffer(
                    &info.mIndex,
@@ -430,6 +441,9 @@ status_t SimplePlayer::onDoMoreStuff() {
                    &info.mFlags);

            if (err == OK) {
                ALOGV("dequeued output buffer on track %d",
                      mStateByTrackIndex.keyAt(i));

                state->mAvailOutputBufferInfos.push_back(info);
            } else if (err == INFO_FORMAT_CHANGED) {
                err = onOutputFormatChanged(mStateByTrackIndex.keyAt(i), state);
@@ -437,7 +451,13 @@ status_t SimplePlayer::onDoMoreStuff() {
            } else if (err == INFO_OUTPUT_BUFFERS_CHANGED) {
                err = state->mCodec->getOutputBuffers(&state->mBuffers[1]);
                CHECK_EQ(err, (status_t)OK);
            } else {
                ALOGV("dequeueOutputBuffer on track %d returned %d",
                      mStateByTrackIndex.keyAt(i), err);
            }
        } while (err == OK
                || err == INFO_FORMAT_CHANGED
                || err == INFO_OUTPUT_BUFFERS_CHANGED);
    }

    for (;;) {
@@ -475,6 +495,8 @@ status_t SimplePlayer::onDoMoreStuff() {
                    0);
            CHECK_EQ(err, (status_t)OK);

            ALOGV("enqueued input data on track %d", trackIndex);

            err = mExtractor->advance();
            CHECK_EQ(err, (status_t)OK);
        }
@@ -500,7 +522,7 @@ status_t SimplePlayer::onDoMoreStuff() {

                if (lateByUs > 30000ll) {
                    ALOGI("track %d buffer late by %lld us, dropping.",
                          i, lateByUs);
                          mStateByTrackIndex.keyAt(i), lateByUs);
                    state->mCodec->releaseOutputBuffer(info->mIndex);
                } else {
                    if (state->mAudioTrack != NULL) {
@@ -529,7 +551,8 @@ status_t SimplePlayer::onDoMoreStuff() {
                    break;
                }
            } else {
                ALOGV("track %d buffer early by %lld us.", i, -lateByUs);
                ALOGV("track %d buffer early by %lld us.",
                      mStateByTrackIndex.keyAt(i), -lateByUs);
                break;
            }
        }
+1 −1
Original line number Diff line number Diff line
@@ -394,7 +394,7 @@ int main(int argc, char **argv) {
        player->setDataSource(argv[0]);
        player->setSurface(surface->getSurfaceTexture());
        player->start();
        sleep(10);
        sleep(60);
        player->stop();
        player->reset();