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++;
}
}
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;
}
}
/* 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);