For supporting various usb camera, configuration file name will be vendor and product... 41/236541/6 accepted/tizen/unified/20200703.014614 submit/tizen/20200702.093238
authorHyuntae Kim <ht1211.kim@samsung.com>
Thu, 18 Jun 2020 03:44:30 +0000 (12:44 +0900)
committerHyuntae Kim <ht1211.kim@samsung.com>
Wed, 24 Jun 2020 02:24:51 +0000 (11:24 +0900)
Change-Id: I42dd596d0329327229b03b94f647010638c2d31e

configure.ac
packaging/libmm-camcorder.spec
src/Makefile.am
src/include/mm_camcorder_internal.h
src/mm_camcorder_configure.c
src/mm_camcorder_exifinfo.c
src/mm_camcorder_gstcommon.c
src/mm_camcorder_internal.c

index 3cfec97..eae8065 100644 (file)
@@ -119,6 +119,21 @@ AC_SUBST(RI_LIBS)
 fi
 AM_CONDITIONAL([RM_SUPPORT], [test "x$RM_SUPPORT" = "xyes"])
 
+AC_ARG_ENABLE(camera-conf-mgr-tv, AC_HELP_STRING([--enable-camera-conf-mgr-tv], [enable camera-conf-mgr-tv]),
+[
+  case "${enableval}" in
+    yes) CAMERA_CONF_MGR_SUPPORT=yes ;;
+    no)  CAMERA_CONF_MGR_SUPPORT=no ;;
+    *) AC_MSG_ERROR(bad value ${enableval} for --enable-camera-conf-mgr-tv) ;;
+  esac
+],[CAMERA_CONF_MGR_SUPPORT=no])
+if test "x$CAMERA_CONF_MGR_SUPPORT" = "xyes"; then
+PKG_CHECK_MODULES(CAMERA_CONF_MGR, camera-conf-mgr-tv)
+AC_SUBST(CAMERA_CONF_MGR_CFLAGS)
+AC_SUBST(CAMERA_CONF_MGR_LIBS)
+fi
+AM_CONDITIONAL([CAMERA_CONF_MGR_SUPPORT], [test "x$CAMERA_CONF_MGR_SUPPORT" = "xyes"])
+
 PKG_CHECK_MODULES(STORAGE, storage)
 AC_SUBST(STORAGE_CFLAGS)
 AC_SUBST(STORAGE_LIBS)
index d539002..4bf429f 100644 (file)
@@ -1,6 +1,6 @@
 Name:       libmm-camcorder
 Summary:    Camera and recorder library
-Version:    0.10.204
+Version:    0.10.205
 Release:    0
 Group:      Multimedia/Libraries
 License:    Apache-2.0
@@ -26,6 +26,7 @@ BuildRequires:  pkgconfig(storage)
 BuildRequires:  pkgconfig(tv-resource-manager)
 BuildRequires:  pkgconfig(tv-resource-information)
 BuildRequires:  pkgconfig(aul)
+BuildRequires:  pkgconfig(camera-conf-mgr-tv)
 %else
 BuildRequires:  pkgconfig(mm-resource-manager)
 %endif
@@ -66,6 +67,7 @@ export CFLAGS+=" -D_LARGEFILE64_SOURCE -DGST_USE_UNSTABLE_API -DSYSCONFDIR=\\\"%
 %if "%{tizen_profile_name}" == "tv"
        --enable-rm \
        --enable-product-tv \
+       --enable-camera-conf-mgr-tv \
 %else
        --enable-mm-resource-manager \
 %endif
index 01f6d46..e52f929 100644 (file)
@@ -90,6 +90,11 @@ libmmfcamcorder_la_CFLAGS += $(RM_CFLAGS) $(RI_CFLAGS) $(AUL_CFLAGS) -D_MMCAMCOR
 libmmfcamcorder_la_LIBADD += $(RM_LIBS) $(RI_LIBS) $(AUL_LIBS)
 endif
 
