Initialize number of buffers in camerasrc_set_format() 06/161506/1
authorSylwester Nawrocki <s.nawrocki@samsung.com>
Thu, 23 Nov 2017 17:47:12 +0000 (18:47 +0100)
committerSylwester Nawrocki <s.nawrocki@samsung.com>
Thu, 23 Nov 2017 17:53:04 +0000 (18:53 +0100)
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>
camerasrc/src/camerasrc.c
camerasrc/src/include/camerasrc-common.h

index 65582a238130ebfd37f75ceae06dd5a9dee401ba..231dacad2a8aa111a8b6371c9126ade5246f95c0 100644 (file)
 #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) {
index 07e0838eb4667657a9ac0eff82f3fc32582f47d6..c7fa0fdf12f08c6142a30bc5003c14b7a0582369 100644 (file)
@@ -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;