Add new internal APIs for device manager 29/260029/3 accepted/tizen/unified/20210621.123140 submit/tizen/20210618.081505
authorJeongmo Yang <jm80.yang@samsung.com>
Thu, 17 Jun 2021 11:16:20 +0000 (20:16 +0900)
committerJeongmo Yang <jm80.yang@samsung.com>
Fri, 18 Jun 2021 04:09:17 +0000 (13:09 +0900)
- camera_device_manager_add_device_connection_changed_cb()
- camera_device_manager_remove_device_connection_changed_cb()

[Version] 0.4.59
[Issue Type] New feature

Change-Id: I54c99c25843c5a565521e033947b4d3ee4ffd3af
Signed-off-by: Jeongmo Yang <jm80.yang@samsung.com>
include/camera_internal.h
include/camera_private.h
packaging/capi-media-camera.spec
src/camera_internal.c
test/camera_test.c

index ef092a1..2e15967 100644 (file)
@@ -119,6 +119,18 @@ typedef void (*camera_device_list_changed_cb)(camera_device_list_s *list, void *
 
 /**
  * @internal
+ * @brief Called when the connection state of a camera device was changed.
+ * @since_tizen 6.5
+ * @param[in] device        The camera device
+ * @param[in] is_connected  The state of device connection: (@c true = connected, @c false = disconnected)
+ * @param[in] user_data     The user data passed from the callback registration function
+ * @see camera_device_manager_add_device_connection_changed_cb()
+ * @see camera_device_manager_remove_device_connection_changed_cb()
+ */
+typedef void (*camera_device_connection_changed_cb)(camera_device_s *device, bool is_connected, void *user_data);
+
+/**
+ * @internal
  * @brief Called to register for notifications about delivering a copy of the new extra preview frames.
  * @since_tizen 6.5
  * @param[in] frame     The reference pointer to extra preview stream data
@@ -295,6 +307,39 @@ int camera_device_manager_remove_device_list_changed_cb(camera_device_manager_h
 
 /**
  * @internal
+ * @brief Registers a callback function to be called when the connection state of camera device is changed.
+ * @since_tizen 6.5
+ * @param[in]  manager   The handle to the camera device manager
+ * @param[in]  callback  The callback function to register
+ * @param[in]  user_data The user data to be passed to the callback function
+ * @param[out] cb_id     The id of registered callback
+ * @return @c 0 on success, otherwise a negative error value
+ * @retval #CAMERA_ERROR_NONE Successful
+ * @retval #CAMERA_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #CAMERA_ERROR_INVALID_OPERATION Invalid operation
+ * @retval #CAMERA_ERROR_OUT_OF_MEMORY Out of memory
+ * @post camera_device_connection_changed_cb() will be invoked when the connection state of camera device is changed.
+ * @see camera_device_manager_remove_device_connection_changed_cb()
+ * @see camera_device_connection_changed_cb()
+ */
+int camera_device_manager_add_device_connection_changed_cb(camera_device_manager_h manager, camera_device_connection_changed_cb callback, void *user_data, int *cb_id);
+
+/**
+ * @internal
+ * @brief Unregisters the callback function.
+ * @since_tizen 6.5
+ * @param[in] manager The handle to the camera device manager
+ * @param[in] cb_id   The id of registered callback
+ * @return @c 0 on success, otherwise a negative error value
+ * @retval #CAMERA_ERROR_NONE Successful
+ * @retval #CAMERA_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #CAMERA_ERROR_INVALID_OPERATION Invalid operation
+ * @see camera_device_manager_add_device_changed_cb()
+ */
+int camera_device_manager_remove_device_connection_changed_cb(camera_device_manager_h manager, int cb_id);
+
+/**
+ * @internal
  * @brief Sets the brightness level of flash.
  * @since_tizen 6.5
  * @remarks If the min value is greater than the max value from camera_attr_get_flash_brightness_range(), \n
index 2e90bd0..a13a936 100644 (file)
@@ -232,6 +232,8 @@ typedef struct _camera_device_manager {
        int (*get_device_list)(void *list);
        int (*add_device_list_changed_cb)(void *, void *, int *);
        int (*remove_device_list_changed_cb)(int);
+       int (*add_device_connection_changed_cb)(void *, void *, int *);
+       int (*remove_device_connection_changed_cb)(int);
 } camera_device_manager;
 
 
index 7119cf6..c2ed6b3 100644 (file)
@@ -1,6 +1,6 @@
 Name:       capi-media-camera
 Summary:    A Camera API
-Version:    0.4.58
+Version:    0.4.59
 Release:    0
 Group:      Multimedia/API
 License:    Apache-2.0
index 2e6f19e..fed2275 100644 (file)
@@ -209,6 +209,8 @@ int camera_device_manager_initialize(camera_device_manager_h *manager)
                {(void **)&new_manager->get_device_list, "cdm_get_device_list"},
                {(void **)&new_manager->add_device_list_changed_cb, "cdm_add_device_list_changed_cb"},
                {(void **)&new_manager->remove_device_list_changed_cb, "cdm_remove_device_list_changed_cb"},
+               {(void **)&new_manager->add_device_connection_changed_cb, "cdm_add_device_connection_changed_cb"},
+               {(void **)&new_manager->remove_device_connection_changed_cb, "cdm_remove_device_connection_changed_cb"},
        };
 
        if (!manager) {
@@ -277,7 +279,7 @@ int camera_device_manager_deinitialize(camera_device_manager_h manager)
 
        CAM_LOG_INFO("finalized");
 
-       return ret;
+       return CAMERA_ERROR_NONE;
 }
 
 
@@ -308,7 +310,7 @@ int camera_device_manager_get_device_list(camera_device_manager_h manager, camer
                        list->device[i].name, list->device[i].id);
        }
 
-       return ret;
+       return CAMERA_ERROR_NONE;
 }
 
 
@@ -333,7 +335,7 @@ int camera_device_manager_add_device_list_changed_cb(camera_device_manager_h man
 
        CAM_LOG_INFO("cb_id[%d] added", *cb_id);
 
-       return ret;
+       return CAMERA_ERROR_NONE;
 }
 
 
@@ -357,7 +359,56 @@ int camera_device_manager_remove_device_list_changed_cb(camera_device_manager_h
 
        CAM_LOG_INFO("cb_id[%d] removed", cb_id);
 
-       return ret;
+       return CAMERA_ERROR_NONE;
+}
+
+
+int camera_device_manager_add_device_connection_changed_cb(camera_device_manager_h manager,
+       camera_device_connection_changed_cb callback, void *user_data, int *cb_id)
+{
+       int ret = CAMERA_ERROR_NONE;
+       camera_device_manager *m = (camera_device_manager *)manager;
+
+       if (!m || !callback || !cb_id) {
+               CAM_LOG_ERROR("NULL parameter[%p,%p,%p]", m, callback, cb_id);
+               return CAMERA_ERROR_INVALID_PARAMETER;
+       }
+
+       CAM_LOG_INFO("enter");
+
+       ret = m->add_device_connection_changed_cb(callback, user_data, cb_id);
+       if (ret != CAMERA_ERROR_NONE) {
+               CAM_LOG_ERROR("failed[0x%x]", ret);
+               return ret;
+       }
+
+       CAM_LOG_INFO("cb_id[%d] added", *cb_id);
+
+       return CAMERA_ERROR_NONE;
+}
+
+
+int camera_device_manager_remove_device_connection_changed_cb(camera_device_manager_h manager, int cb_id)
+{
+       int ret = CAMERA_ERROR_NONE;
+       camera_device_manager *m = (camera_device_manager *)manager;
+
+       if (!m) {
+               CAM_LOG_ERROR("NULL manager");
+               return CAMERA_ERROR_INVALID_PARAMETER;
+       }
+
+       CAM_LOG_INFO("enter - cb_id[%d]", cb_id);
+
+       ret = m->remove_device_connection_changed_cb(cb_id);
+       if (ret != CAMERA_ERROR_NONE) {
+               CAM_LOG_ERROR("failed[0x%x]", ret);
+               return ret;
+       }
+
+       CAM_LOG_INFO("cb_id[%d] removed", cb_id);
+
+       return CAMERA_ERROR_NONE;
 }
 
 
index 3b134a6..e50e4d4 100644 (file)
@@ -67,6 +67,7 @@ static camera_device_e camera_device;
 static GTimer *timer;
 static int g_camera_device_state_changed_cb_id;
 static int g_camera_device_list_changed_cb_id;
+static int g_camera_device_connection_changed_cb_id;
 static int g_camera_preview_cb_dump;
 static int g_camera_extra_preview_cb_dump;
 static int g_camera_mp_preview_cb_dump;
@@ -486,6 +487,19 @@ static void _camera_device_list_changed_cb(camera_device_list_s *device_list, vo
        return;
 }
 
+static void _camera_device_connection_changed_cb(camera_device_s *device, bool is_connected, void *user_data)
+{
+       if (!device) {
+               g_print("NULL list");
+               return;
+       }
+
+       g_print("\n\tcamera device changed[is_connected:%d][Type:%d,index:%d,name:%s,id:%s,exstreamnum:%d]\n",
+               is_connected, device->type, device->index, device->name, device->id, device->extra_stream_num);
+
+       return;
+}
+
 static void _camera_interrupted_cb(camera_policy_e policy, camera_state_e previous, camera_state_e current, void *user_data)
 {
        g_print("\n\tcamera interrupted callback called[state %d -> %d, policy %d]\n",
@@ -906,7 +920,9 @@ static void print_menu()
                g_print("\t   '2' Get camera device list\n");
                g_print("\t   '3' Add camera device list changed callback\n");
                g_print("\t   '4' Remove camera device list changed callback\n");
-               g_print("\t   '5' Deinitialize device manager\n");
+               g_print("\t   '5' Add camera device connection changed callback\n");
+               g_print("\t   '6' Remove camera device connection changed callback\n");
+               g_print("\t   '9' Deinitialize device manager\n");
                g_print("\t   'b' back\n");
                g_print("\t=======================================\n");
                break;
@@ -1726,7 +1742,22 @@ static void device_list_menu(gchar buf)
                        g_print("\n\tinvalid cb id[%d]\n", g_camera_device_list_changed_cb_id);
                }
                break;
-       case '5': /* Deinitialize device manager */
+       case '5': /* Add device connection changed callback */
+               ret = camera_device_manager_add_device_connection_changed_cb(g_device_manager,
+                       _camera_device_connection_changed_cb, NULL, &g_camera_device_connection_changed_cb_id);
+               g_print("\n\tadd result[0x%x] - cb id[%d]\n", ret, g_camera_device_connection_changed_cb_id);
+               break;
+       case '6': /* Remove device connection changed callback */
+               if (g_camera_device_connection_changed_cb_id > 0) {
+                       ret = camera_device_manager_remove_device_connection_changed_cb(g_device_manager,
+                               g_camera_device_connection_changed_cb_id);
+                       g_print("\n\tremove result[0x%x] - cb id[%d]\n", ret, g_camera_device_connection_changed_cb_id);
+                       g_camera_device_connection_changed_cb_id = 0;
+               } else {
+                       g_print("\n\tinvalid cb id[%d]\n", g_camera_device_connection_changed_cb_id);
+               }
+               break;
+       case '9': /* Deinitialize device manager */
                ret = camera_device_manager_deinitialize(g_device_manager);
                g_print("\n\tDevice manager[%p] deinitialize result[0x%x]\n",
                        g_device_manager, ret);