From 8baf1454c00eb7f6f5d0ff7f3b1628d0cd9e0932 Mon Sep 17 00:00:00 2001 From: Jeongmo Yang Date: Thu, 17 Jun 2021 20:16:20 +0900 Subject: [PATCH] Add new internal APIs for device manager - 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 --- include/camera_internal.h | 45 ++++++++++++++++++++++++++++++ include/camera_private.h | 2 ++ packaging/capi-media-camera.spec | 2 +- src/camera_internal.c | 59 +++++++++++++++++++++++++++++++++++++--- test/camera_test.c | 35 ++++++++++++++++++++++-- 5 files changed, 136 insertions(+), 7 deletions(-) diff --git a/include/camera_internal.h b/include/camera_internal.h index ef092a1..2e15967 100644 --- a/include/camera_internal.h +++ b/include/camera_internal.h @@ -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 diff --git a/include/camera_private.h b/include/camera_private.h index 2e90bd0..a13a936 100644 --- a/include/camera_private.h +++ b/include/camera_private.h @@ -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; diff --git a/packaging/capi-media-camera.spec b/packaging/capi-media-camera.spec index 7119cf6..c2ed6b3 100644 --- a/packaging/capi-media-camera.spec +++ b/packaging/capi-media-camera.spec @@ -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 diff --git a/src/camera_internal.c b/src/camera_internal.c index 2e6f19e..fed2275 100644 --- a/src/camera_internal.c +++ b/src/camera_internal.c @@ -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; } diff --git a/test/camera_test.c b/test/camera_test.c index 3b134a6..e50e4d4 100644 --- a/test/camera_test.c +++ b/test/camera_test.c @@ -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); -- 2.7.4