Loading media/libstagefright/include/OMXNodeInstance.h +5 −5 Original line number Diff line number Diff line Loading @@ -107,6 +107,11 @@ struct OMXNodeInstance : public BnOMXNode { static OMX_CALLBACKTYPE kCallbacks; enum SecureBufferType { kSecureBufferTypeUnknown, kSecureBufferTypeOpaque, kSecureBufferTypeNativeHandle, }; private: struct CallbackDispatcherThread; struct CallbackDispatcher; Loading Loading @@ -145,11 +150,6 @@ private: IOMX::PortMode mPortMode[2]; // metadata and secure buffer types and graphic buffer mode tracking MetadataBufferType mMetadataType[2]; enum SecureBufferType { kSecureBufferTypeUnknown, kSecureBufferTypeOpaque, kSecureBufferTypeNativeHandle, }; SecureBufferType mSecureBufferType[2]; bool mGraphicBufferEnabled[2]; Loading media/libstagefright/omx/OMXNodeInstance.cpp +16 −4 Original line number Diff line number Diff line Loading @@ -131,22 +131,34 @@ struct BufferMeta { static_cast<void*>(mHidlMemory->getPointer())) : nullptr; } void CopyFromOMX(const OMX_BUFFERHEADERTYPE *header) { void CopyFromOMX(const OMX_BUFFERHEADERTYPE *header, OMXNodeInstance::SecureBufferType type) { if (!mCopyFromOmx) { return; } if (type != OMXNodeInstance::kSecureBufferTypeUnknown) { ALOGE("b/77486542"); android_errorWriteLog(0x534e4554, "77486542"); return; } // check component returns proper range sp<ABuffer> codec = getBuffer(header, true /* limit */); 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) { return; } if (type != OMXNodeInstance::kSecureBufferTypeUnknown) { ALOGE("b/77486542"); android_errorWriteLog(0x534e4554, "77486542"); return; } memcpy(header->pBuffer + header->nOffset, getPointer() + header->nOffset, header->nFilledLen); Loading Loading @@ -1676,7 +1688,7 @@ status_t OMXNodeInstance::emptyBuffer_l( header->nFilledLen = rangeLength; header->nOffset = rangeOffset; buffer_meta->CopyToOMX(header); buffer_meta->CopyToOMX(header, mSecureBufferType[kPortIndexInput]); } return emptyBuffer_l(header, flags, timestamp, (intptr_t)buffer, fenceFd); Loading Loading @@ -1964,7 +1976,7 @@ bool OMXNodeInstance::handleMessage(omx_message &msg) { CLOG_ERROR(onFillBufferDone, OMX_ErrorBadParameter, 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 codecBufferFilled(msg); Loading Loading
media/libstagefright/include/OMXNodeInstance.h +5 −5 Original line number Diff line number Diff line Loading @@ -107,6 +107,11 @@ struct OMXNodeInstance : public BnOMXNode { static OMX_CALLBACKTYPE kCallbacks; enum SecureBufferType { kSecureBufferTypeUnknown, kSecureBufferTypeOpaque, kSecureBufferTypeNativeHandle, }; private: struct CallbackDispatcherThread; struct CallbackDispatcher; Loading Loading @@ -145,11 +150,6 @@ private: IOMX::PortMode mPortMode[2]; // metadata and secure buffer types and graphic buffer mode tracking MetadataBufferType mMetadataType[2]; enum SecureBufferType { kSecureBufferTypeUnknown, kSecureBufferTypeOpaque, kSecureBufferTypeNativeHandle, }; SecureBufferType mSecureBufferType[2]; bool mGraphicBufferEnabled[2]; Loading
media/libstagefright/omx/OMXNodeInstance.cpp +16 −4 Original line number Diff line number Diff line Loading @@ -131,22 +131,34 @@ struct BufferMeta { static_cast<void*>(mHidlMemory->getPointer())) : nullptr; } void CopyFromOMX(const OMX_BUFFERHEADERTYPE *header) { void CopyFromOMX(const OMX_BUFFERHEADERTYPE *header, OMXNodeInstance::SecureBufferType type) { if (!mCopyFromOmx) { return; } if (type != OMXNodeInstance::kSecureBufferTypeUnknown) { ALOGE("b/77486542"); android_errorWriteLog(0x534e4554, "77486542"); return; } // check component returns proper range sp<ABuffer> codec = getBuffer(header, true /* limit */); 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) { return; } if (type != OMXNodeInstance::kSecureBufferTypeUnknown) { ALOGE("b/77486542"); android_errorWriteLog(0x534e4554, "77486542"); return; } memcpy(header->pBuffer + header->nOffset, getPointer() + header->nOffset, header->nFilledLen); Loading Loading @@ -1676,7 +1688,7 @@ status_t OMXNodeInstance::emptyBuffer_l( header->nFilledLen = rangeLength; header->nOffset = rangeOffset; buffer_meta->CopyToOMX(header); buffer_meta->CopyToOMX(header, mSecureBufferType[kPortIndexInput]); } return emptyBuffer_l(header, flags, timestamp, (intptr_t)buffer, fenceFd); Loading Loading @@ -1964,7 +1976,7 @@ bool OMXNodeInstance::handleMessage(omx_message &msg) { CLOG_ERROR(onFillBufferDone, OMX_ErrorBadParameter, 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 codecBufferFilled(msg); Loading