summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSylwester Nawrocki <s.nawrocki@samsung.com>2017-11-23 18:47:12 +0100
committerSylwester Nawrocki <s.nawrocki@samsung.com>2017-11-23 18:53:04 +0100
commit99cbea7dbc71d79ae72d2d0177e7b7b7f1141242 (patch)
treee8fc12348ad5279f984086f7eb466050df9d81cc
parentb00069932036e47d718f8d1884eb9930a72de16b (diff)
downloadgst-plugins-camera-n4-99cbea7dbc71d79ae72d2d0177e7b7b7f1141242.tar.gz
gst-plugins-camera-n4-99cbea7dbc71d79ae72d2d0177e7b7b7f1141242.tar.bz2
gst-plugins-camera-n4-99cbea7dbc71d79ae72d2d0177e7b7b7f1141242.zip
Initialize number of buffers in camerasrc_set_format()
Number of 3AA0C buffers is decreased to 0 as the 3AA0C DMA output is currently not used. Change-Id: If6f592e9dd083f261220b5e56ddd403554aa01c5 Signed-off-by: Sylwester Nawrocki <s.nawrocki@samsung.com>
-rw-r--r--camerasrc/src/camerasrc.c108
-rw-r--r--camerasrc/src/include/camerasrc-common.h6
2 files changed, 60 insertions, 54 deletions
diff --git a/camerasrc/src/camerasrc.c b/camerasrc/src/camerasrc.c
index 65582a2..231daca 100644
--- a/camerasrc/src/camerasrc.c
+++ b/camerasrc/src/camerasrc.c
@@ -111,14 +111,19 @@
#define FIMC_IS_BAYER_IMG_WIDTH 2560
#define FIMC_IS_BAYER_IMG_HEIGHT 1440
+#define FIMC_IS_FRONT_SENSOR_NUM_BUFFERS 5
+#define FIMC_IS_FRONT_3AA1_NUM_BUFFERS 5
+#define FIMC_IS_FRONT_ISP_NUM_BUFFERS 5
+#define FIMC_IS_FRONT_SCC_NUM_BUFFERS 4
+#define FIMC_IS_FRONT_SCP_NUM_BUFFERS 4
+
#define FIMC_IS_REAR_SENSOR_NUM_BUFFERS 5
#define FIMC_IS_REAR_3AA0_NUM_BUFFERS 10
+#define FIMC_IS_REAR_3AA0C_NUM_BUFFERS 0
#define FIMC_IS_REAR_ISP_NUM_BUFFERS 5
#define FIMC_IS_REAR_SCC_NUM_BUFFERS 4
#define FIMC_IS_REAR_SCP_NUM_BUFFERS 4
-#define FIMC_IS_FRONT_3AA1_NUM_BUFFERS 5
-
extern const CAMERASRC_DEV_DEPENDENT_MISC_FUNC *dev_misc_func;
/** proto type of internal function **/
@@ -1583,7 +1588,7 @@ void *_camerasrc_rear_isp_thread_func(void *arg)
V4L2_BUF_TYPE_VIDEO_OUTPUT_MPLANE,
V4L2_MEMORY_DMABUF,
&buf_index_3aa_out,
- p->buffer_ta[0].num_planes);
+ p->buffer_3aa_out[0].num_planes);
if (ret != CAMERASRC_SUCCESS) {
camsrc_error("[3AA0 OUTPUT] _camerasrc_ioctl_dqbuf failed");
break;
@@ -1617,7 +1622,7 @@ void *_camerasrc_rear_isp_thread_func(void *arg)
}
/* Set ISP metadata */
- shot_3aa = (struct camera2_shot_ext *)p->buffer_ta[buf_index_3aa_out].planes[1].start;
+ shot_3aa = (struct camera2_shot_ext *)p->buffer_3aa_out[buf_index_3aa_out].planes[1].start;
memcpy(&shot_isp->shot.ctl, &shot_3aa->shot.ctl, sizeof(struct camera2_ctl) - sizeof(struct camera2_entry_ctl));
memcpy(&shot_isp->shot.udm, &shot_3aa->shot.udm, sizeof(struct camera2_udm));
@@ -1687,7 +1692,7 @@ void *_camerasrc_rear_isp_thread_func(void *arg)
p->qbuf_count_sensor++;
- shot_3aa = (struct camera2_shot_ext *)p->buffer_ta[buf_index_3aa_out].planes[1].start;
+ shot_3aa = (struct camera2_shot_ext *)p->buffer_3aa_out[buf_index_3aa_out].planes[1].start;
_camerasrc_set_shot_meta2(p, GRP_3AA, 0, 0, shot_3aa);
/* 3AA0 OUTPUT - QBUF */
@@ -1696,7 +1701,7 @@ void *_camerasrc_rear_isp_thread_func(void *arg)
V4L2_BUF_TYPE_VIDEO_OUTPUT_MPLANE,
V4L2_MEMORY_DMABUF,
buf_index_3aa_out,
- &p->buffer_ta[buf_index_3aa_out]);
+ &p->buffer_3aa_out[buf_index_3aa_out]);
if (ret != CAMERASRC_SUCCESS) {
camsrc_error("[3AA0 - OUTPUT] _camerasrc_ioctl_qbuf index %d, failed[%x]",
@@ -1743,7 +1748,7 @@ void *_camerasrc_rear_isp_thread_func(void *arg)
V4L2_BUF_TYPE_VIDEO_OUTPUT_MPLANE,
V4L2_MEMORY_DMABUF,
&buf_index_3aa_out,
- p->buffer_ta[0].num_planes);
+ p->buffer_3aa_out[0].num_planes);
}
while (p->qbuf_count_3aa_cap-- > 1) {
@@ -2159,7 +2164,7 @@ int camerasrc_create_buffer(camsrc_handle_t handle)
p = CAMERASRC_HANDLE(handle);
- if (p->buffer_sensor || p->buffer_ta || p->buffer_isp || p->buffer_scc || p->buffer_scp) {
+ if (p->buffer_sensor || p->buffer_3aa_out || p->buffer_isp || p->buffer_scc || p->buffer_scp) {
camsrc_warning("release remained buffer");
camerasrc_destroy_buffer(handle);
}
@@ -2167,24 +2172,21 @@ int camerasrc_create_buffer(camsrc_handle_t handle)
preview_width = p->format_scp.img_size.width;
preview_height = p->format_scp.img_size.height;
- p->format_3aa1.num_buffers = FIMC_IS_FRONT_3AA1_NUM_BUFFERS;
-
/**
* buffer allocation
*/
if (p->cur_dev_id == CAMERASRC_DEV_ID_PRIMARY) {
/* TA */
- camsrc_warning("buffer_ta allocation");
+ camsrc_warning("buffer_3aa_out allocation");
buffer_size[0] = 4096; //(64 + 9) / 10 * 16 * 32;;
buffer_size[1] = META_PLANE_SIZE;
buffer_size[2] = 0;
buffer_size[3] = 0;
- p->format_ta.num_buffers = 10;
-
- if (_camerasrc_allocate_device_buffer(handle, &p->buffer_ta, &p->format_ta, buffer_size, 2) != CAMERASRC_SUCCESS) {
- camsrc_error("alloc buffer_ta failed");
+ if (_camerasrc_allocate_device_buffer(handle, &p->buffer_3aa_out, &p->format_3aa0_out,
+ buffer_size, 2) != CAMERASRC_SUCCESS) {
+ camsrc_error("alloc buffer_3aa_out failed");
goto CREATE_BUFFER_FAILED;
}
@@ -2196,8 +2198,6 @@ int camerasrc_create_buffer(camsrc_handle_t handle)
buffer_size[2] = 0;
buffer_size[3] = 0;
- p->format_isp.num_buffers = 5;
-
if (_camerasrc_allocate_device_buffer(handle, &p->buffer_isp, &p->format_isp, buffer_size, 2) != CAMERASRC_SUCCESS) {
camsrc_error("alloc buffer_isp failed");
goto CREATE_BUFFER_FAILED;
@@ -2224,8 +2224,6 @@ int camerasrc_create_buffer(camsrc_handle_t handle)
buffer_size[2] = 0;
buffer_size[3] = 0;
- p->format_sensor.num_buffers = 5;
-
if (_camerasrc_allocate_device_buffer(handle, &p->buffer_sensor, &p->format_sensor, buffer_size, 2) != CAMERASRC_SUCCESS) {
camsrc_error("alloc buffer_sensor failed");
goto CREATE_BUFFER_FAILED;
@@ -2244,24 +2242,18 @@ int camerasrc_create_buffer(camsrc_handle_t handle)
buffer_size[2] = 0;
buffer_size[3] = 0;
- p->format_sensor.num_buffers = FIMC_IS_REAR_SENSOR_NUM_BUFFERS;
-
if (_camerasrc_allocate_device_buffer(handle, &p->buffer_sensor, &p->format_sensor, buffer_size, 2) != CAMERASRC_SUCCESS) {
camsrc_error("alloc buffer_sensor failed");
goto CREATE_BUFFER_FAILED;
}
/* ISP */
- p->format_isp.num_buffers = FIMC_IS_REAR_ISP_NUM_BUFFERS;
-
if (_camerasrc_allocate_device_buffer(handle, &p->buffer_isp, &p->format_isp, buffer_size, 2) != CAMERASRC_SUCCESS) {
camsrc_error("alloc buffer_isp failed");
goto CREATE_BUFFER_FAILED;
}
/* SCC */
- p->format_scc.num_buffers = FIMC_IS_REAR_SCC_NUM_BUFFERS;
-
if (_camerasrc_allocate_device_buffer(handle, &p->buffer_scc, &p->format_scc, buffer_size, 2) != CAMERASRC_SUCCESS) {
camsrc_error("alloc buffer_scc failed");
goto CREATE_BUFFER_FAILED;
@@ -2342,8 +2334,14 @@ int camerasrc_destroy_buffer(camsrc_handle_t handle)
/* buffer - ta */
camsrc_warning("ta");
- _camerasrc_release_device_buffer(p->buffer_ta, p->format_ta.num_buffers);
- p->buffer_ta = NULL;
+
+ if (p->format_3aa0_out.num_buffers) {
+ _camerasrc_release_device_buffer(p->buffer_3aa_out, p->format_3aa0_out.num_buffers);
+ p->buffer_3aa_out = NULL;
+ } else if (p->format_3aa1.num_buffers) {
+ _camerasrc_release_device_buffer(p->buffer_3aa_out, p->format_3aa1.num_buffers);
+ p->buffer_3aa_out = NULL;
+ }
/* buffer - isp */
camsrc_warning("isp");
@@ -2480,11 +2478,11 @@ int camerasrc_start_preview_stream(camsrc_handle_t handle)
/* 3AA0_OUTPUT format */
type = V4L2_BUF_TYPE_VIDEO_OUTPUT_MPLANE;
- p->format_3aa0.img_size.width = 32;
- p->format_3aa0.img_size.height = 64;
- p->format_3aa0.pix_format = CAMERASRC_PIX_SBGGR12;
+ p->format_3aa0_out.img_size.width = 32;
+ p->format_3aa0_out.img_size.height = 64;
+ p->format_3aa0_out.pix_format = CAMERASRC_PIX_SBGGR12;
- err = _camerasrc_ioctl_s_fmt(p, p->fd_3aa0, type, &p->format_3aa0);
+ err = _camerasrc_ioctl_s_fmt(p, p->fd_3aa0, type, &p->format_3aa0_out);
if (err != CAMERASRC_SUCCESS) {
strerror_r(p->errnum, err_msg, CAMERASRC_ERRMSG_MAX_LEN);
camsrc_error("[3AA0_OUTPUT] _camerasrc_ioctl_s_fmt failed[%x] : %s", err, err_msg);
@@ -2492,10 +2490,8 @@ int camerasrc_start_preview_stream(camsrc_handle_t handle)
}
/* 3AA0_OUTPUT reqbufs */
- p->format_3aa0.num_buffers = FIMC_IS_REAR_3AA0_NUM_BUFFERS;
- type = V4L2_BUF_TYPE_VIDEO_OUTPUT_MPLANE;
- err = _camerasrc_ioctl_reqbufs(p, p->fd_3aa0, p->format_3aa0.num_buffers,
- type, V4L2_MEMORY_DMABUF, &p->format_3aa0.num_buffers);
+ err = _camerasrc_ioctl_reqbufs(p, p->fd_3aa0, p->format_3aa0_out.num_buffers,
+ type, V4L2_MEMORY_DMABUF, &p->format_3aa0_out.num_buffers);
if (err != CAMERASRC_SUCCESS) {
strerror_r(p->errnum, err_msg, CAMERASRC_ERRMSG_MAX_LEN);
camsrc_error("[3AA0_OUTPUT] _camerasrc_ioctl_reqbufs failed[%x] : %s", err, err_msg);
@@ -2506,11 +2502,11 @@ int camerasrc_start_preview_stream(camsrc_handle_t handle)
/* 3AA0_CAPTURE format */
type = V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLANE;
- p->format_3aa0.img_size.width = p->format_isp.img_size.width;
- p->format_3aa0.img_size.height = p->format_isp.img_size.height;
- p->format_3aa0.pix_format = CAMERASRC_PIX_SBGGR12;
+ p->format_3aa0_cap.img_size.width = p->format_isp.img_size.width;
+ p->format_3aa0_cap.img_size.height = p->format_isp.img_size.height;
+ p->format_3aa0_cap.pix_format = CAMERASRC_PIX_SBGGR12;
- err = _camerasrc_ioctl_s_fmt(p, p->fd_3aa0, type, &p->format_3aa0);
+ err = _camerasrc_ioctl_s_fmt(p, p->fd_3aa0, type, &p->format_3aa0_cap);
if (err != CAMERASRC_SUCCESS) {
strerror_r(p->errnum, err_msg, CAMERASRC_ERRMSG_MAX_LEN);
camsrc_error("[3AA0_CAPTURE] _camerasrc_ioctl_s_fmt failed[%x] : %s", err, err_msg);
@@ -2518,9 +2514,8 @@ int camerasrc_start_preview_stream(camsrc_handle_t handle)
}
/* 3AA0_CAPTURE reqbufs */
- type = V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLANE;
- err = _camerasrc_ioctl_reqbufs(p, p->fd_3aa0, p->format_3aa0.num_buffers,
- type, V4L2_MEMORY_DMABUF, &p->format_3aa0.num_buffers);
+ err = _camerasrc_ioctl_reqbufs(p, p->fd_3aa0, p->format_3aa0_cap.num_buffers,
+ type, V4L2_MEMORY_DMABUF, &p->format_3aa0_cap.num_buffers);
if (err != CAMERASRC_SUCCESS) {
strerror_r(p->errnum, err_msg, CAMERASRC_ERRMSG_MAX_LEN);
camsrc_error("[3AA0_CAPTURE] _camerasrc_ioctl_reqbufs failed[%x] : %s", err, err_msg);
@@ -2551,14 +2546,15 @@ int camerasrc_start_preview_stream(camsrc_handle_t handle)
}
/* 3AA0C reqbufs */
- p->format_3aa0c.num_buffers = 5;
- type = V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLANE;
- err = _camerasrc_ioctl_reqbufs(p, p->fd_3aa0c, p->format_3aa0c.num_buffers,
+ if (p->format_3aa0c.num_buffers > 0) {
+ type = V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLANE;
+ err = _camerasrc_ioctl_reqbufs(p, p->fd_3aa0c, p->format_3aa0c.num_buffers,
type, V4L2_MEMORY_DMABUF, &p->format_3aa0c.num_buffers);
- if (err != CAMERASRC_SUCCESS) {
- strerror_r(p->errnum, err_msg, CAMERASRC_ERRMSG_MAX_LEN);
- camsrc_error("[3AA0C] _camerasrc_ioctl_reqbufs failed[%x] : %s", err, err_msg);
- return CAMERASRC_ERR_IO_CONTROL;
+ if (err != CAMERASRC_SUCCESS) {
+ strerror_r(p->errnum, err_msg, CAMERASRC_ERRMSG_MAX_LEN);
+ camsrc_error("[3AA0C] _camerasrc_ioctl_reqbufs failed[%x] : %s", err, err_msg);
+ return CAMERASRC_ERR_IO_CONTROL;
+ }
}
p->reqbuf_3aa0c_capture = TRUE;
@@ -2969,7 +2965,7 @@ int camerasrc_start_preview_stream(camsrc_handle_t handle)
if (p->cur_dev_id == CAMERASRC_DEV_ID_PRIMARY) {
/* 3AA buffers qbuf */
for (i = 0 ; i < p->format_isp.num_buffers; i++) {
- struct camera2_shot_ext *shot_3aa = (struct camera2_shot_ext *)p->buffer_ta[i].planes[1].start;
+ struct camera2_shot_ext *shot_3aa = (struct camera2_shot_ext *)p->buffer_3aa_out[i].planes[1].start;
err = _camerasrc_set_shot_meta2(p, GRP_3AA, 0, 0, shot_3aa);
if (err != CAMERASRC_SUCCESS) {
@@ -2982,7 +2978,7 @@ int camerasrc_start_preview_stream(camsrc_handle_t handle)
V4L2_BUF_TYPE_VIDEO_OUTPUT_MPLANE,
V4L2_MEMORY_DMABUF,
i,
- &p->buffer_ta[i]);
+ &p->buffer_3aa_out[i]);
if (err != CAMERASRC_SUCCESS) {
camsrc_error("[3AA0_OUTPUT - TA] _camerasrc_ioctl_qbuf index %d, failed[%x]", i, err);
return CAMERASRC_ERR_IO_CONTROL;
@@ -3867,9 +3863,19 @@ int camerasrc_set_format(camsrc_handle_t handle, camerasrc_format_t *fmt)
p->format_sensor.img_size.height = PRIMARY_SENSOR_HEIGHT;
+ p->format_sensor.num_buffers = FIMC_IS_REAR_SENSOR_NUM_BUFFERS;
+ p->format_3aa0_out.num_buffers = FIMC_IS_REAR_3AA0_NUM_BUFFERS;
+ p->format_3aa0_cap.num_buffers = FIMC_IS_REAR_3AA0_NUM_BUFFERS;
+ p->format_3aa0c.num_buffers = FIMC_IS_REAR_3AA0C_NUM_BUFFERS;
+ p->format_isp.num_buffers = FIMC_IS_REAR_ISP_NUM_BUFFERS;
p->format_scp.num_buffers = FIMC_IS_REAR_SCP_NUM_BUFFERS;
+ p->format_scc.num_buffers = FIMC_IS_REAR_SCC_NUM_BUFFERS;
} else {
+ p->format_sensor.num_buffers = FIMC_IS_FRONT_SENSOR_NUM_BUFFERS;
+ p->format_3aa1.num_buffers = FIMC_IS_FRONT_3AA1_NUM_BUFFERS;
+ p->format_isp.num_buffers = FIMC_IS_FRONT_ISP_NUM_BUFFERS;
p->format_scp.num_buffers = CAMERASRC_PREVIEW_BUFFER_NUM_SECONDARY;
+ p->format_scc.num_buffers = FIMC_IS_FRONT_SCC_NUM_BUFFERS;
}
switch (fmt->pix_format) {
diff --git a/camerasrc/src/include/camerasrc-common.h b/camerasrc/src/include/camerasrc-common.h
index 07e0838..c7fa0fd 100644
--- a/camerasrc/src/include/camerasrc-common.h
+++ b/camerasrc/src/include/camerasrc-common.h
@@ -412,8 +412,8 @@ typedef struct _camerasrc_handle_t {
/* image format information */
int is_highquality;
camerasrc_format_t format_sensor;
- camerasrc_format_t format_ta;
- camerasrc_format_t format_3aa0;
+ camerasrc_format_t format_3aa0_out;
+ camerasrc_format_t format_3aa0_cap;
camerasrc_format_t format_3aa0c;
camerasrc_format_t format_3aa1;
camerasrc_format_t format_isp;
@@ -426,7 +426,7 @@ typedef struct _camerasrc_handle_t {
int first_frame;
struct v4l2_buffer queued_buf_list[CAMERASRC_USRPTR_MAX_BUFFER_NUM];
camerasrc_buffer_t *buffer_sensor;
- camerasrc_buffer_t *buffer_ta;
+ camerasrc_buffer_t *buffer_3aa_out;
camerasrc_buffer_t *buffer_isp;
camerasrc_buffer_t *buffer_scc;
camerasrc_buffer_t *buffer_scp;