/**
* @brief Creates a new screen mirroring sink handle.
* @since_tizen 2.4
- * @privlevel public
- * @privilege %http://tizen.org/privilege/internet
*
* @remarks You must release @a scmirroring_sink using scmirroring_sink_destroy().
*
* @retval #SCMIRRORING_ERROR_INVALID_PARAMETER Invalid parameter
* @retval #SCMIRRORING_ERROR_OUT_OF_MEMORY Out of memory
* @retval #SCMIRRORING_ERROR_INVALID_OPERATION Invalid operation
- * @retval #SCMIRRORING_ERROR_PERMISSION_DENIED Permission denied
* @retval #SCMIRRORING_ERROR_NOT_SUPPORTED Not supported
* @retval #SCMIRRORING_ERROR_UNKNOWN Unknown Error
*
/**
* @brief Prepares the screen mirroring sink handle and allocates specific resources.
* @since_tizen 2.4
- * @privlevel public
- * @privilege %http://tizen.org/privilege/internet
*
* @param[in] scmirroring_sink The handle to the screen mirroring sink
* @return @c 0 on success,
* @retval #SCMIRRORING_ERROR_INVALID_PARAMETER Invalid parameter
* @retval #SCMIRRORING_ERROR_OUT_OF_MEMORY Out of memory
* @retval #SCMIRRORING_ERROR_INVALID_OPERATION Invalid operation
- * @retval #SCMIRRORING_ERROR_PERMISSION_DENIED Permission denied
* @retval #SCMIRRORING_ERROR_NOT_SUPPORTED Not supported
* @retval #SCMIRRORING_ERROR_UNKNOWN Unknown Error
*
* @details This function unprepares screen mirroring, which closes specific resources.
*
* @since_tizen 2.4
- * @privlevel public
- * @privilege %http://tizen.org/privilege/internet
*
* @param[in] scmirroring_sink The handle to the screen mirroring sink
* @return @c 0 on success,
* @retval #SCMIRRORING_ERROR_INVALID_PARAMETER Invalid parameter
* @retval #SCMIRRORING_ERROR_OUT_OF_MEMORY Out of memory
* @retval #SCMIRRORING_ERROR_INVALID_OPERATION Invalid operation
- * @retval #SCMIRRORING_ERROR_PERMISSION_DENIED Permission denied
* @retval #SCMIRRORING_ERROR_NOT_SUPPORTED Not supported
* @retval #SCMIRRORING_ERROR_UNKNOWN Unknown Error
*
* @details The video codec is negotiated by screen mirroring source.
*
* @since_tizen 2.4
- * @privlevel public
- * @privilege %http://tizen.org/privilege/internet
*
* @param[in] scmirroring_sink The handle to the screen mirroring sink
* @param[out] codec Codec of video
* @retval #SCMIRRORING_ERROR_NONE Successful
* @retval #SCMIRRORING_ERROR_INVALID_PARAMETER Invalid parameter
* @retval #SCMIRRORING_ERROR_INVALID_OPERATION Invalid operation
- * @retval #SCMIRRORING_ERROR_PERMISSION_DENIED Permission denied
* @retval #SCMIRRORING_ERROR_NOT_SUPPORTED Not supported
* @retval #SCMIRRORING_ERROR_UNKNOWN Unknown Error
*
* @details The video resolution is negotiated by screen mirroring source.
*
* @since_tizen 2.4
- * @privlevel public
- * @privilege %http://tizen.org/privilege/internet
*
* @param[in] scmirroring_sink The handle to the screen mirroring sink
* @param[out] width Width of video
* @retval #SCMIRRORING_ERROR_NONE Successful
* @retval #SCMIRRORING_ERROR_INVALID_PARAMETER Invalid parameter
* @retval #SCMIRRORING_ERROR_INVALID_OPERATION Invalid operation
- * @retval #SCMIRRORING_ERROR_PERMISSION_DENIED Permission denied
* @retval #SCMIRRORING_ERROR_NOT_SUPPORTED Not supported
* @retval #SCMIRRORING_ERROR_UNKNOWN Unknown Error
*
* @details The video frame rate is negotiated by screen mirroring source.
*
* @since_tizen 2.4
- * @privlevel public
- * @privilege %http://tizen.org/privilege/internet
*
* @param[in] scmirroring_sink The handle to the screen mirroring sink
* @param[out] frame_rate Frame rate of video
* @retval #SCMIRRORING_ERROR_NONE Successful
* @retval #SCMIRRORING_ERROR_INVALID_PARAMETER Invalid parameter
* @retval #SCMIRRORING_ERROR_INVALID_OPERATION Invalid operation
- * @retval #SCMIRRORING_ERROR_PERMISSION_DENIED Permission denied
* @retval #SCMIRRORING_ERROR_NOT_SUPPORTED Not supported
* @retval #SCMIRRORING_ERROR_UNKNOWN Unknown Error
*
* @details The audio codec is negotiated by screen mirroring source.
*
* @since_tizen 2.4
- * @privlevel public
- * @privilege %http://tizen.org/privilege/internet
*
* @param[in] scmirroring_sink The handle to the screen mirroring sink
* @param[out] codec Codec of audio
* @retval #SCMIRRORING_ERROR_NONE Successful
* @retval #SCMIRRORING_ERROR_INVALID_PARAMETER Invalid parameter
* @retval #SCMIRRORING_ERROR_INVALID_OPERATION Invalid operation
- * @retval #SCMIRRORING_ERROR_PERMISSION_DENIED Permission denied
* @retval #SCMIRRORING_ERROR_NOT_SUPPORTED Not supported
* @retval #SCMIRRORING_ERROR_UNKNOWN Unknown Error
*
* @details The audio channel is negotiated by screen mirroring source.
*
* @since_tizen 2.4
- * @privlevel public
- * @privilege %http://tizen.org/privilege/internet
*
* @param[in] scmirroring_sink The handle to the screen mirroring sink
* @param[out] channel Channel of audio
* @retval #SCMIRRORING_ERROR_NONE Successful
* @retval #SCMIRRORING_ERROR_INVALID_PARAMETER Invalid parameter
* @retval #SCMIRRORING_ERROR_INVALID_OPERATION Invalid operation
- * @retval #SCMIRRORING_ERROR_PERMISSION_DENIED Permission denied
* @retval #SCMIRRORING_ERROR_NOT_SUPPORTED Not supported
* @retval #SCMIRRORING_ERROR_UNKNOWN Unknown Error
*
* @details The audio sample rate is negotiated by screen mirroring source.
*
* @since_tizen 2.4
- * @privlevel public
- * @privilege %http://tizen.org/privilege/internet
*
* @param[in] scmirroring_sink The handle to the screen mirroring sink
* @param[out] sample_rate Sample rate of audio
* @retval #SCMIRRORING_ERROR_NONE Successful
* @retval #SCMIRRORING_ERROR_INVALID_PARAMETER Invalid parameter
* @retval #SCMIRRORING_ERROR_INVALID_OPERATION Invalid operation
- * @retval #SCMIRRORING_ERROR_PERMISSION_DENIED Permission denied
* @retval #SCMIRRORING_ERROR_NOT_SUPPORTED Not supported
* @retval #SCMIRRORING_ERROR_UNKNOWN Unknown Error
*
* @details The audio bitwidth is negotiated by screen mirroring source.
*
* @since_tizen 2.4
- * @privlevel public
- * @privilege %http://tizen.org/privilege/internet
*
* @param[in] scmirroring_sink The handle to the screen mirroring sink
* @param[out] bitwidth Bitwidth of audio
* @retval #SCMIRRORING_ERROR_NONE Successful
* @retval #SCMIRRORING_ERROR_INVALID_PARAMETER Invalid parameter
* @retval #SCMIRRORING_ERROR_INVALID_OPERATION Invalid operation
- * @retval #SCMIRRORING_ERROR_PERMISSION_DENIED Permission denied
* @retval #SCMIRRORING_ERROR_NOT_SUPPORTED Not supported
* @retval #SCMIRRORING_ERROR_UNKNOWN Unknown Error
*
#include <wifi-direct.h>
#include <wifi-direct-internal.h>
+#include <Elementary.h>
+#include <appcore-efl.h>
+
#define MAX_STRING_LEN 2048
#define SINKTEST_EXECUTE_DELAY 5000
#define MAIN_MENU 0
#define SUBMENU_RESOLUTION 1
#define SUBMENU_GETTING_STREAM_INFO 2
+#define SUBMENU_SETTING_SINK 3
#define TEST_WITH_WIFI_DIRECT
+#define PACKAGE "screen_mirroring_sink_test"
+static int app_create(void *data);
+static int app_terminate(void *data);
+static Evas_Object* _create_win(const char *name);
+static Evas_Object *create_evas_image_object(Evas_Object *eo_parent);
+static void _win_del(void *data, Evas_Object *obj, void *event);
+static gboolean _scmirroring_start_jobs(gpointer data);
+
+struct appcore_ops ops = {
+ .create = app_create,
+ .terminate = app_terminate,
+};
+static Evas_Object* g_evas;
+static Evas_Object* g_eo = NULL;
+
scmirroring_sink_h g_scmirroring = NULL;
gint g_resolution = 0;
+gint g_sinktype = -1;
+
gint g_menu = MAIN_MENU;
-GMainLoop *g_loop;
#ifdef TEST_WITH_WIFI_DIRECT
static int g_peer_cnt = 0;
static char g_peer_ip[32];
gboolean __timeout_stream_info_submenu_display(void *data);
static void __interpret_stream_info_submenu(char *cmd);
+/* Submenu for setting sink type */
+gboolean __timeout_sink_submenu_display(void *data);
+static void __display_sink_submenu(void);
+static void __interpret_sink_submenu(char *cmd);
+
+static void _win_del(void *data, Evas_Object *obj, void *event)
+{
+ elm_exit();
+}
+
+
+static Evas_Object* _create_win(const char *name)
+{
+ Evas_Object *eo = NULL;
+
+ g_printf ("[%s][%d] name=%s\n", __func__, __LINE__, name);
+
+ eo = elm_win_add(NULL, name, ELM_WIN_BASIC);
+ if (eo)
+ {
+ elm_win_title_set(eo, name);
+ elm_win_borderless_set(eo, EINA_TRUE);
+ evas_object_smart_callback_add(eo, "delete,request",_win_del, NULL);
+ elm_win_autodel_set(eo, EINA_TRUE);
+ }
+ return eo;
+}
+
+static Evas_Object *create_evas_image_object(Evas_Object *eo_parent)
+{
+ if(!eo_parent) {
+ return NULL;
+ }
+ Evas *evas = evas_object_evas_get(eo_parent);
+ Evas_Object *eo = NULL;
+
+ eo = evas_object_image_add(evas);
+
+ return eo;
+}
+
+static int app_create(void *data)
+{
+
+ gboolean result = FALSE;
+
+ g_print("app_create enter");
+
+ Evas_Object *win = NULL;
+ /* create window */
+ win = _create_win(PACKAGE);
+ if (win == NULL)
+ return -1;
+ g_evas = win;
+
+ elm_win_activate(win);
+ evas_object_show(win);
+
+ result = _scmirroring_start_jobs((void *)NULL);
+ if(result != TRUE){
+ g_print("failed _scmirroring_start_jobs ");
+ }
+
+ g_print("app_create leave");
+
+ return result;
+
+}
+static int app_terminate(void *data)
+{
+
+ if (g_evas) {
+ evas_object_del(g_evas);
+ g_evas = NULL;
+ }
+ return 0;
+}
+
+gboolean __timeout_sink_submenu_display(void *data)
+{
+ __display_sink_submenu();
+ return FALSE;
+}
+
+static void __display_sink_submenu(void)
+{
+ g_print("\n");
+ g_print("**********************************************************************\n");
+ g_print(" Setting sink \n");
+ g_print("**********************************************************************\n");
+ g_print("1 : SCMIRRORING_DISPLAY_TYPE_OVERLAY with No Surface(DEFAULT)\n" );
+ g_print("2 : SCMIRRORING_DISPLAY_TYPE_OVERLAY with Surface\n" );
+ g_print("3 : SCMIRRORING_DISPLAY_TYPE_EVAS\n");
+ g_print("g : Go back to main menu \n");
+ g_print("**********************************************************************\n");
+
+}
+
+static void __interpret_sink_submenu(char *cmd)
+{
+ if (strncmp(cmd, "1", 1) == 0) {
+ g_print("SCMIRRORING_DISPLAY_TYPE_OVERLAY with No Surface\n");
+ g_sinktype = -1;
+ } else if (strncmp(cmd, "2", 1) == 0) {
+ g_print("SCMIRRORING_DISPLAY_TYPE_OVERLAY with Surface\n");
+ g_sinktype = SCMIRRORING_DISPLAY_TYPE_OVERLAY;
+ } else if (strncmp(cmd, "3", 1) == 0) {
+ g_print("SCMIRRORING_DISPLAY_TYPE_EVAS\n");
+ g_sinktype = SCMIRRORING_DISPLAY_TYPE_EVAS;
+ } else if (strncmp(cmd, "g", 1) == 0) {
+ g_print("go back to main menu\n");
+ g_menu = MAIN_MENU;
+ g_timeout_add(100, __timeout_menu_display, 0);
+ return;
+ }
+
+ g_print("sink type : %d\n", g_sinktype);
+ g_timeout_add(100, __timeout_sink_submenu_display, 0);
+ return;
+}
+
gboolean __timeout_resolution_submenu_display(void *data)
{
__display_resolution_submenu();
__disconnect_p2p_connection();
#endif
g_scmirroring = 0;
- g_main_loop_quit(g_loop);
+ elm_exit();
}
static void __displaymenu(void)
g_print("T : desTroy\n");
g_print("L : Setting resolution\n");
g_print("G : Getting negotiated audio and video information\n");
+ g_print("S : setting Sink\n");
g_print("q : quit\n");
g_print("-----------------------------------------------------------------------------------------\n");
}
g_print("wifi_direct_deinitialize is failed\n");
g_scmirroring = 0;
- g_main_loop_quit(g_loop);
+ elm_exit();
}
break;
case WIFI_DIRECT_DEVICE_STATE_DEACTIVATED:
ret = scmirroring_sink_destroy(g_scmirroring);
} else if (strncmp(cmd, "q", 1) == 0) {
__quit_program();
+ } else if (strncmp(cmd, "S", 1) == 0) {
+ g_menu = SUBMENU_SETTING_SINK;
+ g_timeout_add(100, __timeout_sink_submenu_display, 0);
+ return;
} else if (strncmp(cmd, "L", 1) == 0) {
g_menu = SUBMENU_RESOLUTION;
g_timeout_add(100, __timeout_resolution_submenu_display, 0);
__interpret_resolution_submenu(buf);
else if (g_menu == SUBMENU_GETTING_STREAM_INFO)
__interpret_stream_info_submenu(buf);
+ else if (g_menu == SUBMENU_SETTING_SINK)
+ __interpret_sink_submenu(buf);
return TRUE;
}
ret = scmirroring_sink_create(&g_scmirroring);
if (ret != SCMIRRORING_ERROR_NONE) {
g_print("scmirroring_sink_create fail [%d]", ret);
- return SCMIRRORING_ERROR_OUT_OF_MEMORY;
+ return SCMIRRORING_ERROR_INVALID_OPERATION;
}
ret = scmirroring_sink_prepare(g_scmirroring);
if (ret != SCMIRRORING_ERROR_NONE) {
g_print("scmirroring_sink_prepare fail [%d]", ret);
- return SCMIRRORING_ERROR_OUT_OF_MEMORY;
+ return SCMIRRORING_ERROR_INVALID_OPERATION;
}
return ret;
}
}
}
+ if(g_sinktype != -1) {
+
+
+ if(g_sinktype == SCMIRRORING_DISPLAY_TYPE_OVERLAY) {
+ evas_object_show(g_evas);
+ ret = scmirroring_sink_set_display(g_scmirroring, SCMIRRORING_DISPLAY_TYPE_OVERLAY, (void *)g_evas);
+ } else if(g_sinktype == SCMIRRORING_DISPLAY_TYPE_EVAS) {
+ g_eo = create_evas_image_object(g_evas);
+
+ evas_object_image_size_set(g_eo, 800, 1200);
+ evas_object_image_fill_set(g_eo, 0, 0, 800, 1200);
+ evas_object_resize(g_eo, 800, 1200);
+ evas_object_show(g_evas);
+ ret = scmirroring_sink_set_display(g_scmirroring, SCMIRRORING_DISPLAY_TYPE_EVAS, (void *)g_eo);
+ }
+
+ if (ret != SCMIRRORING_ERROR_NONE) {
+ g_print("scmirroring_sink_set_display fail [%d]", ret);
+ return SCMIRRORING_ERROR_INVALID_OPERATION;
+ }
+
+ }
+
ret = scmirroring_sink_prepare(g_scmirroring);
if (ret != SCMIRRORING_ERROR_NONE) {
g_print("scmirroring_sink_prepare fail [%d]", ret);
return FALSE;
}
-#if 0
- ret = scmirroring_sink_set_display(g_scmirroring, SCMIRRORING_DISPLAY_TYPE_X11, NULL);
- if (ret != SCMIRRORING_ERROR_NONE) {
- g_print("scmirroring_sink_set_display fail [%d]", ret);
- return FALSE;
- }
-#endif
return FALSE;
}
return FALSE;
#endif
- return FALSE;
+ return TRUE;
}
int main(int argc, char *argv[])
{
GIOChannel *stdin_channel;
- GMainContext *context = NULL;
- GSource *start_job_src = NULL;
+
stdin_channel = g_io_channel_unix_new(0);
g_io_channel_set_flags(stdin_channel, G_IO_FLAG_NONBLOCK, NULL);
__displaymenu();
- g_loop = g_main_loop_new(NULL, FALSE);
- context = g_main_loop_get_context(g_loop);
-
- start_job_src = g_idle_source_new();
- g_source_set_callback(start_job_src, _scmirroring_start_jobs, NULL, NULL);
- g_source_attach(start_job_src, context);
-
- g_main_loop_run(g_loop);
+ ops.data = NULL;
+ appcore_efl_main(PACKAGE, &argc, &argv, &ops);
g_print("Exit Program");