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

Commit ce950317 authored by Wonsik Kim's avatar Wonsik Kim Committed by android-build-merger
Browse files

Merge "DO NOT MERGE omx: don't try to memcpy from/to opaque pointer/native...

Merge "DO NOT MERGE omx: don't try to memcpy from/to opaque pointer/native handle." into oc-dev am: 40091487
am: 29ca07d8

Change-Id: Id6c32eea63808a6bd08f87e4790a5fbe96587700
parents f83f69d8 29ca07d8
Loading
Loading
Loading
Loading
+16 −4
Original line number Original line Diff line number Diff line
@@ -131,22 +131,34 @@ struct BufferMeta {
                static_cast<void*>(mHidlMemory->getPointer())) : nullptr;
                static_cast<void*>(mHidlMemory->getPointer())) : nullptr;
    }
    }


    void CopyFromOMX(const OMX_BUFFERHEADERTYPE *header) {
    void CopyFromOMX(const OMX_BUFFERHEADERTYPE *header, OMXNodeInstance::SecureBufferType type) {
        if (!mCopyFromOmx) {
        if (!mCopyFromOmx) {
            return;
            return;
        }
        }


        if (type != OMXNodeInstance::kSecureBufferTypeUnknown) {
            ALOGE("b/77486542");
            android_errorWriteLog(0x534e4554, "77486542");
            return;
        }

        // check component returns proper range
        // check component returns proper range
        sp<ABuffer> codec = getBuffer(header, true /* limit */);
        sp<ABuffer> codec = getBuffer(header, true /* limit */);


        memcpy(getPointer() + header->nOffset, codec->data(), codec->size());
        memcpy(getPointer() + header->nOffset, codec->data(), codec->size());
    }
    }


    void CopyToOMX(const OMX_BUFFERHEADERTYPE *header) {
    void CopyToOMX(const OMX_BUFFERHEADERTYPE *header, OMXNodeInstance::SecureBufferType type) {
        if (!mCopyToOmx) {
        if (!mCopyToOmx) {
            return;
            return;
        }
        }


        if (type != OMXNodeInstance::kSecureBufferTypeUnknown) {
            ALOGE("b/77486542");
            android_errorWriteLog(0x534e4554, "77486542");
            return;
        }

        memcpy(header->pBuffer + header->nOffset,
        memcpy(header->pBuffer + header->nOffset,
                getPointer() + header->nOffset,
                getPointer() + header->nOffset,
                header->nFilledLen);
                header->nFilledLen);
@@ -1693,7 +1705,7 @@ status_t OMXNodeInstance::emptyBuffer_l(
        header->nFilledLen = rangeLength;
        header->nFilledLen = rangeLength;
        header->nOffset = rangeOffset;
        header->nOffset = rangeOffset;


        buffer_meta->CopyToOMX(header);
        buffer_meta->CopyToOMX(header, mSecureBufferType[kPortIndexInput]);
    }
    }


    return emptyBuffer_l(header, flags, timestamp, (intptr_t)buffer, fenceFd);
    return emptyBuffer_l(header, flags, timestamp, (intptr_t)buffer, fenceFd);
@@ -1981,7 +1993,7 @@ bool OMXNodeInstance::handleMessage(omx_message &msg) {
            CLOG_ERROR(onFillBufferDone, OMX_ErrorBadParameter,
            CLOG_ERROR(onFillBufferDone, OMX_ErrorBadParameter,
                    FULL_BUFFER(NULL, buffer, msg.fenceFd));
                    FULL_BUFFER(NULL, buffer, msg.fenceFd));
        }
        }
        buffer_meta->CopyFromOMX(buffer);
        buffer_meta->CopyFromOMX(buffer, mSecureBufferType[kPortIndexOutput]);


        // fix up the buffer info (especially timestamp) if needed
        // fix up the buffer info (especially timestamp) if needed
        codecBufferFilled(msg);
        codecBufferFilled(msg);
+5 −5
Original line number Original line Diff line number Diff line
@@ -116,6 +116,11 @@ struct OMXNodeInstance : public BnOMXNode {


    static OMX_CALLBACKTYPE kCallbacks;
    static OMX_CALLBACKTYPE kCallbacks;


    enum SecureBufferType {
        kSecureBufferTypeUnknown,
        kSecureBufferTypeOpaque,
        kSecureBufferTypeNativeHandle,
    };
private:
private:
    struct CallbackDispatcherThread;
    struct CallbackDispatcherThread;
    struct CallbackDispatcher;
    struct CallbackDispatcher;
@@ -154,11 +159,6 @@ private:
    IOMX::PortMode mPortMode[2];
    IOMX::PortMode mPortMode[2];
    // metadata and secure buffer types and graphic buffer mode tracking
    // metadata and secure buffer types and graphic buffer mode tracking
    MetadataBufferType mMetadataType[2];
    MetadataBufferType mMetadataType[2];
    enum SecureBufferType {
        kSecureBufferTypeUnknown,
        kSecureBufferTypeOpaque,
        kSecureBufferTypeNativeHandle,
    };
    SecureBufferType mSecureBufferType[2];
    SecureBufferType mSecureBufferType[2];
    bool mGraphicBufferEnabled[2];
    bool mGraphicBufferEnabled[2];