summaryrefslogtreecommitdiffstats
path: root/camera/OMXCameraAdapter/OMXCameraAdapter.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'camera/OMXCameraAdapter/OMXCameraAdapter.cpp')
-rw-r--r--camera/OMXCameraAdapter/OMXCameraAdapter.cpp60
1 files changed, 57 insertions, 3 deletions
diff --git a/camera/OMXCameraAdapter/OMXCameraAdapter.cpp b/camera/OMXCameraAdapter/OMXCameraAdapter.cpp
index 267ef67..3e00286 100644
--- a/camera/OMXCameraAdapter/OMXCameraAdapter.cpp
+++ b/camera/OMXCameraAdapter/OMXCameraAdapter.cpp
@@ -33,7 +33,6 @@
static int mDebugFps = 0;
static int mDebugFcs = 0;
-
#define HERE(Msg) {CAMHAL_LOGEB("--===line %d, %s===--\n", __LINE__, Msg);}
namespace android {
@@ -658,6 +657,29 @@ void saveFile(unsigned char *buff, int width, int height, int format) {
LOG_FUNCTION_NAME_EXIT;
}
+#ifdef CAMERAHAL_USE_RAW_IMAGE_SAVING
+static status_t saveRaw(const void *buf, unsigned int size, const char *filename)
+{
+ status_t ret = NO_ERROR;
+
+ const int fd = open(filename, O_CREAT | O_WRONLY | O_SYNC | O_TRUNC, 0644);
+ if (fd < 0) {
+ CAMHAL_LOGE("ERROR: %s, Unable to save raw file", strerror(fd));
+ return BAD_VALUE;
+ }
+
+ if (write(fd, buf, size) != (signed)size) {
+ CAMHAL_LOGE("ERROR: Unable to write to raw file");
+ ret = NO_MEMORY;
+ } else {
+ CAMHAL_LOGD("buffer=%p, size=%d stored at %s", buf, size, filename);
+ }
+
+ close(fd);
+ return ret;
+}
+#endif
+
void OMXCameraAdapter::getParameters(CameraParameters& params)
{
status_t ret = NO_ERROR;
@@ -3226,11 +3248,43 @@ OMX_ERRORTYPE OMXCameraAdapter::OMXCameraAdapterFillBufferDone(OMX_IN OMX_HANDLE
}
}
- CAMHAL_LOGEB ("RAW buffer done on video port, length = %d", pBuffHeader->nFilledLen);
+ CAMHAL_LOGD("RAW buffer done on video port, length = %d", pBuffHeader->nFilledLen);
mask = (unsigned int) CameraFrame::RAW_FRAME;
- stat = sendCallBacks(cameraFrame, pBuffHeader, mask, pPortParam);
+#ifdef CAMERAHAL_USE_RAW_IMAGE_SAVING
+ time_t rawSaveTime;
+ struct tm * rawTimeStamp;
+ struct timeval rawTimeStampUsec;
+
+ char rawFilename[256];
+
+ time ( &rawSaveTime );
+ gettimeofday(&rawTimeStampUsec, NULL);
+ rawTimeStamp = gmtime ( &rawSaveTime );
+
+ snprintf(rawFilename,256, "%s/raw_%d_%d_%d_%lu.raw",
+ kRawImagesOutputDirPath,
+ rawTimeStamp->tm_hour,
+ rawTimeStamp->tm_min,
+ rawTimeStamp->tm_sec,
+ rawTimeStampUsec.tv_usec);
+
+ status_t statRaw = saveRaw(pBuffHeader->pBuffer, pBuffHeader->nFilledLen, rawFilename);
+
+ if(NO_ERROR == statRaw) {
+
+ CAMHAL_LOGD("raw_%d_%d_%d_%lu.raw successfully saved in %s",
+ rawTimeStamp->tm_hour,
+ rawTimeStamp->tm_min,
+ rawTimeStamp->tm_sec,
+ rawTimeStampUsec.tv_usec,
+ kRawImagesOutputDirPath);
+ stat = sendCallBacks(cameraFrame, pBuffHeader, mask, pPortParam);
+ } else {
+ CAMHAL_LOGE("ERROR: %d , while saving raw!", statRaw);
+ }
+#endif
} else {
CAMHAL_LOGEA("Frame received for non-(preview/capture/measure) port. This is yet to be supported");
goto EXIT;