summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--camera/Android.mk5
-rw-r--r--camera/OMXCameraAdapter/OMXCameraAdapter.cpp71
-rw-r--r--camera/inc/OMXCameraAdapter/OMXCameraAdapter.h13
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