+if CAMERA_CONF_MGR_SUPPORT
+libmmfcamcorder_la_CFLAGS += $(CAMERA_CONF_MGR_CFLAGS) -D_MMCAMCORDER_CAMERA_CONF_MGR_SUPPORT
+libmmfcamcorder_la_LIBADD += $(CAMERA_CONF_MGR_LIBS)
+endif
+
 if PRODUCT_TV
 libmmfcamcorder_la_CFLAGS += -D_MMCAMCORDER_PRODUCT_TV
 endif
index 144ae34..b594a83 100644 (file)
 #include <rm_api.h>
 #endif /* _MMCAMCORDER_RM_SUPPORT */
 
+#ifdef _MMCAMCORDER_CAMERA_CONF_MGR_SUPPORT
+#include "camera_conf_mgr.h"
+#endif /*_MMCAMCORDER_CAMERA_CONF_MGR_SUPPORT */
+
 #ifdef LOG_TAG
 #undef LOG_TAG
 #endif
@@ -822,6 +826,9 @@ typedef struct mmf_camcorder {
        rm_category_request_s request_resources;
        rm_device_return_s returned_devices;
 #endif /* _MMCAMCORDER_RM_SUPPORT */
+#ifdef _MMCAMCORDER_CAMERA_CONF_MGR_SUPPORT
+       camera_conf_device_info_s conf_device_info;
+#endif /*_MMCAMCORDER_CAMERA_CONF_MGR_SUPPORT */
        int reserved[4];                                        /**< reserved */
 } mmf_camcorder_t;
 
index e578ab8..98c64e1 100644 (file)
@@ -43,6 +43,7 @@
 -----------------------------------------------------------------------*/
 #define DEFAULT_AUDIO_BUFFER_INTERVAL   50
 
