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

Commit 96343b43 authored by Marc Kassis's avatar Marc Kassis
Browse files

Forward decode only flag to ACodec and CCodec

Bug: 234708299
Test: atest DecodeOnlyTest
Change-Id: I9c8fd3386836cf031203ad9ea5198c49362299ab
parent bc9ba5b1
Loading
Loading
Loading
Loading
+3 −0
Original line number Original line Diff line number Diff line
@@ -226,6 +226,9 @@ status_t CCodecBufferChannel::queueInputBufferInternal(
    if (buffer->meta()->findInt32("tunnel-first-frame", &tmp) && tmp) {
    if (buffer->meta()->findInt32("tunnel-first-frame", &tmp) && tmp) {
        tunnelFirstFrame = true;
        tunnelFirstFrame = true;
    }
    }
    if (buffer->meta()->findInt32("decode-only", &tmp) && tmp) {
        flags |= C2FrameData::FLAG_DROP_FRAME;
    }
    ALOGV("[%s] queueInputBuffer: buffer->size() = %zu", mName, buffer->size());
    ALOGV("[%s] queueInputBuffer: buffer->size() = %zu", mName, buffer->size());
    std::list<std::unique_ptr<C2Work>> items;
    std::list<std::unique_ptr<C2Work>> items;
    std::unique_ptr<C2Work> work(new C2Work);
    std::unique_ptr<C2Work> work(new C2Work);
+8 −0
Original line number Original line Diff line number Diff line
@@ -6315,6 +6315,10 @@ void ACodec::BaseState::onInputBufferFilled(const sp<AMessage> &msg) {
                    flags |= OMX_BUFFERFLAG_EOS;
                    flags |= OMX_BUFFERFLAG_EOS;
                }
                }


                int32_t isDecodeOnly = 0;
                if (buffer->meta()->findInt32("decode-only", &isDecodeOnly) && isDecodeOnly != 0) {
                    flags |= OMX_BUFFERFLAG_DECODEONLY;
                }
                size_t size = buffer->size();
                size_t size = buffer->size();
                size_t offset = buffer->offset();
                size_t offset = buffer->offset();
                if (buffer->base() != info->mCodecData->base()) {
                if (buffer->base() != info->mCodecData->base()) {
@@ -6344,6 +6348,10 @@ void ACodec::BaseState::onInputBufferFilled(const sp<AMessage> &msg) {
                    ALOGV("[%s] calling emptyBuffer %u w/ EOS",
                    ALOGV("[%s] calling emptyBuffer %u w/ EOS",
                         mCodec->mComponentName.c_str(), bufferID);
                         mCodec->mComponentName.c_str(), bufferID);
                } else {
                } else {
                    if (flags & OMX_BUFFERFLAG_DECODEONLY) {
                        ALOGV("[%s] calling emptyBuffer %u w/ decode only flag",
                        mCodec->mComponentName.c_str(), bufferID);
                    }
#if TRACK_BUFFER_TIMING
#if TRACK_BUFFER_TIMING
                    ALOGI("[%s] calling emptyBuffer %u w/ time %lld us",
                    ALOGI("[%s] calling emptyBuffer %u w/ time %lld us",
                         mCodec->mComponentName.c_str(), bufferID, (long long)timeUs);
                         mCodec->mComponentName.c_str(), bufferID, (long long)timeUs);
+8 −0
Original line number Original line Diff line number Diff line
@@ -114,6 +114,10 @@ status_t ACodecBufferChannel::queueInputBuffer(const sp<MediaCodecBuffer> &buffe
        if (it->mClientBuffer->meta()->findInt32("csd", &csd)) {
        if (it->mClientBuffer->meta()->findInt32("csd", &csd)) {
            it->mCodecBuffer->meta()->setInt32("csd", csd);
            it->mCodecBuffer->meta()->setInt32("csd", csd);
        }
        }
        int32_t decodeOnly;
        if (it->mClientBuffer->meta()->findInt32("decode-only", &decodeOnly)) {
            it->mCodecBuffer->meta()->setInt32("decode-only", decodeOnly);
        }
    }
    }
    ALOGV("queueInputBuffer #%d", it->mBufferId);
    ALOGV("queueInputBuffer #%d", it->mBufferId);
    sp<AMessage> msg = mInputBufferFilled->dup();
    sp<AMessage> msg = mInputBufferFilled->dup();
@@ -263,6 +267,10 @@ status_t ACodecBufferChannel::queueSecureInputBuffer(
    if (it->mClientBuffer->meta()->findInt32("csd", &csd)) {
    if (it->mClientBuffer->meta()->findInt32("csd", &csd)) {
        it->mCodecBuffer->meta()->setInt32("csd", csd);
        it->mCodecBuffer->meta()->setInt32("csd", csd);
    }
    }
    int32_t decodeOnly;
    if (it->mClientBuffer->meta()->findInt32("decode-only", &decodeOnly)) {
        it->mCodecBuffer->meta()->setInt32("decode-only", decodeOnly);
    }


    ALOGV("queueSecureInputBuffer #%d", it->mBufferId);
    ALOGV("queueSecureInputBuffer #%d", it->mBufferId);
    sp<AMessage> msg = mInputBufferFilled->dup();
    sp<AMessage> msg = mInputBufferFilled->dup();
+7 −1
Original line number Original line Diff line number Diff line
@@ -5226,6 +5226,7 @@ status_t MediaCodec::onQueueInputBuffer(const sp<AMessage> &msg) {


    buffer->setRange(offset, size);
    buffer->setRange(offset, size);
    buffer->meta()->setInt64("timeUs", timeUs);
    buffer->meta()->setInt64("timeUs", timeUs);

    if (flags & BUFFER_FLAG_EOS) {
    if (flags & BUFFER_FLAG_EOS) {
        buffer->meta()->setInt32("eos", true);
        buffer->meta()->setInt32("eos", true);
    }
    }
@@ -5234,7 +5235,12 @@ status_t MediaCodec::onQueueInputBuffer(const sp<AMessage> &msg) {
        buffer->meta()->setInt32("csd", true);
        buffer->meta()->setInt32("csd", true);
    }
    }


    if (mTunneled) {
    bool isBufferDecodeOnly = ((flags & BUFFER_FLAG_DECODE_ONLY) != 0);
    if (isBufferDecodeOnly) {
        buffer->meta()->setInt32("decode-only", true);
    }

    if (mTunneled && !isBufferDecodeOnly) {
        TunnelPeekState previousState = mTunnelPeekState;
        TunnelPeekState previousState = mTunnelPeekState;
        switch(mTunnelPeekState){
        switch(mTunnelPeekState){
            case TunnelPeekState::kEnabledNoBuffer:
            case TunnelPeekState::kEnabledNoBuffer:
+1 −0
Original line number Original line Diff line number Diff line
@@ -90,6 +90,7 @@ struct MediaCodec : public AHandler {
        BUFFER_FLAG_EOS           = 4,
        BUFFER_FLAG_EOS           = 4,
        BUFFER_FLAG_PARTIAL_FRAME = 8,
        BUFFER_FLAG_PARTIAL_FRAME = 8,
        BUFFER_FLAG_MUXER_DATA    = 16,
        BUFFER_FLAG_MUXER_DATA    = 16,
        BUFFER_FLAG_DECODE_ONLY   = 32,
    };
    };


    enum CVODegree {
    enum CVODegree {
Loading