}
+static int __camera_copy_capability_format(camera_device_capability_format_s *format_to_copy, camera_device_capability_format_s **format_out)
+{
+ int i = 0;
+ int alloc_size = 0;
+ camera_device_capability_format_s *format_new = NULL;
+ camera_device_capability_resolution_s *resolution_to_copy = NULL;
+
+ if (!format_to_copy || !format_out) {
+ LOGE("NULL param %p, %p", format_to_copy, format_out);
+ return 0;
+ }
+
+ LOGI("copy format[%d]", format_to_copy->pixel_format);
+
+ format_new = g_new0(camera_device_capability_format_s, 1);
+ alloc_size += sizeof(camera_device_capability_format_s);
+
+ for (i = 0 ; i < format_to_copy->resolution_count ; i++) {
+ resolution_to_copy = format_to_copy->resolution[i];
+
+ LOGI("\tcopy resolution[%dx%d] and FPS list", resolution_to_copy->width, resolution_to_copy->height);
+
+ format_new->resolution[i] = g_new0(camera_device_capability_resolution_s, 1);
+ alloc_size += sizeof(camera_device_capability_resolution_s);
+
+ memcpy(format_new->resolution[i], resolution_to_copy, sizeof(camera_device_capability_resolution_s));
+ }
+
+ format_new->pixel_format = format_to_copy->pixel_format;
+ format_new->resolution_count = format_to_copy->resolution_count;
+ format_new->default_resolution_index = format_to_copy->default_resolution_index;
+
+ *format_out = format_new;
+
+ return alloc_size;
+}
+
+
static int __camera_get_device_info(int device_index, int device_fd, char *node_path,
camera_device_info_s *device_info, camera_device_capability_s **device_capability)
{
int format_index = 0;
int format_count = 0;
+ int format_index_jpeg = -1;
+ int format_index_mjpeg = -1;
int resolution_index = 0;
int resolution_count = 0;
int camera_format = 0;
camera_device_capability_s *_capability = NULL;
int alloc_size = 0;
- if (device_fd < 0 || !device_info || !node_path) {
- LOGE("invalid param %d %p %p", device_fd, device_info, node_path);
+ if (device_fd < 0 || !device_info || !node_path || !device_capability) {
+ LOGE("invalid param %d %p %p %p", device_fd, device_info, node_path, device_capability);
return CAMERA_ERROR_INVALID_PARAMETER;
}
LOGD("\t\tresolution count [%d]", resolution_count);
+ if (camera_format == CAMERA_PIXEL_FORMAT_JPEG) {
+ format_index_jpeg = format_count;
+ LOGD("\t\tfound format JPEG[%d]", format_index_jpeg);
+ } else if (camera_format == CAMERA_PIXEL_FORMAT_MJPEG) {
+ format_index_mjpeg = format_count;
+ LOGD("\t\tfound format MJPEG[%d]", format_index_mjpeg);
+ }
+
format_count++;
} else {
LOGW("\t\tno resolution for format[%d]", camera_format);
_capability->device_index = device_index;
_capability->format_count = format_count;
- if (device_capability)
- *device_capability = _capability;
+ *device_capability = _capability;
LOGD("\tformat count [%d]", format_count);
+
+ if (format_index_jpeg == -1 && format_index_mjpeg != -1) {
+ int added_size = 0;
+ camera_device_capability_format_s *format_out = NULL;
+
+ LOGW("\tadd JPEG by copying MJPEG for camera CTC");
+
+ added_size = __camera_copy_capability_format(_capability->format[format_index_mjpeg], &format_out);
+ if (format_out) {
+ format_out->pixel_format = CAMERA_PIXEL_FORMAT_JPEG;
+
+ _capability->format[format_count] = format_out;
+ _capability->format_count++;
+
+ alloc_size += added_size;
+ } else {
+ LOGE("\tcopy MJPEG failed");
+ }
+ }
} else {
LOGW("\tno format for device[%d]", device_index);
g_free(_capability);