Name: libmm-wfd
Summary: Multimedia Framework Wifi-Display Library
-Version: 0.4.8
+Version: 0.4.9
Release: 0
Group: System/Libraries
License: Apache-2.0
MMWFDUIBCMouse *uibc_object;
} MMWFDUIBCMouseEvent;
+typedef enum {
+ MM_WFD_DISPLAY_ORIENTATION_NONE = 0,
+ MM_WFD_DISPLAY_ORIENTATION_PORTRAIT_DISPLAY,
+ MM_WFD_DISPLAY_ORIENTATION_PORTRAIT,
+ MM_WFD_DISPLAY_ORIENTATION_LANDSCAPE
+} MMWFDDisplayOrientation;
+
+typedef enum {
+ MM_WFD_UIBC_INPUT_TYPE_UNKNOWN = 0,
+ MM_WFD_UIBC_INPUT_TYPE_KEYBOARD = (1 << 0),
+ MM_WFD_UIBC_INPUT_TYPE_MOUSE = (1 << 1),
+ MM_WFD_UIBC_INPUT_TYPE_SINGLETOUCH = (1 << 2),
+ MM_WFD_UIBC_INPUT_TYPE_MULTITOUCH = (1 << 3),
+ MM_WFD_UIBC_INPUT_TYPE_JOYSTICK = (1 << 4),
+ MM_WFD_UIBC_INPUT_TYPE_CAMERA = (1 << 5),
+ MM_WFD_UIBC_INPUT_TYPE_GESTURE = (1 << 6),
+ MM_WFD_UIBC_INPUT_TYPE_REMOTECONTROL = (1 << 7)
+} MMWFDUibcInputType;
+
+typedef enum {
+ MM_WFD_UIBC_INPUT_PATH_UNKNOWN = 0,
+ MM_WFD_UIBC_INPUT_PATH_INFRARED = (1 << 0),
+ MM_WFD_UIBC_INPUT_PATH_USB = (1 << 1),
+ MM_WFD_UIBC_INPUT_PATH_BT = (1 << 2),
+ MM_WFD_UIBC_INPUT_PATH_ZIGBEE = (1 << 3),
+ MM_WFD_UIBC_INPUT_PATH_WIFI = (1 << 4),
+ MM_WFD_UIBC_INPUT_PATH_NOSP = (1 << 5)
+} MMWFDUibcInputPath;
+
+typedef struct {
+ MMWFDUibcInputType input_type;
+ MMWFDUibcInputPath input_path;
+} MMWFDUibcInput;
+
+typedef struct {
+ char *ip;
+ guint32 port;
+ guint32 gen_capability;
+ gint32 width;
+ gint32 height;
+ MMWFDUibcInput *hidc_caps_list;
+ guint32 hidc_caps_count;
+} MMWFDUibcInfo;
+
typedef void(*MMWFDMessageCallback)(int error_type, MMWFDSinkStateType state_type, void *user_data);
+typedef void(*MMWFDSrcDisplayOrientationNotifyCallback)(MMWFDDisplayOrientation orientation, void *user_data);
+typedef void(*MMWFDUibcInfoReceivedCallback)(int error_type, MMWFDUibcInfo *uibc_info, void *user_data);
/**
* This function creates a wi-fi display sink object. \n
*/
int mm_wfd_sink_set_message_callback(MMHandleType wfd_sink_handle, MMWFDMessageCallback callback, void *user_param);
+/**
+ * This function sets callback function for receiving display orientation of source from wi-fi display sink. \n
+ * So, wi-fi display sink can notify display orientation of source to application. \n
+ *
+ * @param wfd_sink_handle [in] Handle of wi-fi display sink
+ * @param callback [in] Source display orientation callback function.
+ * @param user_param [in] User parameter which is passed to callback function.
+ *
+ * @return This function returns zero on success, or negative value with error code.
+ * @see MMWFDSrcDisplayOrientationNotifyCallback
+ */
+int mm_wfd_sink_set_src_display_orientation_notify_callback(MMHandleType wfd_sink_handle, MMWFDSrcDisplayOrientationNotifyCallback callback, void *user_data);
+
+/**
+ * This function sets callback function for receiving UIBC information from wi-fi display sink. \n
+ * So, wi-fi display sink can notify UIBC information to application. \n
+ *
+ * @param wfd_sink_handle [in] Handle of wi-fi display sink
+ * @param callback [in] UIBC info callback function.
+ * @param user_param [in] User parameter which is passed to callback function.
+ *
+ * @return This function returns zero on success, or negative value with error code.
+ * @see MMWFDUibcInfoReceivedCallback
+ */
+int mm_wfd_sink_set_uibc_info_received_callback(MMHandleType wfd_sink_handle, MMWFDUibcInfoReceivedCallback callback, void *user_data);
+
/**
* This function is to set attributes into screen mirroring sink handle. Multiple attributes can be set simultaneously. \n
* If one of attribute fails, this function will stop at the point and let you know the name which is failed. \n
MMWFDMessageCallback msg_cb;
void *msg_user_data;
+ /* Source display orientation handling */
+ MMWFDSrcDisplayOrientationNotifyCallback src_display_orientation_notify_cb;
+ void *src_display_orientation_notify_user_data;
+
+ /* UIBC information handling */
+ MMWFDUibcInfoReceivedCallback uibc_info_received_cb;
+ void *uibc_info_received_user_data;
+
/* video resolution for negotiation */
MMWFDSinkResolution supportive_resolution;
int _mm_wfd_sink_pause(mm_wfd_sink_t *wfd_sink);
int _mm_wfd_sink_resume(mm_wfd_sink_t *wfd_sink);
int _mm_wfd_set_message_callback(mm_wfd_sink_t *wfd_sink, MMWFDMessageCallback callback, void *user_data);
+int _mm_wfd_set_src_display_orientation_notify_callback(mm_wfd_sink_t *wfd_sink, MMWFDSrcDisplayOrientationNotifyCallback callback, void *user_data);
+int _mm_wfd_set_uibc_info_received_callback(mm_wfd_sink_t *wfd_sink, MMWFDUibcInfoReceivedCallback callback, void *user_data);
int _mm_wfd_sink_set_resolution(mm_wfd_sink_t *wfd_sink, MMWFDSinkResolution resolution);
int _mm_wfd_sink_update_video_param(mm_wfd_sink_t *wfd_sink, const char *param_name);
int _mm_wfd_sink_set_src_device_type(mm_wfd_sink_t *wfd_sink, MMWFDSinkDeviceType device_type);
x_wfd_sink->msg_cb(x_error_type, x_state_type, x_wfd_sink->msg_user_data); \
}
+/* posting display orientation */
+#define MMWFDSINK_POST_DISPLAY_ORIENTATION(x_wfd_sink, x_display_orientation_type) \
+ if (x_wfd_sink->src_display_orientation_notify_cb) { \
+ wfd_sink_debug("display_orientation[%d] will be posted using user callback\n", x_display_orientation_type); \
+ x_wfd_sink->src_display_orientation_notify_cb(x_display_orientation_type, x_wfd_sink->src_display_orientation_notify_user_data); \
+ }
+
/* state */
#define MMWFDSINK_CURRENT_STATE(x_wfd_sink) ((mm_wfd_sink_t *)x_wfd_sink)->state.state
return result;
}
+int mm_wfd_sink_set_src_display_orientation_notify_callback(MMHandleType wfd_sink_handle, MMWFDSrcDisplayOrientationNotifyCallback callback, void *user_data)
+{
+ mm_wfd_sink_t *wfd_sink = (mm_wfd_sink_t *)wfd_sink_handle;
+ int result = MM_ERROR_NONE;
+
+ wfd_sink_return_val_if_fail(wfd_sink, MM_ERROR_WFD_NOT_INITIALIZED);
+
+ MMWFDSINK_CMD_LOCK(wfd_sink);
+ result = _mm_wfd_set_src_display_orientation_notify_callback(wfd_sink, callback, user_data);
+ MMWFDSINK_CMD_UNLOCK(wfd_sink);
+
+ return result;
+}
+
+int mm_wfd_sink_set_uibc_info_received_callback(MMHandleType wfd_sink_handle, MMWFDUibcInfoReceivedCallback callback, void *user_data)
+{
+ mm_wfd_sink_t *wfd_sink = (mm_wfd_sink_t *)wfd_sink_handle;
+ int result = MM_ERROR_NONE;
+
+ wfd_sink_return_val_if_fail(wfd_sink, MM_ERROR_WFD_NOT_INITIALIZED);
+
+ MMWFDSINK_CMD_LOCK(wfd_sink);
+ result = _mm_wfd_set_uibc_info_received_callback(wfd_sink, callback, user_data);
+ MMWFDSINK_CMD_UNLOCK(wfd_sink);
+
+ return result;
+}
+
int mm_wfd_sink_set_attribute(MMHandleType wfd_sink_handle, char **err_attr_name, const char *first_attribute_name, ...)
{
mm_wfd_sink_t *wfd_sink = (mm_wfd_sink_t *)wfd_sink_handle;
return result;
}
+int _mm_wfd_set_src_display_orientation_notify_callback(mm_wfd_sink_t *wfd_sink, MMWFDSrcDisplayOrientationNotifyCallback callback, void *user_data)
+{
+ wfd_sink_debug_fenter();
+
+ wfd_sink_return_val_if_fail(wfd_sink, MM_ERROR_WFD_NOT_INITIALIZED);
+
+ wfd_sink->src_display_orientation_notify_cb = callback;
+ wfd_sink->src_display_orientation_notify_user_data = user_data;
+
+ wfd_sink_debug_fleave();
+
+ return MM_ERROR_NONE;
+}
+
+int _mm_wfd_set_uibc_info_received_callback(mm_wfd_sink_t *wfd_sink, MMWFDUibcInfoReceivedCallback callback, void *user_data)
+{
+ wfd_sink_debug_fenter();
+
+ wfd_sink_return_val_if_fail(wfd_sink, MM_ERROR_WFD_NOT_INITIALIZED);
+
+ wfd_sink->uibc_info_received_cb = callback;
+ wfd_sink->uibc_info_received_user_data = user_data;
+
+ wfd_sink_debug_fleave();
+
+ return MM_ERROR_NONE;
+}
+
static int __mm_wfd_sink_init_gstreamer(mm_wfd_sink_t *wfd_sink)
{
int result = MM_ERROR_NONE;
break;
wfd_sink_debug("message name : %s", GST_STR_NULL(message_structure_name));
+ if(g_strrstr(message_structure_name, "WFD_PORTRAIT_DISPLAY")) {
+ MMWFDSINK_POST_DISPLAY_ORIENTATION(wfd_sink,
+ MM_WFD_DISPLAY_ORIENTATION_PORTRAIT_DISPLAY);
+ }
+ else if(g_strrstr(message_structure_name, "WFD_PORTRAIT")) {
+ MMWFDSINK_POST_DISPLAY_ORIENTATION(wfd_sink,
+ MM_WFD_DISPLAY_ORIENTATION_PORTRAIT);
+ }
+ else if(g_strrstr(message_structure_name, "WFD_LANDSCAPE")) {
+ MMWFDSINK_POST_DISPLAY_ORIENTATION(wfd_sink,
+ MM_WFD_DISPLAY_ORIENTATION_LANDSCAPE);
+ }
}
break;