webrtc_test: Add menu to set/get transceiver codec 81/276081/8
authorSangchul Lee <sc11.lee@samsung.com>
Thu, 9 Jun 2022 08:44:37 +0000 (17:44 +0900)
committerSangchul Lee <sc11.lee@samsung.com>
Wed, 22 Jun 2022 08:55:36 +0000 (17:55 +0900)
[Version] 0.3.131
[Issue Type] Add

Change-Id: Iea9e1bd508dc003dabd447dd91020bd9d44385fc
Signed-off-by: Sangchul Lee <sc11.lee@samsung.com>
packaging/capi-media-webrtc.spec
test/webrtc_test.c
test/webrtc_test_menu.c
test/webrtc_test_priv.h

index 5cf590b04732be6c8ee6fe4775f026242c025f4f..e4ffd396b445efb24dd57c70c7d19302916a7a7b 100644 (file)
@@ -1,6 +1,6 @@
 Name:       capi-media-webrtc
 Summary:    A WebRTC library in Tizen Native API
-Version:    0.3.130
+Version:    0.3.131
 Release:    0
 Group:      Multimedia/API
 License:    Apache-2.0
index c186fac16f6b9b2de88b26dcef46768620acec23..cceff768da56ca6e960b97bf3aab318c1f58bdd5 100644 (file)
@@ -62,6 +62,15 @@ static const char *g_webrtc_transceiver_direction_str[] = {
        [WEBRTC_TRANSCEIVER_DIRECTION_SENDRECV] = "SENDRECV",
 };
 
+static const char *g_webrtc_transceiver_codec_str[] = {
+       [WEBRTC_TRANSCEIVER_CODEC_PCMU] = "PCMU",
+       [WEBRTC_TRANSCEIVER_CODEC_PCMA] = "PCMA",
+       [WEBRTC_TRANSCEIVER_CODEC_OPUS] = "OPUS",
+       [WEBRTC_TRANSCEIVER_CODEC_VP8] = "VP8",
+       [WEBRTC_TRANSCEIVER_CODEC_VP9] = "VP9",
+       [WEBRTC_TRANSCEIVER_CODEC_H264] = "H264",
+};
+
 static const char *g_webrtc_stats_type_str[] = {
        [WEBRTC_STATS_TYPE_CODEC] = "codec",
        [WEBRTC_STATS_TYPE_INBOUND_RTP] = "inbound-rtp",
@@ -960,6 +969,54 @@ static void _webrtc_media_source_foreach_supported_transceiver_codec(int index,
                source_id, g_webrtc_media_type_str[media_type]);
 }
 
