From 98ced394efc31574344174193cdf3a36699d02ea Mon Sep 17 00:00:00 2001 From: Hyuntae Kim Date: Thu, 18 Jun 2020 12:44:30 +0900 Subject: [PATCH] For supporting various usb camera, configuration file name will be vendor and product name Change-Id: I42dd596d0329327229b03b94f647010638c2d31e --- configure.ac | 15 +++++++++++ packaging/libmm-camcorder.spec | 4 ++- src/Makefile.am | 5 ++++ src/include/mm_camcorder_internal.h | 7 +++++ src/mm_camcorder_configure.c | 3 ++- src/mm_camcorder_exifinfo.c | 2 +- src/mm_camcorder_gstcommon.c | 4 +++ src/mm_camcorder_internal.c | 41 +++++++++++++++++++++++++++-- 8 files changed, 76 insertions(+), 5 deletions(-) diff --git a/configure.ac b/configure.ac index 3cfec97..eae8065 100644 --- a/configure.ac +++ b/configure.ac @@ -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) diff --git a/packaging/libmm-camcorder.spec b/packaging/libmm-camcorder.spec index d539002..4bf429f 100644 --- a/packaging/libmm-camcorder.spec +++ b/packaging/libmm-camcorder.spec @@ -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 diff --git a/src/Makefile.am b/src/Makefile.am index 01f6d46..e52f929 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -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 diff --git a/src/include/mm_camcorder_internal.h b/src/include/mm_camcorder_internal.h index 144ae34..b594a83 100644 --- a/src/include/mm_camcorder_internal.h +++ b/src/include/mm_camcorder_internal.h @@ -63,6 +63,10 @@ #include #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; diff --git a/src/mm_camcorder_configure.c b/src/mm_camcorder_configure.c index e578ab8..98c64e1 100644 --- a/src/mm_camcorder_configure.c +++ b/src/mm_camcorder_configure.c @@ -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); diff --git a/src/mm_camcorder_exifinfo.c b/src/mm_camcorder_exifinfo.c index 04cfdc5..0865139 100644 --- a/src/mm_camcorder_exifinfo.c +++ b/src/mm_camcorder_exifinfo.c @@ -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; diff --git a/src/mm_camcorder_gstcommon.c b/src/mm_camcorder_gstcommon.c index cf25032..fb01c73 100644 --- a/src/mm_camcorder_gstcommon.c +++ b/src/mm_camcorder_gstcommon.c @@ -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) { diff --git a/src/mm_camcorder_internal.c b/src/mm_camcorder_internal.c index 58216d6..aefe75a 100644 --- a/src/mm_camcorder_internal.c +++ b/src/mm_camcorder_internal.c @@ -54,7 +54,12 @@ #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); -- 2.34.1