From: Sangchul Lee Date: Mon, 12 Dec 2022 03:01:35 +0000 (+0900) Subject: webrtc_test: Add menu to take snapshot X-Git-Tag: accepted/tizen/unified/20221226.020937~1 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=4ab41968203ae2784e4c5ae6ac95dd01537d6af3;p=platform%2Fcore%2Fapi%2Fwebrtc.git webrtc_test: Add menu to take snapshot [Version] 0.3.273 [Issue Type] Add Change-Id: I2d869ff6e7db5dd3e367b4a24fd31321a2dc51d5 Signed-off-by: Sangchul Lee (cherry picked from commit dd6a0fcb0483d6c380c16aab597d5b88d6d8a9f0) --- diff --git a/packaging/capi-media-webrtc.spec b/packaging/capi-media-webrtc.spec index 54803174..bfcdfe1c 100644 --- a/packaging/capi-media-webrtc.spec +++ b/packaging/capi-media-webrtc.spec @@ -1,6 +1,6 @@ Name: capi-media-webrtc Summary: A WebRTC library in Tizen Native API -Version: 0.3.272 +Version: 0.3.273 Release: 0 Group: Multimedia/API License: Apache-2.0 diff --git a/test/webrtc_test.c b/test/webrtc_test.c index 0e7d9381..754a6908 100644 --- a/test/webrtc_test.c +++ b/test/webrtc_test.c @@ -77,6 +77,7 @@ static const char *g_webrtc_stats_type_str[] = { static appdata_s g_ad; static void _stop_pushing_packet(int index, int source_id); +static void __file_dump(const gchar *file_name, void *src_buffer, int size); appdata_s *get_appdata(void) { @@ -889,6 +890,50 @@ static void _webrtc_get_video_resolution(int index, unsigned int track_id) g_print("webrtc_get_video_resolution() success, track_id[%u], width[%d], height[%d]\n", track_id, width, height); } +static void __snapshot_cb(webrtc_h webrtc, unsigned int track_id, webrtc_snapshot_format_e format, const char *data, int width, int height, + unsigned int size, void *user_data) +{ + RET_IF(user_data == NULL, "user_data is NULL"); + + g_print("__snapshot_cb() is invoked, track_id[%u], format[0x%x], data[%p], %dx%d, size[%u], file_path[%s]\n", + track_id, format, data, width, height, size, (const char *)user_data); + + __file_dump((const gchar *)user_data, (void *)data, (int)size); + + free(user_data); +} + +static void _webrtc_take_snapshot(int index, unsigned int track_id, unsigned int value, void *file_name) +{ + int ret; + webrtc_snapshot_format_e format; + int option; + + switch (value) { + case 1: + format = WEBRTC_SNAPSHOT_FORMAT_RAW_RGB24; + option = WEBRTC_SNAPSHOT_OPTION_NONE; + break; + case 2: + format = WEBRTC_SNAPSHOT_FORMAT_JPEG; + option = 80; /* quality level 80 (1 ~ 100) */ + break; + case 3: + format = WEBRTC_SNAPSHOT_FORMAT_PNG; + option = 5; /* compression level 5 (0 ~ 9) */ + break; + default: + g_printerr("invalid value[%u]\n", value); + return; + } + + ret = webrtc_take_snapshot(g_ad.conns[index].webrtc, track_id, format, option, __snapshot_cb, strdup(file_name)); + RET_IF(ret != WEBRTC_ERROR_NONE, "ret[0x%x]", ret); + + g_print("webrtc_take_snapshot() success, track_id[%u], format[0x%x], option[%d], file_name[%s]\n", + track_id, format, option, (const char *)file_name); +} + static void _webrtc_media_source_set_audio_loopback(int index, unsigned int source_id) { int ret = WEBRTC_ERROR_NONE; @@ -3617,6 +3662,27 @@ static void test_webrtc_media_render(char *cmd) value = atoi(cmd); _webrtc_get_video_resolution(0, value); break; + case CURRENT_STATUS_TAKE_SNAPSHOT: { + static unsigned int id; + static unsigned int format; + + switch (g_ad.input_count) { + case 0: + id = atoi(cmd); + g_ad.input_count++; + return; + case 1: + format = atoi(cmd); + g_ad.input_count++; + return; + case 2: + _webrtc_take_snapshot(0, id, format, cmd); + id = format = 0; + g_ad.input_count = 0; + break; + } + break; + } case CURRENT_STATUS_SET_ENCODED_AUDIO_FRAME_CB: _webrtc_set_encoded_audio_frame_cb(0); break; diff --git a/test/webrtc_test_menu.c b/test/webrtc_test_menu.c index 61aea257..2585f2ce 100644 --- a/test/webrtc_test_menu.c +++ b/test/webrtc_test_menu.c @@ -87,6 +87,7 @@ menu_info_s g_menu_infos[] = { { "sam", CURRENT_STATUS_SET_AUDIO_MUTE, true }, { "gam", CURRENT_STATUS_GET_AUDIO_MUTE, true }, { "gvr", CURRENT_STATUS_GET_VIDEO_RESOLUTION, true }, + { "tsn", CURRENT_STATUS_TAKE_SNAPSHOT, true }, { "sa", CURRENT_STATUS_SET_ENCODED_AUDIO_FRAME_CB, false }, { "ua", CURRENT_STATUS_UNSET_ENCODED_AUDIO_FRAME_CB, false }, { "sv", CURRENT_STATUS_SET_ENCODED_VIDEO_FRAME_CB, false }, @@ -256,6 +257,7 @@ void display_menu_main(void) g_print("*sam. Set audio mute\t"); g_print("*gam. Get audio mute\n"); g_print("*gvr. Get video resolution\n"); + g_print("*tsn. Take snapshot\n"); g_print("al. Set audio loopback\t"); g_print("ual. Unset audio loopback\n"); g_print("vl. Set video loopback\t"); @@ -548,6 +550,14 @@ void display_menu_webrtc_media_render(void) case CURRENT_STATUS_GET_VIDEO_RESOLUTION: g_print("*** input track id.\n"); break; + case CURRENT_STATUS_TAKE_SNAPSHOT: + if (get_appdata()->input_count == 0) + g_print("*** input track id.\n"); + else if (get_appdata()->input_count == 1) + g_print("*** input format.(1.rgb24 2:jpg 3:png)\n"); + else if (get_appdata()->input_count == 2) + g_print("*** input file name.(e.g. snapshot_01.jpg)\n"); + break; case CURRENT_STATUS_MEDIA_SOURCE_SET_AUDIO_LOOPBACK: g_print("*** input source id.\n"); break; diff --git a/test/webrtc_test_priv.h b/test/webrtc_test_priv.h index 89e715d4..b608d4b5 100644 --- a/test/webrtc_test_priv.h +++ b/test/webrtc_test_priv.h @@ -126,14 +126,15 @@ enum { CURRENT_STATUS_SET_AUDIO_MUTE = TEST_MENU_WEBRTC_MEDIA_RENDER | 0x06, CURRENT_STATUS_GET_AUDIO_MUTE = TEST_MENU_WEBRTC_MEDIA_RENDER | 0x07, CURRENT_STATUS_GET_VIDEO_RESOLUTION = TEST_MENU_WEBRTC_MEDIA_RENDER | 0x08, - CURRENT_STATUS_SET_ENCODED_AUDIO_FRAME_CB = TEST_MENU_WEBRTC_MEDIA_RENDER | 0x09, - CURRENT_STATUS_UNSET_ENCODED_AUDIO_FRAME_CB = TEST_MENU_WEBRTC_MEDIA_RENDER | 0x0A, - CURRENT_STATUS_SET_ENCODED_VIDEO_FRAME_CB = TEST_MENU_WEBRTC_MEDIA_RENDER | 0x0B, - CURRENT_STATUS_UNSET_ENCODED_VIDEO_FRAME_CB = TEST_MENU_WEBRTC_MEDIA_RENDER | 0x0C, - CURRENT_STATUS_MEDIA_SOURCE_SET_AUDIO_LOOPBACK = TEST_MENU_WEBRTC_MEDIA_RENDER | 0x0D, - CURRENT_STATUS_MEDIA_SOURCE_UNSET_AUDIO_LOOPBACK = TEST_MENU_WEBRTC_MEDIA_RENDER | 0x0E, - CURRENT_STATUS_MEDIA_SOURCE_SET_VIDEO_LOOPBACK = TEST_MENU_WEBRTC_MEDIA_RENDER | 0x0F, - CURRENT_STATUS_MEDIA_SOURCE_UNSET_VIDEO_LOOPBACK = TEST_MENU_WEBRTC_MEDIA_RENDER | 0x10, + CURRENT_STATUS_TAKE_SNAPSHOT = TEST_MENU_WEBRTC_MEDIA_RENDER | 0x09, + CURRENT_STATUS_SET_ENCODED_AUDIO_FRAME_CB = TEST_MENU_WEBRTC_MEDIA_RENDER | 0x0A, + CURRENT_STATUS_UNSET_ENCODED_AUDIO_FRAME_CB = TEST_MENU_WEBRTC_MEDIA_RENDER | 0x0B, + CURRENT_STATUS_SET_ENCODED_VIDEO_FRAME_CB = TEST_MENU_WEBRTC_MEDIA_RENDER | 0x0C, + CURRENT_STATUS_UNSET_ENCODED_VIDEO_FRAME_CB = TEST_MENU_WEBRTC_MEDIA_RENDER | 0x0D, + CURRENT_STATUS_MEDIA_SOURCE_SET_AUDIO_LOOPBACK = TEST_MENU_WEBRTC_MEDIA_RENDER | 0x0E, + CURRENT_STATUS_MEDIA_SOURCE_UNSET_AUDIO_LOOPBACK = TEST_MENU_WEBRTC_MEDIA_RENDER | 0x0F, + CURRENT_STATUS_MEDIA_SOURCE_SET_VIDEO_LOOPBACK = TEST_MENU_WEBRTC_MEDIA_RENDER | 0x10, + CURRENT_STATUS_MEDIA_SOURCE_UNSET_VIDEO_LOOPBACK = TEST_MENU_WEBRTC_MEDIA_RENDER | 0x11, /* webrtc data channel */ CURRENT_STATUS_DATA_CHANNEL_CREATE = TEST_MENU_WEBRTC_DATA_CHANNEL | 0x01, CURRENT_STATUS_DATA_CHANNEL_DESTROY = TEST_MENU_WEBRTC_DATA_CHANNEL | 0x02,