summaryrefslogtreecommitdiffstats
path: root/modules/camera
diff options
context:
space:
mode:
authorAlex Ray <aray@google.com>2013-10-21 00:46:44 -0700
committerAlex Ray <aray@google.com>2013-10-21 12:21:08 -0700
commit69f1f9166adea3579353fd3bc14b6a23c43de024 (patch)
treeafd261e4f3f536b3e3e90ad2379007e5e36a01f8 /modules/camera
parent7915e97d637df3ebbdb9fda542a2657236361e14 (diff)
downloadhardware_libhardware-69f1f9166adea3579353fd3bc14b6a23c43de024.zip
hardware_libhardware-69f1f9166adea3579353fd3bc14b6a23c43de024.tar.gz
hardware_libhardware-69f1f9166adea3579353fd3bc14b6a23c43de024.tar.bz2
modules: camera: dump device and stream state
Change-Id: Iae3badba71f13784dfdd65d6e77b20283437935a
Diffstat (limited to 'modules/camera')
-rw-r--r--modules/camera/Camera.cpp17
-rw-r--r--modules/camera/Stream.cpp88
-rw-r--r--modules/camera/Stream.h3
3 files changed, 101 insertions, 7 deletions
diff --git a/modules/camera/Camera.cpp b/modules/camera/Camera.cpp
index 4e9c18d..c7ca64a 100644
--- a/modules/camera/Camera.cpp
+++ b/modules/camera/Camera.cpp
@@ -16,6 +16,7 @@
#include <cstdlib>
#include <pthread.h>
+#include <stdio.h>
#include <hardware/camera3.h>
#include <sync/sync.h>
#include <system/camera_metadata.h>
@@ -491,7 +492,21 @@ void Camera::getMetadataVendorTagOps(vendor_tag_query_ops_t *ops)
void Camera::dump(int fd)
{
ALOGV("%s:%d: Dumping to fd %d", __func__, mId, fd);
- // TODO: dprintf all relevant state to fd
+
+ pthread_mutex_lock(&mMutex);
+
+ fdprintf(fd, "Camera ID: %d (Busy: %d)\n", mId, mBusy);
+
+ // TODO: dump all settings
+ fdprintf(fd, "Most Recent Settings: (%p)\n", mSettings);
+
+ fdprintf(fd, "Number of streams: %d\n", mNumStreams);
+ for (int i = 0; i < mNumStreams; i++) {
+ fdprintf(fd, "Stream %d/%d:\n", i, mNumStreams);
+ mStreams[i]->dump(fd);
+ }
+
+ pthread_mutex_unlock(&mMutex);
}
void Camera::setTemplate(int type, camera_metadata_t *settings)
diff --git a/modules/camera/Stream.cpp b/modules/camera/Stream.cpp
index 9c5c5b5..7703910 100644
--- a/modules/camera/Stream.cpp
+++ b/modules/camera/Stream.cpp
@@ -15,6 +15,7 @@
*/
#include <pthread.h>
+#include <stdio.h>
#include <hardware/camera3.h>
#include <hardware/gralloc.h>
#include <system/graphics.h>
@@ -94,6 +95,61 @@ bool Stream::isOutputType()
mType == CAMERA3_STREAM_BIDIRECTIONAL;
}
+const char* Stream::typeToString(int type)
+{
+ switch (type) {
+ case CAMERA3_STREAM_INPUT:
+ return "CAMERA3_STREAM_INPUT";
+ case CAMERA3_STREAM_OUTPUT:
+ return "CAMERA3_STREAM_OUTPUT";
+ case CAMERA3_STREAM_BIDIRECTIONAL:
+ return "CAMERA3_STREAM_BIDIRECTIONAL";
+ }
+ return "Invalid stream type!";
+}
+
+const char* Stream::formatToString(int format)
+{
+ // See <system/graphics.h> for full list
+ switch (format) {
+ case HAL_PIXEL_FORMAT_BGRA_8888:
+ return "BGRA 8888";
+ case HAL_PIXEL_FORMAT_RGBA_8888:
+ return "RGBA 8888";
+ case HAL_PIXEL_FORMAT_RGBX_8888:
+ return "RGBX 8888";
+ case HAL_PIXEL_FORMAT_RGB_888:
+ return "RGB 888";
+ case HAL_PIXEL_FORMAT_RGB_565:
+ return "RGB 565";
+ case HAL_PIXEL_FORMAT_sRGB_A_8888:
+ return "sRGB A 8888";
+ case HAL_PIXEL_FORMAT_sRGB_X_8888:
+ return "sRGB B 8888";
+ case HAL_PIXEL_FORMAT_Y8:
+ return "Y8";
+ case HAL_PIXEL_FORMAT_Y16:
+ return "Y16";
+ case HAL_PIXEL_FORMAT_YV12:
+ return "YV12";
+ case HAL_PIXEL_FORMAT_YCbCr_422_SP:
+ return "NV16";
+ case HAL_PIXEL_FORMAT_YCrCb_420_SP:
+ return "NV21";
+ case HAL_PIXEL_FORMAT_YCbCr_422_I:
+ return "YUY2";
+ case HAL_PIXEL_FORMAT_RAW_SENSOR:
+ return "RAW SENSOR";
+ case HAL_PIXEL_FORMAT_BLOB:
+ return "BLOB";
+ case HAL_PIXEL_FORMAT_IMPLEMENTATION_DEFINED:
+ return "IMPLEMENTATION DEFINED";
+ case HAL_PIXEL_FORMAT_YCbCr_420_888:
+ return "FLEXIBLE YCbCr 420 888";
+ }
+ return "Invalid stream format!";
+}
+
bool Stream::isRegistered()
{
return mRegistered;
@@ -112,15 +168,15 @@ bool Stream::isValidReuseStream(int id, camera3_stream_t *s)
return false;
}
if (s->stream_type != mType) {
- // TODO: prettyprint type string
- ALOGE("%s:%d: Mismatched type in reused stream. Got %d expect %d",
- __func__, mId, s->stream_type, mType);
+ ALOGE("%s:%d: Mismatched type in reused stream. Got %s(%d) "
+ "expect %s(%d)", __func__, mId, typeToString(s->stream_type),
+ s->stream_type, typeToString(mType), mType);
return false;
}
if (s->format != mFormat) {
- // TODO: prettyprint format string
- ALOGE("%s:%d: Mismatched format in reused stream. Got %d expect %d",
- __func__, mId, s->format, mFormat);
+ ALOGE("%s:%d: Mismatched format in reused stream. Got %s(%d) "
+ "expect %s(%d)", __func__, mId, formatToString(s->format),
+ s->format, formatToString(mFormat), mFormat);
return false;
}
if (s->width != mWidth) {
@@ -173,4 +229,24 @@ void Stream::unregisterBuffers_L()
// TODO: unregister buffers from hw
}
+void Stream::dump(int fd)
+{
+ pthread_mutex_lock(&mMutex);
+
+ fdprintf(fd, "Stream ID: %d (%p)\n", mId, mStream);
+ fdprintf(fd, "Stream Type: %s (%d)\n", typeToString(mType), mType);
+ fdprintf(fd, "Width: %u Height: %u\n", mWidth, mHeight);
+ fdprintf(fd, "Stream Format: %s (%d)", formatToString(mFormat), mFormat);
+ // ToDo: prettyprint usage mask flags
+ fdprintf(fd, "Gralloc Usage Mask: 0x%x\n", mUsage);
+ fdprintf(fd, "Max Buffer Count: %d\n", mMaxBuffers);
+ fdprintf(fd, "Buffers Registered: %s\n", mRegistered ? "true" : "false");
+ fdprintf(fd, "Number of Buffers: %d\n", mNumBuffers);
+ for (int i = 0; i < mNumBuffers; i++) {
+ fdprintf(fd, "Buffer %d/%d: %p\n", i, mNumBuffers, mBuffers[i]);
+ }
+
+ pthread_mutex_unlock(&mMutex);
+}
+
} // namespace default_camera_hal
diff --git a/modules/camera/Stream.h b/modules/camera/Stream.h
index 34abd95..b62114e 100644
--- a/modules/camera/Stream.h
+++ b/modules/camera/Stream.h
@@ -41,6 +41,9 @@ class Stream {
bool isInputType();
bool isOutputType();
bool isRegistered();
+ const char* typeToString(int type);
+ const char* formatToString(int format);
+ void dump(int fd);
// This stream is being reused. Used in stream configuration passes
bool mReuse;