diff options
author | Sylwester Nawrocki <s.nawrocki@samsung.com> | 2017-11-23 18:47:12 +0100 |
---|---|---|
committer | Sylwester Nawrocki <s.nawrocki@samsung.com> | 2017-11-23 18:53:04 +0100 |
commit | 99cbea7dbc71d79ae72d2d0177e7b7b7f1141242 (patch) | |
tree | e8fc12348ad5279f984086f7eb466050df9d81cc | |
parent | b00069932036e47d718f8d1884eb9930a72de16b (diff) | |
download | gst-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.c | 108 | ||||
-rw-r--r-- | camerasrc/src/include/camerasrc-common.h | 6 |
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; |