Update
authorJeongmo Yang <jm80.yang@samsung.com>
Tue, 11 Feb 2025 07:57:08 +0000 (16:57 +0900)
committerJeongmo Yang <jm80.yang@samsung.com>
Tue, 11 Feb 2025 07:57:08 +0000 (16:57 +0900)
- Add extra settings for capture(output) when S_FMT.
- Change buffer numbers for input and output.

Signed-off-by: Jeongmo Yang <jm80.yang@samsung.com>
src/hal_backend_codec_v4l2.c
src/hal_backend_codec_v4l2_private.h

index 9e23454ba3db467782a199d9d6ea6bad04ec0bb2..67d284ffa634d6c7bf92c18f46f59f9365606b61 100644 (file)
@@ -623,6 +623,23 @@ static int __codec_v4l2_s_fmt(codec_hal_buffer_control_s *buffer_control, int de
                v4l2_fmt.fmt.pix_mp.height = codec_config->resolution.height;
                v4l2_fmt.fmt.pix_mp.pixelformat = fourcc;
                v4l2_fmt.fmt.pix_mp.num_planes = num_planes;
+
+               if (V4L2_TYPE_IS_CAPTURE (codec_config->buf_type)) {
+                       if (codec_config->resolution.width <= 720 &&
+                               codec_config->resolution.height <= 576) {
+                               /* SD */
+                               v4l2_fmt.fmt.pix_mp.colorspace = V4L2_COLORSPACE_SMPTE170M;
+                               v4l2_fmt.fmt.pix_mp.ycbcr_enc = V4L2_YCBCR_ENC_601;
+                       } else {
+                               /* HD */
+                               v4l2_fmt.fmt.pix_mp.colorspace = V4L2_COLORSPACE_REC709;
+                               v4l2_fmt.fmt.pix_mp.ycbcr_enc = V4L2_YCBCR_ENC_709;
+                       }
+
+                       v4l2_fmt.fmt.pix_mp.quantization = V4L2_QUANTIZATION_LIM_RANGE;
+                       v4l2_fmt.fmt.pix_mp.xfer_func = V4L2_XFER_FUNC_709;
+                       v4l2_fmt.fmt.pix_mp.flags |= V4L2_PIX_FMT_FLAG_SET_CSC;
+               }
        } else {
                v4l2_fmt.fmt.pix.width = codec_config->resolution.width;
                v4l2_fmt.fmt.pix.height = codec_config->resolution.height;
@@ -1945,13 +1962,13 @@ int codec_v4l2_start(void *codec_handle, hal_codec_message_cb callback, void *us
                return HAL_CODEC_ERROR_INVALID_STATE;
        }
 
-       ret = __codec_v4l2_start_stream(handle, &handle->buffer_control[CODEC_HAL_BUFFER_CONTROL_TYPE_INPUT], BUFFER_MIN);
+       ret = __codec_v4l2_start_stream(handle, &handle->buffer_control[CODEC_HAL_BUFFER_CONTROL_TYPE_INPUT], BUFFER_NUM_INPUT);
        if (ret != HAL_CODEC_ERROR_NONE) {
                LOGE("[input] __codec_start_stream failed[0x%x]", ret);
                return ret;
        }
 
-       ret = __codec_v4l2_start_stream(handle, &handle->buffer_control[CODEC_HAL_BUFFER_CONTROL_TYPE_OUTPUT], BUFFER_MIN);
+       ret = __codec_v4l2_start_stream(handle, &handle->buffer_control[CODEC_HAL_BUFFER_CONTROL_TYPE_OUTPUT], BUFFER_NUM_OUTPUT);
        if (ret != HAL_CODEC_ERROR_NONE) {
                LOGE("[output] __codec_start_stream failed[0x%x]", ret);
                return ret;
index d9e22186ca16f1b77fc449b699e0dd2b8e1b14f7..9bb18825121fbbae5158b85c01da5511f3cea25b 100644 (file)
 
 #define CODEC_HAL_INITIAL_INDEX         -1
 #define CODEC_HAL_INITIAL_FD            -1
-#define BUFFER_MIN                      8
+#define BUFFER_MIN                      2
 #define BUFFER_MAX                      16
+#define BUFFER_NUM_INPUT                4
+#define BUFFER_NUM_OUTPUT               8
 #define V4L2_PLANES_MAX                 4