+#define __MMCAMCORDER_CONF_FILEPATH_LENGTH 128
 
 char *get_new_string(char* src_string)
 {
@@ -912,7 +913,7 @@ int _mmcamcorder_conf_get_info(MMHandleType handle, int type, const char *ConfFi
 {
        int ret = MM_ERROR_NONE;
        FILE *fp = NULL;
-       char conf_path[60] = {'\0',};
+       char conf_path[__MMCAMCORDER_CONF_FILEPATH_LENGTH] = {'\0',};
 
        _mmcam_dbg_log("Opening...[%s]", ConfFile);
 
index 04cfdc5..0865139 100644 (file)
@@ -293,6 +293,7 @@ mm_exif_create_exif_info(mm_exif_info_t **info)
        ed = exif_data_new();
        if (!ed) {
                _mmcam_dbg_err("exif data new error");
+               free(x);
                return MM_ERROR_CAMCORDER_LOW_MEMORY;
        }
 
@@ -305,7 +306,6 @@ mm_exif_create_exif_info(mm_exif_info_t **info)
        exif_data_save_data(ed, &eb, &ebs);
        if (eb == NULL) {
                _mmcam_dbg_err("exif_data_save_data error");
-               free(x->data);
                free(x);
                exif_data_unref(ed);
                return MM_ERROR_CAMCORDER_INTERNAL;
index cf25032..fb01c73 100644 (file)
@@ -314,7 +314,11 @@ int _mmcamcorder_create_preview_elements(MMHandleType handle)
        _mmcamcorder_conf_set_value_element_property(sc->element[_MMCAMCORDER_VIDEOSRC_SRC].gst, VideosrcElement);
 
        /* Set video device index */
+#ifdef _MMCAMCORDER_CAMERA_CONF_MGR_SUPPORT
+       MMCAMCORDER_G_OBJECT_SET_POINTER(sc->element[_MMCAMCORDER_VIDEOSRC_SRC].gst, "device-name", hcamcorder->conf_device_info.node);
+#else
        MMCAMCORDER_G_OBJECT_SET(sc->element[_MMCAMCORDER_VIDEOSRC_SRC].gst, "camera-id", input_index->default_value);
+#endif
 
        /* set user buffer fd to videosrc element */
        if (hcamcorder->support_user_buffer) {
index 58216d6..aefe75a 100644 (file)
 #define __MMCAMCORDER_FORCE_STOP_WAIT_TIME      100000  /* us */
 #define __MMCAMCORDER_SOUND_WAIT_TIMEOUT        3
 #define __MMCAMCORDER_FOCUS_CHANGE_REASON_LEN   64
-#define __MMCAMCORDER_CONF_FILENAME_LENGTH      32
+#define __MMCAMCORDER_CONF_FILENAME_LENGTH      64
+
+#ifdef _MMCAMCORDER_CAMERA_CONF_MGR_SUPPORT
+#define __MMCAMCORDER_DEVICE_TYPE_STRING_LEN    1
+#endif
+
 
 #define DPM_ALLOWED                             1
 #define DPM_DISALLOWED                          0
@@ -319,22 +324,54 @@ static gint __mmcamcorder_init_configure_video_capture(mmf_camcorder_t *hcamcord
        char *err_attr_name = NULL;
        char conf_file_name[__MMCAMCORDER_CONF_FILENAME_LENGTH] = {'\0',};
        MMCamAttrsInfo fps_info;
+#ifdef _MMCAMCORDER_CAMERA_CONF_MGR_SUPPORT
+       camera_conf_error_e ret_conf = CAMERA_CONF_MGR_ERROR_NONE;
+       char devicetype[__MMCAMCORDER_CONF_FILENAME_LENGTH] = {'\0',};
+#endif
 
        if (!hcamcorder) {
                _mmcam_dbg_err("NULL handle");
                return MM_ERROR_CAMCORDER_NOT_INITIALIZED;
        }
 
+#ifdef _MMCAMCORDER_CAMERA_CONF_MGR_SUPPORT
+       snprintf(devicetype, sizeof(devicetype), "%d", hcamcorder->device_type);
+       memset(&hcamcorder->conf_device_info, 0x00, sizeof(camera_conf_device_info_s));
+       ret_conf = camera_conf_mgr_get_ids(devicetype, __MMCAMCORDER_DEVICE_TYPE_STRING_LEN,
+               &hcamcorder->conf_device_info);
+       if (ret_conf !=  CAMERA_CONF_MGR_ERROR_NONE) {
+               _mmcam_dbg_err("Device [%s] is not found", devicetype);
+               return MM_ERROR_CAMCORDER_NOT_SUPPORTED;
+       }
+
+       snprintf(conf_file_name, sizeof(conf_file_name), "%s_%s_%s.ini",
+               CONFIGURE_CTRL_FILE_PREFIX, hcamcorder->conf_device_info.vendor_id,
+               hcamcorder->conf_device_info.product_id);
+
+       _mmcam_dbg_log("Load control configure file [%d][%s][%s]", hcamcorder->device_type,
+               conf_file_name, hcamcorder->conf_device_info.node);
+#else
        snprintf(conf_file_name, sizeof(conf_file_name), "%s%d.ini",
                CONFIGURE_CTRL_FILE_PREFIX, hcamcorder->device_type);
-
        _mmcam_dbg_log("Load control configure file [%d][%s]", hcamcorder->device_type, conf_file_name);
+#endif
 
        ret = _mmcamcorder_conf_get_info((MMHandleType)hcamcorder,
                CONFIGURE_TYPE_CTRL, (const char *)conf_file_name, &hcamcorder->conf_ctrl);
        if (ret != MM_ERROR_NONE) {
+#ifdef _MMCAMCORDER_CAMERA_CONF_MGR_SUPPORT
+               snprintf(conf_file_name, sizeof(conf_file_name), "%s.ini",
+                       CONFIGURE_CTRL_FILE_PREFIX);
+               ret = _mmcamcorder_conf_get_info((MMHandleType)hcamcorder,
+                       CONFIGURE_TYPE_CTRL, (const char *)conf_file_name, &hcamcorder->conf_ctrl);
+               if (ret != MM_ERROR_NONE) {
+                       _mmcam_dbg_err("Failed to get configure(control) info.");
+                       return ret;
+               }
+#else
                _mmcam_dbg_err("Failed to get configure(control) info.");
                return ret;
+#endif
        }
 /*
        _mmcamcorder_conf_print_info(&hcamcorder->conf_main);