diff options
-rw-r--r-- | camera/Android.mk | 5 | ||||
-rw-r--r-- | camera/OMXCameraAdapter/OMXCameraAdapter.cpp | 71 | ||||
-rw-r--r-- | camera/inc/OMXCameraAdapter/OMXCameraAdapter.h | 13 |
3 files changed, 89 insertions, 0 deletions
diff --git a/camera/Android.mk b/camera/Android.mk index bfaff82..0bb2997 100644 --- a/camera/Android.mk +++ b/camera/Android.mk @@ -32,6 +32,11 @@ ifndef TI_CAMERAHAL_DONT_USE_RAW_IMAGE_SAVING CAMERAHAL_CFLAGS += -DCAMERAHAL_USE_RAW_IMAGE_SAVING endif +ifdef TI_CAMERAHAL_PROFILING + # Enable OMX Camera component profiling + CAMERAHAL_CFLAGS += -DCAMERAHAL_OMX_PROFILING +endif + CAMERAHAL_CFLAGS += -DLOG_TAG=\"CameraHal\" OMAP4_CAMERA_HAL_SRC := \ diff --git a/camera/OMXCameraAdapter/OMXCameraAdapter.cpp b/camera/OMXCameraAdapter/OMXCameraAdapter.cpp index 0ebd0e6..1d209bf 100644 --- a/camera/OMXCameraAdapter/OMXCameraAdapter.cpp +++ b/camera/OMXCameraAdapter/OMXCameraAdapter.cpp @@ -37,6 +37,12 @@ static int mDebugFcs = 0; namespace android { +#ifdef CAMERAHAL_OMX_PROFILING + +const char OMXCameraAdapter::DEFAULT_PROFILE_PATH[] = "/data/dbg/profile_data.bin"; + +#endif + //frames skipped before recalculating the framerate #define FPS_PERIOD 30 @@ -53,6 +59,13 @@ status_t OMXCameraAdapter::initialize(CameraProperties::Properties* caps) property_get("debug.camera.framecounts", value, "0"); mDebugFcs = atoi(value); +#ifdef CAMERAHAL_OMX_PROFILING + + property_get("debug.camera.profile", value, "0"); + mDebugProfile = atoi(value); + +#endif + TIMM_OSAL_ERRORTYPE osalError = OMX_ErrorNone; OMX_ERRORTYPE eError = OMX_ErrorNone; status_t ret = NO_ERROR; @@ -3057,6 +3070,48 @@ OMX_ERRORTYPE OMXCameraAdapterFillBufferDone(OMX_IN OMX_HANDLETYPE hComponent, return eError; } +#ifdef CAMERAHAL_OMX_PROFILING + +status_t OMXCameraAdapter::storeProfilingData(OMX_BUFFERHEADERTYPE* pBuffHeader) { + OMX_TI_PLATFORMPRIVATE *platformPrivate = NULL; + OMX_OTHER_EXTRADATATYPE *extraData = NULL; + FILE *fd = NULL; + + LOG_FUNCTION_NAME + + if ( UNLIKELY( mDebugProfile ) ) { + + platformPrivate = static_cast<OMX_TI_PLATFORMPRIVATE *> (pBuffHeader->pPlatformPrivate); + extraData = getExtradata(static_cast<OMX_OTHER_EXTRADATATYPE *> (platformPrivate->pMetaDataBuffer), + platformPrivate->nMetaDataSize, + static_cast<OMX_EXTRADATATYPE> (OMX_TI_ProfilerData)); + + if ( NULL != extraData ) { + if( extraData->eType == static_cast<OMX_EXTRADATATYPE> (OMX_TI_ProfilerData) ) { + + fd = fopen(DEFAULT_PROFILE_PATH, "ab"); + if ( NULL != fd ) { + fwrite(extraData->data, 1, extraData->nDataSize, fd); + fclose(fd); + } else { + return -errno; + } + + } else { + return NOT_ENOUGH_DATA; + } + } else { + return NOT_ENOUGH_DATA; + } + } + + LOG_FUNCTION_NAME_EXIT + + return NO_ERROR; +} + +#endif + /*========================================================*/ /* @ fn SampleTest_FillBufferDone :: Application callback*/ /*========================================================*/ @@ -3081,6 +3136,16 @@ OMX_ERRORTYPE OMXCameraAdapter::OMXCameraAdapterFillBufferDone(OMX_IN OMX_HANDLE OMX_TI_ANCILLARYDATATYPE *ancillaryData; bool snapshotFrame = false; + if ( NULL == pBuffHeader ) { + return OMX_ErrorBadParameter; + } + +#ifdef CAMERAHAL_OMX_PROFILING + + storeProfilingData(pBuffHeader); + +#endif + res1 = res2 = NO_ERROR; pPortParam = &(mCameraAdapterParameters.mCameraPortParams[pBuffHeader->nOutputPortIndex]); @@ -3669,6 +3734,12 @@ OMXCameraAdapter::OMXCameraAdapter(size_t sensor_index) mFramesWithDisplay = 0; mFramesWithEncoder = 0; +#ifdef CAMERAHAL_OMX_PROFILING + + mDebugProfile = 0; + +#endif + LOG_FUNCTION_NAME_EXIT; } diff --git a/camera/inc/OMXCameraAdapter/OMXCameraAdapter.h b/camera/inc/OMXCameraAdapter/OMXCameraAdapter.h index 3879e1f..4dacb27 100644 --- a/camera/inc/OMXCameraAdapter/OMXCameraAdapter.h +++ b/camera/inc/OMXCameraAdapter/OMXCameraAdapter.h @@ -696,6 +696,12 @@ private: FILE * fopenCameraDCC(const char *dccFolderPath); FILE * parseDCCsubDir(DIR *pDir, char *path); +#ifdef CAMERAHAL_OMX_PROFILING + + status_t storeProfilingData(OMX_BUFFERHEADERTYPE* pBuffHeader); + +#endif + class CommandHandler : public Thread { public: CommandHandler(OMXCameraAdapter* ca) @@ -872,6 +878,13 @@ private: static const size_t MAX_FOCUS_AREAS; +#ifdef CAMERAHAL_OMX_PROFILING + + static const char DEFAULT_PROFILE_PATH[]; + int mDebugProfile; + +#endif + OMX_VERSIONTYPE mCompRevision; //OMX Component UUID |