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
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)
{
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;
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;
{ "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 },
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");
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;
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,