From dfa628b7b09f3de2e00eb3e7953528fb8b1519af Mon Sep 17 00:00:00 2001 From: Jeongmo Yang Date: Fri, 10 Jan 2025 16:52:12 +0900 Subject: [PATCH] Update camera_change_device() - Do not reset callback if not CREATED state. - Minor change : camera_test - Add new menu for changing device while previewing. [Version] 1.2.5 [Issue Type] Update Change-Id: I34e788c9104241bd9fb0527c44a598d150f3fc4c Signed-off-by: Jeongmo Yang --- packaging/capi-media-camera.spec | 2 +- src/camera.c | 10 +++++++++- test/camera_test.c | 10 ++++++++++ 3 files changed, 20 insertions(+), 2 deletions(-) diff --git a/packaging/capi-media-camera.spec b/packaging/capi-media-camera.spec index e8b3bd0..cb0f59a 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: 1.2.4 +Version: 1.2.5 Release: 0 Group: Multimedia/API License: Apache-2.0 diff --git a/src/camera.c b/src/camera.c index 715ac9b..e5ec455 100644 --- a/src/camera.c +++ b/src/camera.c @@ -2858,15 +2858,23 @@ int camera_change_device(camera_h camera, camera_device_e device) int ret = CAMERA_ERROR_NONE; muse_camera_api_e api = MUSE_CAMERA_API_CHANGE_DEVICE; camera_cli_s *pc = (camera_cli_s *)camera; + camera_state_e current_state = CAMERA_STATE_NONE; camera_msg_param param; CAMERA_CHECK_HANDLE_RETURN_VAL(pc, CAMERA_ERROR_INVALID_PARAMETER); + ret = camera_get_state(camera, ¤t_state); + if (ret != CAMERA_ERROR_NONE) { + CAM_LOG_ERROR("failed to get current state 0x%x", ret); + return ret; + } + CAMERA_MSG_PARAM_SET(param, INT, device); _camera_msg_send_param1(api, pc->cb_info, &ret, ¶m, CAMERA_CB_TIMEOUT); - if (ret == CAMERA_ERROR_NONE) { + if (ret == CAMERA_ERROR_NONE && + current_state == CAMERA_STATE_CREATED) { /* reset callback and user data */ for (i = 0 ; i < MUSE_CAMERA_EVENT_TYPE_NUM ; i++) { pc->cb_info->user_cb[i] = NULL; diff --git a/test/camera_test.c b/test/camera_test.c index f791edc..b6a5105 100644 --- a/test/camera_test.c +++ b/test/camera_test.c @@ -907,6 +907,7 @@ void print_menu() g_print("\t '6' Set/Unset extra preview callback\n"); g_print("\t '7' Set/Unset media packet preview callback\n"); g_print("\t '8' Set/Unset media packet preview internal callback\n"); + g_print("\t '9' Change device while previewing\n"); g_print("\t 'b' back\n"); g_print("\t=======================================\n"); break; @@ -1006,6 +1007,7 @@ static void main_menu(gchar buf) int err = 0; int interval = 0; int count = 0; + int device = 0; switch (buf) { case '1': /* Capture */ @@ -1067,6 +1069,14 @@ static void main_menu(gchar buf) err = _camera_set_preview_cb(PREVIEW_CB_TYPE_MEDIA_PACKET_INTERNAL); g_print("\tresult[0x%x]\n\n", err); break; + case '9': + g_print("\n\tChange device while previewing: "); + err = scanf("%d", &device); + flush_stdin(); + + err = camera_change_device(hcamcorder->camera, device); + g_print("\tresult[0x%x]\n\n", err); + break; case 'b': /* back */ __release_media_bridge(); -- 2.34.1