Replace device_info by device_capability when set stream format 05/322505/2 accepted/tizen_unified accepted/tizen_unified_x tizen accepted/tizen/unified/20250610.081755 accepted/tizen/unified/x/20250610.082523
authorJeongmo Yang <jm80.yang@samsung.com>
Thu, 10 Apr 2025 05:51:53 +0000 (14:51 +0900)
committerJeongmo Yang <jm80.yang@samsung.com>
Fri, 11 Apr 2025 00:36:47 +0000 (09:36 +0900)
[Version] 1.4.1
[Issue Type] Update

Change-Id: Ife77f22b19aac31b784b14b7c861c0d5d9f7c7d0
Signed-off-by: Jeongmo Yang <jm80.yang@samsung.com>
packaging/hal-backend-camera-v4l2.spec
src/hal_backend_camera_v4l2.c

index 01176191c9f3e14c8466a8f2d3ba3097b0be330c..e09b0d9e7ab37327bb5adfa9a8191bac6009cf46 100644 (file)
@@ -2,7 +2,7 @@
 
 Name:       hal-backend-camera-v4l2
 Summary:    Tizen Camera Hal using generic V4L2 interface
-Version:    1.4.0
+Version:    1.4.1
 Release:    0
 Group:      Multimedia/Libraries
 License:    Apache-2.0
index 8fce0b99a1be0c4ff18d28de41c54b0ef2c3439b..fa6bbd2600a1800bc1677f79a662dc94e544caf9 100644 (file)
@@ -1052,7 +1052,7 @@ static int __camera_get_device_info_list(void)
 
                if (ret == CAMERA_ERROR_NONE && device_capability_list->capability[device_count]) {
                        g_device_caps[device_count] = device_caps;
-                       LOGI("device[%02d] device caps [0x%08x]", device_count, device_caps);
+                       LOGI("device[%d] device caps [0x%08x]", device_count, device_caps);
                        device_count++;
                }
        }
@@ -2099,20 +2099,24 @@ int camera_v4l2_remove_message_callback(void *camera_handle, uint32_t cb_id)
 
 int camera_v4l2_set_preview_stream_format(void *camera_handle, camera_format_s *format)
 {
-       int i = 0;
-       int j = 0;
        int ret = CAMERA_ERROR_NONE;
+       uint32_t i = 0;
+       uint32_t j = 0;
        gboolean capability_check = FALSE;
        hal_camera_handle *handle = (hal_camera_handle *)camera_handle;
-       camera_device_info_s *device_info = NULL;
+       camera_device_capability_s *device_capability = NULL;
+       camera_device_capability_format_s *capability_format = NULL;
+       camera_device_capability_resolution_s *capability_resolution = NULL;
 
        if (!handle || !format) {
                LOGE("NULL param %p %p", handle, format);
                return CAMERA_ERROR_INVALID_PARAMETER;
        }
 
-       if (!g_device_info_list) {
-               LOGE("no device info list");
+       if (!g_device_capability_list ||
+               !g_device_capability_list->capability[handle->device_index]) {
+               LOGE("no device capability list[%p] for device[%d]",
+                       g_device_capability_list, handle->device_index);
                return CAMERA_ERROR_INTERNAL;
        }
 
@@ -2126,32 +2130,34 @@ int camera_v4l2_set_preview_stream_format(void *camera_handle, camera_format_s *
        }
 
        /* check capability */
-       device_info = &g_device_info_list->device_info[handle->device_index];
+       device_capability = g_device_capability_list->capability[handle->device_index];
 
        /* format */
-       for (i = 0 ; i < device_info->format_list.count ; i++) {
-               if (format->stream_format == device_info->format_list.formats[i]) {
-                       LOGD("format matched %d, check resolution.", format->stream_format);
-
-                       /* resolution */
-                       for (j = 0 ; j < device_info->preview_list.count ; j++) {
-                               if (format->stream_resolution.width == device_info->preview_list.resolutions[j].width &&
-                                       format->stream_resolution.height == device_info->preview_list.resolutions[j].height) {
-                                       LOGD("resolution matched %dx%d",
-                                               format->stream_resolution.width,
-                                               format->stream_resolution.height);
-                                       capability_check = TRUE;
-                                       break;
-                               }
-                       }
+       for (i = 0 ; i < device_capability->format_count && device_capability->format[i] ; i++) {
+               capability_format = device_capability->format[i];
+               if (format->stream_format != capability_format->pixel_format)
+                       continue;
 
+               for (j = 0 ; j < capability_format->resolution_count && capability_format->resolution[j] ; j++) {
+                       capability_resolution = capability_format->resolution[j];
+                       if (format->stream_resolution.width != capability_resolution->width ||
+                               format->stream_resolution.height != capability_resolution->height)
+                               continue;
+
+                       LOGI("device[%u]: format[%d], resolution[%dx%d] matched",
+                               handle->device_index, format->stream_format,
+                               format->stream_resolution.width, format->stream_resolution.height);
+
+                       capability_check = TRUE;
                        break;
                }
+
+               break;
        }
 
        if (!capability_check) {
-               LOGE("capability failed - %d, %dx%d",
-                       format->stream_format,
+               LOGE("capability failed, device[%u]: format[%d], resolution[%dx%d]",
+                       handle->device_index, format->stream_format,
                        format->stream_resolution.width,
                        format->stream_resolution.height);
                g_mutex_unlock(&handle->lock);