diff options
Diffstat (limited to 'sec_mm/sec_omx/sec_osal')
-rw-r--r-- | sec_mm/sec_omx/sec_osal/Android.mk | 3 | ||||
-rw-r--r-- | sec_mm/sec_omx/sec_osal/SEC_OSAL_Buffer.cpp | 59 | ||||
-rw-r--r-- | sec_mm/sec_omx/sec_osal/SEC_OSAL_Buffer.h | 1 |
3 files changed, 41 insertions, 22 deletions
diff --git a/sec_mm/sec_omx/sec_osal/Android.mk b/sec_mm/sec_omx/sec_osal/Android.mk index 75ceb14..a98e884 100644 --- a/sec_mm/sec_omx/sec_osal/Android.mk +++ b/sec_mm/sec_omx/sec_osal/Android.mk @@ -33,6 +33,7 @@ LOCAL_SHARED_LIBRARIES := libcutils libutils \ LOCAL_C_INCLUDES := $(SEC_OMX_INC)/khronos \ $(SEC_OMX_INC)/sec \ $(SEC_OMX_TOP)/sec_osal \ - $(SEC_OMX_COMPONENT)/common + $(SEC_OMX_COMPONENT)/common \ + $(SEC_OMX_TOP)/../../include include $(BUILD_STATIC_LIBRARY) diff --git a/sec_mm/sec_omx/sec_osal/SEC_OSAL_Buffer.cpp b/sec_mm/sec_omx/sec_osal/SEC_OSAL_Buffer.cpp index 21476df..799b550 100644 --- a/sec_mm/sec_omx/sec_osal/SEC_OSAL_Buffer.cpp +++ b/sec_mm/sec_omx/sec_osal/SEC_OSAL_Buffer.cpp @@ -54,6 +54,9 @@ extern "C" { #include <media/stagefright/HardwareAPI.h> #include <hardware/hardware.h> #include <media/stagefright/MetadataBufferType.h> +#include "hal_public.h" + +#define HAL_PIXEL_FORMAT_C110_NV12 0x100 using namespace android; @@ -360,6 +363,16 @@ EXIT: return ret; } +OMX_BOOL isMetadataBufferTypeGrallocSource(OMX_BYTE pInputDataBuffer) +{ + OMX_U32 type = getMetadataBufferType(pInputDataBuffer); + + if (type == kMetadataBufferTypeGrallocSource) + return OMX_TRUE; + else + return OMX_FALSE; +} + OMX_ERRORTYPE preprocessMetaDataInBuffers(OMX_HANDLETYPE hComponent, OMX_BYTE pInputDataBuffer, BUFFER_ADDRESS_INFO *pInputInfo) { OMX_ERRORTYPE ret = OMX_ErrorNone; @@ -387,32 +400,36 @@ OMX_ERRORTYPE preprocessMetaDataInBuffers(OMX_HANDLETYPE hComponent, OMX_BYTE pI SEC_OSAL_Memcpy(&pInputInfo->YPhyAddr, pInputDataBuffer + 4, sizeof(void *)); SEC_OSAL_Memcpy(&pInputInfo->CPhyAddr, pInputDataBuffer + 4 + sizeof(void *), sizeof(void *)); } else if (type == kMetadataBufferTypeGrallocSource){ - - ret = OMX_ErrorNotImplemented; - goto EXIT; - + IMG_gralloc_module_public_t *module = (IMG_gralloc_module_public_t *)pSECPort->pIMGGrallocModule; OMX_PTR pUnreadableBuffer = NULL; OMX_PTR pReadableBuffer = NULL; - void *pVirAddrs[2]; - OMX_PTR dstYAddr = pSECComponent->processData[INPUT_PORT_INDEX].specificBufferHeader.YVirAddr; - OMX_PTR dstCAddr = pSECComponent->processData[INPUT_PORT_INDEX].specificBufferHeader.CVirAddr; - SEC_OSAL_Memcpy(&pUnreadableBuffer, pInputDataBuffer + 4, sizeof(void *)); - pReadableBuffer = (OMX_PTR)getVADDRfromANB(pUnreadableBuffer, - (OMX_U32)pSECPort->portDefinition.format.video.nFrameWidth, - (OMX_U32)pSECPort->portDefinition.format.video.nFrameHeight, - pVirAddrs); - + OMX_PTR pVirAddrs[2]; + int err = 0; + + pVirAddrs[0] = pSECComponent->processData[INPUT_PORT_INDEX].specificBufferHeader.YVirAddr; + pVirAddrs[1] = pSECComponent->processData[INPUT_PORT_INDEX].specificBufferHeader.CVirAddr; + + if (module == NULL) { + err = hw_get_module(GRALLOC_HARDWARE_MODULE_ID, (const hw_module_t **)&module); + if(err) { + SEC_OSAL_Log(SEC_LOG_ERROR, "hw_get_module failed (err=%d)\n", err); + ret = OMX_ErrorUndefined; + goto EXIT; + } + pSECPort->pIMGGrallocModule = (OMX_PTR)module; + } /**************************************/ - /* IMG CSC RGB to NV12(NV12T) */ + /* IMG CSC RGB to NV12 */ /**************************************/ - /* - source : pReadableBuffer - destination : dstYAddr, dstCAddr - */ - - - putVADDRtoANB(pUnreadableBuffer); + SEC_OSAL_Memcpy(&pUnreadableBuffer, pInputDataBuffer + 4, sizeof(void *)); + android_native_buffer_t *buf = (android_native_buffer_t *)pUnreadableBuffer; + err = module->Blit(module, buf->handle, pVirAddrs, HAL_PIXEL_FORMAT_C110_NV12); + if(err) { + SEC_OSAL_Log(SEC_LOG_ERROR, "module->Blit() failed (err=%d)\n", err); + ret = OMX_ErrorUndefined; + goto EXIT; + } pInputInfo->YPhyAddr = pSECComponent->processData[INPUT_PORT_INDEX].specificBufferHeader.YPhyAddr; pInputInfo->CPhyAddr = pSECComponent->processData[INPUT_PORT_INDEX].specificBufferHeader.CPhyAddr; diff --git a/sec_mm/sec_omx/sec_osal/SEC_OSAL_Buffer.h b/sec_mm/sec_omx/sec_osal/SEC_OSAL_Buffer.h index 3699c7d..da7e8f3 100644 --- a/sec_mm/sec_omx/sec_osal/SEC_OSAL_Buffer.h +++ b/sec_mm/sec_omx/sec_osal/SEC_OSAL_Buffer.h @@ -53,6 +53,7 @@ OMX_ERRORTYPE useAndroidNativeBuffer(OMX_HANDLETYPE hComponent, OMX_PTR Componen OMX_U32 getVADDRfromANB(OMX_PTR pUnreadableBuffer, OMX_U32 Width, OMX_U32 Height, void *vaddress[]);
OMX_U32 putVADDRtoANB(OMX_PTR pUnreadableBuffer);
OMX_ERRORTYPE enableStoreMetaDataInBuffers(OMX_HANDLETYPE hComponent, OMX_PTR ComponentParameterStructure);
+OMX_BOOL isMetadataBufferTypeGrallocSource(OMX_BYTE pInputDataBuffer);
OMX_ERRORTYPE preprocessMetaDataInBuffers(OMX_HANDLETYPE hComponent, OMX_BYTE pInputDataBuffer, BUFFER_ADDRESS_INFO *pInputInfo);
#ifdef __cplusplus
|