summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorJacopo Mondi <jacopo@jmondi.org>2019-05-31 10:53:27 +0200
committerJacopo Mondi <jacopo@jmondi.org>2019-06-25 14:03:49 +0200
commitcb21bb33118e4b172d64cd4abb4f19caeb342707 (patch)
tree280470f088bab1b7245ca8aeafb8d92ca0034072 /src
parent3ef81b7f7f7a435a0c9c43d4146eb40aced99ec2 (diff)
libcamera: ipu3: Set pipe_mode based on stream configuration
Set the ImgU pipe_mode control based on the active stream configuration. Use 'Video' pipe mode unless the viewfinder stream is not active. Signed-off-by: Jacopo Mondi <jacopo@jmondi.org> Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com> Reviewed-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
Diffstat (limited to 'src')
-rw-r--r--src/libcamera/pipeline/ipu3/ipu3.cpp18
1 files changed, 18 insertions, 0 deletions
diff --git a/src/libcamera/pipeline/ipu3/ipu3.cpp b/src/libcamera/pipeline/ipu3/ipu3.cpp
index 1c0a9825..e4efb972 100644
--- a/src/libcamera/pipeline/ipu3/ipu3.cpp
+++ b/src/libcamera/pipeline/ipu3/ipu3.cpp
@@ -22,6 +22,7 @@
#include "media_device.h"
#include "pipeline_handler.h"
#include "utils.h"
+#include "v4l2_controls.h"
#include "v4l2_subdevice.h"
#include "v4l2_videodevice.h"
@@ -194,6 +195,12 @@ private:
class PipelineHandlerIPU3 : public PipelineHandler
{
public:
+ static constexpr unsigned int V4L2_CID_IPU3_PIPE_MODE = 0x009819c1;
+ enum IPU3PipeModes {
+ IPU3PipeModeVideo = 0,
+ IPU3PipeModeStillCapture = 1,
+ };
+
PipelineHandlerIPU3(CameraManager *manager);
CameraConfiguration *generateConfiguration(Camera *camera,
@@ -559,6 +566,17 @@ int PipelineHandlerIPU3::configure(Camera *camera, CameraConfiguration *c)
if (ret)
return ret;
+ /* Apply the "pipe_mode" control to the ImgU subdevice. */
+ V4L2ControlList ctrls;
+ ctrls.add(V4L2_CID_IPU3_PIPE_MODE, vfStream->active_ ?
+ IPU3PipeModeVideo :
+ IPU3PipeModeStillCapture);
+ ret = imgu->imgu_->setControls(&ctrls);
+ if (ret) {
+ LOG(IPU3, Error) << "Unable to set pipe_mode control";
+ return ret;
+ }
+
return 0;
}