+static void _webrtc_media_source_get_transceiver_codec(int index, unsigned int source_id, webrtc_media_type_e media_type)
+{
+       int ret = WEBRTC_ERROR_NONE;
+       webrtc_transceiver_codec_e codec;
+
+       ret = webrtc_media_source_get_transceiver_codec(g_ad.conns[index].webrtc, source_id, media_type, &codec);
+       RET_IF(ret != WEBRTC_ERROR_NONE, "ret[0x%x]", ret);
+
+       g_print("webrtc_media_source_get_transceiver_codec() success, source_id[%u], media_type[%s], codec[%s]\n",
+               source_id, g_webrtc_media_type_str[media_type], g_webrtc_transceiver_codec_str[codec]);
+}
+
+static void _webrtc_media_source_set_transceiver_codec(int index, unsigned int source_id, webrtc_media_type_e media_type, int value)
+{
+       int ret;
+       webrtc_transceiver_codec_e codec;
+
+       switch (value) {
+       case 1:
+               codec = WEBRTC_TRANSCEIVER_CODEC_PCMU;
+               break;
+       case 2:
+               codec = WEBRTC_TRANSCEIVER_CODEC_PCMA;
+               break;
+       case 3:
+               codec = WEBRTC_TRANSCEIVER_CODEC_OPUS;
+               break;
+       case 4:
+               codec = WEBRTC_TRANSCEIVER_CODEC_VP8;
+               break;
+       case 5:
+               codec = WEBRTC_TRANSCEIVER_CODEC_VP9;
+               break;
+       case 6:
+               codec = WEBRTC_TRANSCEIVER_CODEC_H264;
+               break;
+       default:
+               g_printerr("invalid value[%d]\n", value);
+               return;
+       }
+
+       ret = webrtc_media_source_set_transceiver_codec(g_ad.conns[index].webrtc, source_id, media_type, codec);
+       RET_IF(ret != WEBRTC_ERROR_NONE, "ret[0x%x]", ret);
+
+       g_print("webrtc_media_source_set_transceiver_codec() success, source_id[%u], media_type[%s], codec[%s]\n",
+               source_id, g_webrtc_media_type_str[media_type], g_webrtc_transceiver_codec_str[codec]);
+}
+
 static void _webrtc_set_display_type(int index, int type)
 {
        g_ad.conns[index].render.display_type = type;
@@ -4552,7 +4609,7 @@ static void test_webrtc_media_source(char *cmd)
        case CURRENT_STATUS_MEDIA_SOURCE_SET_TRANSCEIVER_DIRECTION: {
                static unsigned int id;
                static unsigned int media_type;
-               static unsigned int direction;
+               unsigned int direction;
                value = atoi(cmd);
 
                switch (g_ad.input_count) {
@@ -4567,7 +4624,7 @@ static void test_webrtc_media_source(char *cmd)
                case 2:
                        direction =  value - 1;
                        _webrtc_media_source_set_transceiver_direction(0, id, media_type, direction);
-                       id = media_type = direction = 0;
+                       id = media_type = 0;
                        g_ad.input_count = 0;
                        reset_menu_state();
                        break;
@@ -4614,6 +4671,49 @@ static void test_webrtc_media_source(char *cmd)
                }
                break;
        }
+       case CURRENT_STATUS_MEDIA_SOURCE_SET_TRANSCEIVER_CODEC: {
+               static unsigned int id;
+               static unsigned int media_type;
+               value = atoi(cmd);
+
+               switch (g_ad.input_count) {
+               case 0:
+                       id = value;
+                       g_ad.input_count++;
+                       break;
+               case 1:
+                       media_type = value - 1;
+                       g_ad.input_count++;
+                       break;
+               case 2:
+                       _webrtc_media_source_set_transceiver_codec(0, id, media_type, value);
+                       id = media_type = 0;
+                       g_ad.input_count = 0;
+                       reset_menu_state();
+                       break;
+               }
+               break;
+       }
+       case CURRENT_STATUS_MEDIA_SOURCE_GET_TRANSCEIVER_CODEC: {
+               static unsigned int id;
+               static unsigned int media_type;
+               value = atoi(cmd);
+
+               switch (g_ad.input_count) {
+               case 0:
+                       id = value;
+                       g_ad.input_count++;
+                       break;
+               case 1:
+                       media_type = value - 1;
+                       _webrtc_media_source_get_transceiver_codec(0, id, media_type);
+                       id = media_type = 0;
+                       g_ad.input_count = 0;
+                       reset_menu_state();
+                       break;
+               }
+               break;
+       }
        case CURRENT_STATUS_START_PUSHING_PACKET_TO_MEDIA_PACKET_SOURCE: {
                value = atoi(cmd);
                _start_pushing_packet(0, value);
@@ -4626,7 +4726,7 @@ static void test_webrtc_media_source(char *cmd)
                reset_menu_state();
                break;
        }
-       case CURRENT_STATUS_SET_CROP_SCREEN_SOURCE: {
+       case CURRENT_STATUS_SCREEN_SOURCE_SET_CROP: {
                static unsigned int id;
                static int x, y, w, h;
                static int is_vertical;
@@ -4664,7 +4764,7 @@ static void test_webrtc_media_source(char *cmd)
                }
                break;
        }
-       case CURRENT_STATUS_UNSET_CROP_SCREEN_SOURCE: {
+       case CURRENT_STATUS_SCREEN_SOURCE_UNSET_CROP: {
                value = atoi(cmd);
                _webrtc_screen_source_unset_crop(0, value);
                reset_menu_state();
index c45dc3f88c3952fa5eb789b475b11cfef7883332..0cca0b7347a9c23de00458ee14f45370330f110d 100644 (file)
@@ -52,6 +52,8 @@ menu_info_s g_menu_infos[] = {
        { "td", CURRENT_STATUS_MEDIA_SOURCE_SET_TRANSCEIVER_DIRECTION, true },
        { "gd", CURRENT_STATUS_MEDIA_SOURCE_GET_TRANSCEIVER_DIRECTION, true },
        { "fc", CURRENT_STATUS_MEDIA_SOURCE_FOREACH_SUPPORTED_TRANSCEIVER_CODEC, true },
+       { "tc", CURRENT_STATUS_MEDIA_SOURCE_SET_TRANSCEIVER_CODEC, true },
+       { "gc", CURRENT_STATUS_MEDIA_SOURCE_GET_TRANSCEIVER_CODEC, true },
        { "p", CURRENT_STATUS_MEDIA_SOURCE_SET_PAUSE, true },
        { "o", CURRENT_STATUS_MEDIA_SOURCE_GET_PAUSE, true },
        { "mu", CURRENT_STATUS_MEDIA_SOURCE_SET_MUTE, true },
@@ -68,8 +70,8 @@ menu_info_s g_menu_infos[] = {
        { "um", CURRENT_STATUS_MEDIA_PACKET_SOURCE_UNSET_BUFFER_STATE_CHANGED_CB, true },
        { "sp", CURRENT_STATUS_START_PUSHING_PACKET_TO_MEDIA_PACKET_SOURCE, true },
        { "tp", CURRENT_STATUS_STOP_PUSHING_PACKET_TO_MEDIA_PACKET_SOURCE, true },
-       { "scs", CURRENT_STATUS_SET_CROP_SCREEN_SOURCE, true },
-       { "ucs", CURRENT_STATUS_UNSET_CROP_SCREEN_SOURCE, true },
+       { "scs", CURRENT_STATUS_SCREEN_SOURCE_SET_CROP, true },
+       { "ucs", CURRENT_STATUS_SCREEN_SOURCE_UNSET_CROP, true },
        /* webrtc media render */
        { "dt", CURRENT_STATUS_SET_DISPLAY_TYPE, true },
        { "dm", CURRENT_STATUS_SET_DISPLAY_MODE, true },
@@ -208,15 +210,17 @@ void display_menu_main(void)
        g_print("m. Get video framerate\n");
        g_print("td. Set transceiver direction\t");
        g_print("gd. Get transceiver direction\n");
-       g_print("fc. Get supported transceiver codecs\n");
+       g_print("fc. Get supported transceiver codecs\t");
+       g_print("tc. Set transceiver codec\t");
+       g_print("gc. Get transceiver codec\n");
        g_print("pa. Set media path to file source\n");
        g_print("sfl. Set file source looping\t");
-       g_print("gfl. Set file source looping\n");
+       g_print("gfl. Get file source looping\n");
        g_print("sf. Set media format to media packet source\n");
        g_print("sp. Start pushing packet to media packet source\t");
        g_print("tp. Stop pushing packet to media packet source\n");
-       g_print("scs. *Set crop screen source\t");
-       g_print("ucs. *Unset crop screen source\n");
+       g_print("scs. *Set screen source crop\t");
+       g_print("ucs. *Unset screen source crop\n");
        g_print("------------------------------------- Media Render --------------------------------------\n");
        g_print("dt. Set display type\t");
        g_print("dm. Set display mode\t");
@@ -375,6 +379,20 @@ void display_menu_webrtc_media_source(void)
                else if (get_appdata()->input_count == 1)
                        g_print("*** input media type.(1:audio 2:video)\n");
                break;
+       case CURRENT_STATUS_MEDIA_SOURCE_SET_TRANSCEIVER_CODEC:
+               if (get_appdata()->input_count == 0)
+                       g_print("*** input source id.\n");
+               else if (get_appdata()->input_count == 1)
+                       g_print("*** input media type.(1:audio 2:video)\n");
+               else if (get_appdata()->input_count == 2)
+                       g_print("*** input transceiver codec.(1:PCMU 2:PCMA 3:OPUS 4:VP8 5:VP9 6:H264)\n");
+               break;
+       case CURRENT_STATUS_MEDIA_SOURCE_GET_TRANSCEIVER_CODEC:
+               if (get_appdata()->input_count == 0)
+                       g_print("*** input source id.\n");
+               else if (get_appdata()->input_count == 1)
+                       g_print("*** input media type.(1:audio 2:video)\n");
+               break;
        case CURRENT_STATUS_FILE_SOURCE_SET_PATH:
                if (get_appdata()->input_count == 0)
                        g_print("*** input source id.\n");
@@ -409,7 +427,7 @@ void display_menu_webrtc_media_source(void)
        case CURRENT_STATUS_STOP_PUSHING_PACKET_TO_MEDIA_PACKET_SOURCE:
                g_print("*** input media packet source id to stop pushing packet.\n");
                break;
-       case CURRENT_STATUS_SET_CROP_SCREEN_SOURCE:
+       case CURRENT_STATUS_SCREEN_SOURCE_SET_CROP:
                if (get_appdata()->input_count == 0)
                        g_print("*** input source id.\n");
                else if (get_appdata()->input_count == 1)
@@ -423,7 +441,7 @@ void display_menu_webrtc_media_source(void)
                else if (get_appdata()->input_count == 5)
                        g_print("*** input whether screen rotates (0: horizontal, 1: vertical).\n");
                break;
-       case CURRENT_STATUS_UNSET_CROP_SCREEN_SOURCE:
+       case CURRENT_STATUS_SCREEN_SOURCE_UNSET_CROP:
                if (get_appdata()->input_count == 0)
                        g_print("*** input source id.\n");
                break;
index f0c0b1f665c80d20672ea0a83cc349a0617f82f8..d824b1f73492f0be563d66375c06dc40ae406b5d 100644 (file)
@@ -88,24 +88,26 @@ enum {
        CURRENT_STATUS_MEDIA_SOURCE_SET_TRANSCEIVER_DIRECTION = TEST_MENU_WEBRTC_MEDIA_SOURCE | 0x03,
        CURRENT_STATUS_MEDIA_SOURCE_GET_TRANSCEIVER_DIRECTION = TEST_MENU_WEBRTC_MEDIA_SOURCE | 0x04,
        CURRENT_STATUS_MEDIA_SOURCE_FOREACH_SUPPORTED_TRANSCEIVER_CODEC = TEST_MENU_WEBRTC_MEDIA_SOURCE | 0x05,
-       CURRENT_STATUS_MEDIA_SOURCE_SET_PAUSE = TEST_MENU_WEBRTC_MEDIA_SOURCE | 0x06,
-       CURRENT_STATUS_MEDIA_SOURCE_GET_PAUSE = TEST_MENU_WEBRTC_MEDIA_SOURCE | 0x07,
-       CURRENT_STATUS_MEDIA_SOURCE_SET_MUTE = TEST_MENU_WEBRTC_MEDIA_SOURCE | 0x08,
-       CURRENT_STATUS_MEDIA_SOURCE_GET_MUTE = TEST_MENU_WEBRTC_MEDIA_SOURCE | 0x09,
-       CURRENT_STATUS_MEDIA_SOURCE_SET_VIDEO_RESOLUTION = TEST_MENU_WEBRTC_MEDIA_SOURCE | 0x0A,
-       CURRENT_STATUS_MEDIA_SOURCE_GET_VIDEO_RESOLUTION = TEST_MENU_WEBRTC_MEDIA_SOURCE | 0x0B,
-       CURRENT_STATUS_MEDIA_SOURCE_SET_VIDEO_FRAMERATE = TEST_MENU_WEBRTC_MEDIA_SOURCE | 0x0C,
-       CURRENT_STATUS_MEDIA_SOURCE_GET_VIDEO_FRAMERATE = TEST_MENU_WEBRTC_MEDIA_SOURCE | 0x0D,
-       CURRENT_STATUS_FILE_SOURCE_SET_PATH = TEST_MENU_WEBRTC_MEDIA_SOURCE | 0x0E,
-       CURRENT_STATUS_FILE_SOURCE_SET_LOOPING = TEST_MENU_WEBRTC_MEDIA_SOURCE | 0x0F,
-       CURRENT_STATUS_FILE_SOURCE_GET_LOOPING = TEST_MENU_WEBRTC_MEDIA_SOURCE | 0x10,
-       CURRENT_STATUS_MEDIA_PACKET_SOURCE_SET_FORMAT = TEST_MENU_WEBRTC_MEDIA_SOURCE | 0x11,
-       CURRENT_STATUS_MEDIA_PACKET_SOURCE_SET_BUFFER_STATE_CHANGED_CB = TEST_MENU_WEBRTC_MEDIA_SOURCE | 0x12,
-       CURRENT_STATUS_MEDIA_PACKET_SOURCE_UNSET_BUFFER_STATE_CHANGED_CB = TEST_MENU_WEBRTC_MEDIA_SOURCE | 0x13,
-       CURRENT_STATUS_START_PUSHING_PACKET_TO_MEDIA_PACKET_SOURCE = TEST_MENU_WEBRTC_MEDIA_SOURCE | 0x14,
-       CURRENT_STATUS_STOP_PUSHING_PACKET_TO_MEDIA_PACKET_SOURCE = TEST_MENU_WEBRTC_MEDIA_SOURCE | 0x15,
-       CURRENT_STATUS_SET_CROP_SCREEN_SOURCE = TEST_MENU_WEBRTC_MEDIA_SOURCE | 0x16,
-       CURRENT_STATUS_UNSET_CROP_SCREEN_SOURCE = TEST_MENU_WEBRTC_MEDIA_SOURCE | 0x17,
+       CURRENT_STATUS_MEDIA_SOURCE_SET_TRANSCEIVER_CODEC = TEST_MENU_WEBRTC_MEDIA_SOURCE | 0x06,
+       CURRENT_STATUS_MEDIA_SOURCE_GET_TRANSCEIVER_CODEC = TEST_MENU_WEBRTC_MEDIA_SOURCE | 0x07,
+       CURRENT_STATUS_MEDIA_SOURCE_SET_PAUSE = TEST_MENU_WEBRTC_MEDIA_SOURCE | 0x08,
+       CURRENT_STATUS_MEDIA_SOURCE_GET_PAUSE = TEST_MENU_WEBRTC_MEDIA_SOURCE | 0x09,
+       CURRENT_STATUS_MEDIA_SOURCE_SET_MUTE = TEST_MENU_WEBRTC_MEDIA_SOURCE | 0x0A,
+       CURRENT_STATUS_MEDIA_SOURCE_GET_MUTE = TEST_MENU_WEBRTC_MEDIA_SOURCE | 0x0B,
+       CURRENT_STATUS_MEDIA_SOURCE_SET_VIDEO_RESOLUTION = TEST_MENU_WEBRTC_MEDIA_SOURCE | 0x0C,
+       CURRENT_STATUS_MEDIA_SOURCE_GET_VIDEO_RESOLUTION = TEST_MENU_WEBRTC_MEDIA_SOURCE | 0x0D,
+       CURRENT_STATUS_MEDIA_SOURCE_SET_VIDEO_FRAMERATE = TEST_MENU_WEBRTC_MEDIA_SOURCE | 0x0E,
+       CURRENT_STATUS_MEDIA_SOURCE_GET_VIDEO_FRAMERATE = TEST_MENU_WEBRTC_MEDIA_SOURCE | 0x0F,
+       CURRENT_STATUS_FILE_SOURCE_SET_PATH = TEST_MENU_WEBRTC_MEDIA_SOURCE | 0x10,
+       CURRENT_STATUS_FILE_SOURCE_SET_LOOPING = TEST_MENU_WEBRTC_MEDIA_SOURCE | 0x11,
+       CURRENT_STATUS_FILE_SOURCE_GET_LOOPING = TEST_MENU_WEBRTC_MEDIA_SOURCE | 0x12,
+       CURRENT_STATUS_MEDIA_PACKET_SOURCE_SET_FORMAT = TEST_MENU_WEBRTC_MEDIA_SOURCE | 0x13,
+       CURRENT_STATUS_MEDIA_PACKET_SOURCE_SET_BUFFER_STATE_CHANGED_CB = TEST_MENU_WEBRTC_MEDIA_SOURCE | 0x14,
+       CURRENT_STATUS_MEDIA_PACKET_SOURCE_UNSET_BUFFER_STATE_CHANGED_CB = TEST_MENU_WEBRTC_MEDIA_SOURCE | 0x15,
+       CURRENT_STATUS_START_PUSHING_PACKET_TO_MEDIA_PACKET_SOURCE = TEST_MENU_WEBRTC_MEDIA_SOURCE | 0x16,
+       CURRENT_STATUS_STOP_PUSHING_PACKET_TO_MEDIA_PACKET_SOURCE = TEST_MENU_WEBRTC_MEDIA_SOURCE | 0x17,
+       CURRENT_STATUS_SCREEN_SOURCE_SET_CROP = TEST_MENU_WEBRTC_MEDIA_SOURCE | 0x18,
+       CURRENT_STATUS_SCREEN_SOURCE_UNSET_CROP = TEST_MENU_WEBRTC_MEDIA_SOURCE | 0x19,
        /* webrtc media render */
        CURRENT_STATUS_SET_DISPLAY_TYPE = TEST_MENU_WEBRTC_MEDIA_RENDER | 0x01,
        CURRENT_STATUS_SET_DISPLAY_MODE = TEST_MENU_WEBRTC_MEDIA_RENDER | 0x02,