Tizen 2.4 SDK Rev6 Release accepted/tizen_2.4_mobile tizen_2.4 accepted/tizen/2.4/mobile/20160530.220309 submit/tizen_2.4/20160530.023134
authorJaekyu Park <jk7744.park@samsung.com>
Fri, 27 May 2016 07:53:46 +0000 (16:53 +0900)
committerJaekyu Park <jk7744.park@samsung.com>
Fri, 27 May 2016 07:53:46 +0000 (16:53 +0900)
include/scmirroring_sink.h
packaging/capi-media-screen-mirroring.spec
test_sink/CMakeLists.txt
test_sink/scmirroring_sink_test.c

index bb26a6e..78c67e8 100755 (executable)
@@ -36,8 +36,6 @@ extern "C" {
 /**
  * @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().
  *
@@ -48,7 +46,6 @@ extern "C" {
  * @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
  *
@@ -163,8 +160,6 @@ int scmirroring_sink_set_resolution(scmirroring_sink_h scmirroring_sink, int res
 /**
  * @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,
@@ -173,7 +168,6 @@ int scmirroring_sink_set_resolution(scmirroring_sink_h scmirroring_sink, int res
  * @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
  *
@@ -341,8 +335,6 @@ int scmirroring_sink_disconnect(scmirroring_sink_h scmirroring_sink);
  * @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,
@@ -351,7 +343,6 @@ int scmirroring_sink_disconnect(scmirroring_sink_h scmirroring_sink);
  * @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
  *
@@ -416,8 +407,6 @@ int scmirroring_sink_destroy(scmirroring_sink_h scmirroring_sink);
  * @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
@@ -426,7 +415,6 @@ int scmirroring_sink_destroy(scmirroring_sink_h scmirroring_sink);
  * @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
  *
@@ -443,8 +431,6 @@ int scmirroring_sink_get_negotiated_video_codec(scmirroring_sink_h *scmirroring_
  * @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
@@ -454,7 +440,6 @@ int scmirroring_sink_get_negotiated_video_codec(scmirroring_sink_h *scmirroring_
  * @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
  *
@@ -471,8 +456,6 @@ int scmirroring_sink_get_negotiated_video_resolution(scmirroring_sink_h *scmirro
  * @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
@@ -481,7 +464,6 @@ int scmirroring_sink_get_negotiated_video_resolution(scmirroring_sink_h *scmirro
  * @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
  *
@@ -498,8 +480,6 @@ int scmirroring_sink_get_negotiated_video_frame_rate(scmirroring_sink_h *scmirro
  * @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
@@ -508,7 +488,6 @@ int scmirroring_sink_get_negotiated_video_frame_rate(scmirroring_sink_h *scmirro
  * @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
  *
@@ -525,8 +504,6 @@ int scmirroring_sink_get_negotiated_audio_codec(scmirroring_sink_h *scmirroring_
  * @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
@@ -535,7 +512,6 @@ int scmirroring_sink_get_negotiated_audio_codec(scmirroring_sink_h *scmirroring_
  * @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
  *
@@ -552,8 +528,6 @@ int scmirroring_sink_get_negotiated_audio_channel(scmirroring_sink_h *scmirrorin
  * @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
@@ -562,7 +536,6 @@ int scmirroring_sink_get_negotiated_audio_channel(scmirroring_sink_h *scmirrorin
  * @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
  *
@@ -579,8 +552,6 @@ int scmirroring_sink_get_negotiated_audio_sample_rate(scmirroring_sink_h *scmirr
  * @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
@@ -589,7 +560,6 @@ int scmirroring_sink_get_negotiated_audio_sample_rate(scmirroring_sink_h *scmirr
  * @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
  *
index d54be62..ebf1f2a 100755 (executable)
@@ -1,6 +1,6 @@
 Name:       capi-media-screen-mirroring
 Summary:    A screen mirroring library in Tizen C API
-Version:    0.1.43
+Version:    0.1.44
 Release:    0
 Group:      Multimedia/API
 License:    Apache-2.0
@@ -16,6 +16,10 @@ BuildRequires:  pkgconfig(gstreamer-rtsp-server-1.0)
 BuildRequires:  pkgconfig(capi-network-wifi-direct)
 BuildRequires:  pkgconfig(mm-wfd)
 BuildRequires:  pkgconfig(iniparser)
+BuildRequires:  pkgconfig(appcore-efl)
+BuildRequires:  pkgconfig(elementary)
+BuildRequires:  pkgconfig(evas)
+
 
 Requires(post): /sbin/ldconfig
 Requires(postun): /sbin/ldconfig
index 6235c32..6e3bc94 100755 (executable)
@@ -2,7 +2,7 @@ SET(fw_name "capi-media-screen-mirroring")
 SET(fw_test "${fw_name}-test-sink")
 
 INCLUDE(FindPkgConfig)
-pkg_check_modules(${fw_test} REQUIRED glib-2.0 dlog capi-base-common mm-wfd capi-network-wifi-direct)
+pkg_check_modules(${fw_test} REQUIRED glib-2.0 dlog capi-base-common mm-wfd capi-network-wifi-direct elementary evas appcore-efl)
 FOREACH(flag ${${fw_test}_CFLAGS})
     SET(EXTRA_CFLAGS "${EXTRA_CFLAGS} ${flag}")
 ENDFOREACH(flag)
index 11ec607..5a73123 100755 (executable)
 #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];
@@ -64,6 +84,127 @@ static void __display_stream_info_submenu(void);
 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();
@@ -296,7 +437,7 @@ static void __quit_program(void)
        __disconnect_p2p_connection();
 #endif
        g_scmirroring = 0;
-       g_main_loop_quit(g_loop);
+       elm_exit();
 }
 
 static void __displaymenu(void)
@@ -315,6 +456,7 @@ 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");
 }
@@ -373,7 +515,7 @@ void _activation_cb(int error_code, wifi_direct_device_state_e device_state, voi
                                        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:
@@ -487,6 +629,10 @@ static void __interpret(char *cmd)
                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);
@@ -537,6 +683,8 @@ gboolean __input(GIOChannel *channel)
                __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;
 }
@@ -742,13 +890,13 @@ static int __scmirroring_sink_create(gpointer data)
        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;
 }
@@ -772,6 +920,29 @@ gboolean __scmirroring_sink_start(gpointer data)
                }
        }
 
+       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);
@@ -797,13 +968,6 @@ gboolean __scmirroring_sink_start(gpointer data)
                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;
 }
 
@@ -817,14 +981,13 @@ gboolean _scmirroring_start_jobs(gpointer data)
                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);
@@ -832,14 +995,8 @@ int main(int argc, char *argv[])
 
        __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");