typedef void(*MMWFDMessageCallback)(int error_type, MMWFDSinkStateType state_type, void *user_data);
+
/**
* This function creates a wi-fi display sink object. \n
* The attributes of wi-fi display sink are created to get/set some values with application. \n
wfd_sink_error("failed to create wi-fi display sink\n");
}
-mm_wfd_sink_set_message_callback(g_wfd_sink, msg_callback, (void*)g_wfd_sink);
+mm_wfd_sink_set_message_callback(g_wfd_sink_handle, msg_callback, (void*)g_wfd_sink_handle);
* @endcode
*/
int mm_wfd_sink_create(MMHandleType *wfd_sink);
* @remark None
* @par Example
* @code
-if (mm_wfd_sink_prepare(&g_wfd_sink) != MM_ERROR_NONE)
+if (mm_wfd_sink_prepare(&g_wfd_sink_handle) != MM_ERROR_NONE)
{
wfd_sink_error("failed to realize wi-fi display sink\n");
}
* @endcode
*/
-int mm_wfd_sink_prepare(MMHandleType wfd_sink);
+int mm_wfd_sink_prepare(MMHandleType wfd_sink_handle);
/**
* This function connect wi-fi display source using uri. \n
* audio type(AC3 AAC, LPCM) is decided at this time. \n
*
- * @param wfd_sink [in] Handle of wi-fi display sink
+ * @param wfd_sink_handle [in] Handle of wi-fi display sink
* @param uri [in] URI of wi-fi displaysource to be connected
*
* @return This function returns zero on success, or negative value with error code.
* @remark None
* @par Example
* @code
-if (mm_wfd_sink_connect(g_wfd_sink, g_uri) != MM_ERROR_NONE)
+if (mm_wfd_sink_connect(g_wfd_sink_handle, g_uri) != MM_ERROR_NONE)
{
wfd_sink_error("failed to connect to wi-fi display source\n");
}
* @endcode
*/
-int mm_wfd_sink_connect(MMHandleType wfd_sink, const char *uri);
+int mm_wfd_sink_connect(MMHandleType wfd_sink_handle, const char *uri);
/**
* This function is to start playing. \n
* Data from wi-fi display source will be received. \n
*
- * @param wfd_sink [in] Handle of wi-fi display sink
+ * @param wfd_sink_handle [in] Handle of wi-fi display sink
*
* @return This function returns zero on success, or negative value with error code.
* @remark
* @remark None
* @par Example
* @code
-if (mm_wfd_sink_start(g_wfd_sink) != MM_ERROR_NONE)
+if (mm_wfd_sink_start(g_wfd_sink_handle) != MM_ERROR_NONE)
{
wfd_sink_error("failed to start wi-fi display sink\n");
}
* @endcode
*/
-int mm_wfd_sink_start(MMHandleType wfd_sink);
+int mm_wfd_sink_start(MMHandleType wfd_sink_handle);
/**
* This function is to pause playing. \n
* The wi-fi display sink pause the current stream being received form wi-fi display source. \n
*
- * @param wfd_sink [in] Handle of wi-fi display sink
+ * @param wfd_sink_handle [in] Handle of wi-fi display sink
*
* @return This function returns zero on success, or negative value with error code.
* @remark
* @remark None
* @par Example
* @code
-if (mm_wfd_sink_pause(g_wfd_sink) != MM_ERROR_NONE)
+if (mm_wfd_sink_pause(g_wfd_sink_handle) != MM_ERROR_NONE)
{
wfd_sink_error("failed to pause wi-fi display sink\n");
}
* @endcode
*/
-int mm_wfd_sink_pause(MMHandleType wfd_sink);
+int mm_wfd_sink_pause(MMHandleType wfd_sink_handle);
/**
* This function is to resume playing. \n
* Data from wi-fi display source will be received. \n
*
- * @param wfd_sink [in] Handle of wi-fi display sink
+ * @param wfd_sink_handle [in] Handle of wi-fi display sink
*
* @return This function returns zero on success, or negative value with error code.
* @remark
* @remark None
* @par Example
* @code
-if (mm_wfd_sink_start(g_wfd_sink) != MM_ERROR_NONE)
+if (mm_wfd_sink_start(g_wfd_sink_handle) != MM_ERROR_NONE)
{
wfd_sink_error("failed to resume wi-fi display sink\n");
}
* @endcode
*/
-int mm_wfd_sink_resume(MMHandleType wfd_sink);
+int mm_wfd_sink_resume(MMHandleType wfd_sink_handle);
/**
* This function is to stop playing wi-fi display. \n
*
- * @param wfd_sink [in] Handle of wi-fi display sink
+ * @param wfd_sink_handle [in] Handle of wi-fi display sink
*
* @return This function returns zero on success, or negative value with error code.
*
* @remark None
* @par Example
* @code
-if (mm_wfd_sink_disconnect(g_wfd_sink) != MM_ERROR_NONE)
+if (mm_wfd_sink_disconnect(g_wfd_sink_handle) != MM_ERROR_NONE)
{
wfd_sink_error("failed to stop wi-fi display sink\n");
}
* @endcode
*/
-int mm_wfd_sink_disconnect(MMHandleType wfd_sink);
+int mm_wfd_sink_disconnect(MMHandleType wfd_sink_handle);
/**
* This function trys to destroy gstreamer pipeline. \n
*
- * @param wfd_sink [out] Handle of wi-fi display sink
+ * @param wfd_sink_handle [out] Handle of wi-fi display sink
*
* @return This function returns zero on success, or negative value with error code. \n
* Please refer 'mm_error.h' to know it in detail.
* @remark None
* @par Example
* @code
-if (mm_wfd_sink_unprepare(&g_wfd_sink) != MM_ERROR_NONE)
+if (mm_wfd_sink_unprepare(&g_wfd_sink_handle) != MM_ERROR_NONE)
{
wfd_sink_error("failed to unprepare wi-fi display sink\n");
}
* @endcode
*/
-int mm_wfd_sink_unprepare(MMHandleType wfd_sink);
+int mm_wfd_sink_unprepare(MMHandleType wfd_sink_handle);
/**
* This function releases wi-fi display sink object and all resources which were created by mm_wfd_sink_create(). \n
* And, wi-fi display sink handle will also be destroyed. \n
*
- * @param wfd_sink [in] Handle of wi-fi display sink
+ * @param wfd_sink_handle [in] Handle of wi-fi display sink
*
* @return This function returns zero on success, or negative value with error code.
* @pre wi-fi display state may be MM_WFD_SINK_STATE_NULL. \n
*
* @par Example
* @code
-if (mm_wfd_sink_destroy(g_wfd_sink) != MM_ERROR_NONE)
+if (mm_wfd_sink_destroy(g_wfd_sink_handle) != MM_ERROR_NONE)
{
wfd_sink_error("failed to destroy wi-fi display sink\n");
}
* @endcode
*/
-int mm_wfd_sink_destroy(MMHandleType wfd_sink);
+int mm_wfd_sink_destroy(MMHandleType wfd_sink_handle);
/**
* This function sets callback function for receiving messages from wi-fi display sink. \n
* So, player can notify warning, error and normal cases to application. \n
*
- * @param wfd_sink [in] Handle of wi-fi display sink
+ * @param wfd_sink_handle [in] Handle of wi-fi display sink
* @param callback [in] Message callback function.
* @param user_param [in] User parameter which is passed to callback function.
*
return TRUE;
}
-mm_wfd_sink_set_message_callback(g_wfd_sink, msg_callback, (void*)g_wfd_sink);
+mm_wfd_sink_set_message_callback(g_wfd_sink_handle, msg_callback, (void*)g_wfd_sink_handle);
* @endcode
*/
-int mm_wfd_sink_set_message_callback(MMHandleType wfd_sink, MMWFDMessageCallback callback, void *user_param);
+int mm_wfd_sink_set_message_callback(MMHandleType wfd_sink_handle, MMWFDMessageCallback callback, void *user_param);
-int mm_wfd_sink_set_attribute(MMHandleType wfd_sink, char **err_attr_name, const char *first_attribute_name, ...);
+int mm_wfd_sink_set_attribute(MMHandleType wfd_sink_handle, char **err_attr_name, const char *first_attribute_name, ...);
/**
- * This function get resources \n
+ * This function gets the width and height of video which is played by wi-fi display sink\n
*
- * @param wfd_sink [in] Handle of wi-fi display sink
+ * @param wfd_sink_handle [in] Handle of wi-fi display sink
+ * @param width [in] Width of video
+ * @param height [in] Height of video
*
* @return This function returns zero on success, or negative value with error code.
- * @pre wi-fi display state should be MM_WFD_SINK_STATE_READY or MM_WFD_SINK_STATE_PREPARED. \n
- * @post N/A
- * @remark resources are released when mm_wfd_sink_destory is called
+ * @pre wi-fi display state should be MM_WFD_SINK_STATE_CONNECTED or MM_WFD_SINK_STATE_PLAYING. \n
*
* @par Example
* @code
-if (mm_wfd_sink_get_resource(g_wfd_sink) != MM_ERROR_NONE)
+gint g_width=0, g_height=0;
+
+if (mm_wfd_sink_get_video_resolution(g_wfd_sink_handle, &g_width, &g_height) != MM_ERROR_NONE)
{
- wfd_sink_error("failed to get resources for wi-fi display sink\n");
+ wfd_sink_error("failed to get video resolution.\n");
}
* @endcode
*/
-int mm_wfd_sink_get_resource(MMHandleType wfd_sink);
+int mm_wfd_sink_get_video_resolution(MMHandleType wfd_sink_handle, gint *width, gint *height);
/**
- * This function sets the display surface type for wi-fi display sink\n
+ * This function gets the width and height of video which is played by wi-fi display sink\n
*
- * @param wfd_sink [in] Handle of wi-fi display sink
- * @param display_surface_type [in] Display surface type
+ * @param wfd_sink_handle [in] Handle of wi-fi display sink
+ * @param framerate [in] Framerate of video
*
* @return This function returns zero on success, or negative value with error code.
- * @pre wi-fi display state should be MM_WFD_SINK_STATE_NULL. \n
+ * @pre wi-fi display state should be MM_WFD_SINK_STATE_CONNECTED or MM_WFD_SINK_STATE_PLAYING. \n
*
* @par Example
* @code
-if (mm_wfd_sink_set_display_surface_type(g_wfd_sink, g_display_surface_type) != MM_ERROR_NONE)
+gint g_framerate=0;
+
+if (mm_wfd_sink_get_video_framerate(g_wfd_sink_handle, &g_framerate) != MM_ERROR_NONE)
{
- wfd_sink_error("failed to set display surface type for wi-fi display sink\n");
+ wfd_sink_error("failed to get video framerate.\n");
}
* @endcode
*/
-int mm_wfd_sink_set_display_surface_type(MMHandleType wfd_sink, gint display_surface_type);
+int mm_wfd_sink_get_video_framerate(MMHandleType wfd_sink_handle, gint *framerate);
/**
- * This function sets the display overlay for wi-fi display sink\n
+ * This function sets the resolutions for wi-fi display sink\n
*
- * @param wfd_sink [in] Handle of wi-fi display sink
- * @param display_overlay [in] Display overlay
+ * @param wfd_sink_handle [in] Handle of wi-fi display sink
+ * @param resolution [in] Resolutions for wi-fi display sink
*
* @return This function returns zero on success, or negative value with error code.
* @pre wi-fi display state should be MM_WFD_SINK_STATE_NULL. \n
*
- * @par Example
- * @code
-if (mm_wfd_sink_set_display_overlay(g_wfd_sink, g_display_overlay) != MM_ERROR_NONE)
-{
- wfd_sink_error("failed to set display overlay for wi-fi display sink\n");
-}
- * @endcode
*/
-int mm_wfd_sink_set_display_overlay(MMHandleType wfd_sink, void *display_overlay);
+int mm_wfd_sink_set_resolution(MMHandleType wfd_sink_handle, gint resolution);
/**
- * This function sets the display method for wi-fi display sink\n
+ * This function gets the negotiated video codec for wi-fi display sink\n
*
- * @param wfd_sink [in] Handle of wi-fi display sink
- * @param display_method [in] Display method
+ * @param wfd_sink_handle [in] Handle of wi-fi display sink
+ * @param codec [in] video codec for wi-fi display sink
*
* @return This function returns zero on success, or negative value with error code.
- * @pre wi-fi display state should be MM_WFD_SINK_STATE_NULL. \n
+ * @pre wi-fi display state should be MM_WFD_SINK_STATE_CONNECTED, MM_WFD_SINK_STATE_PLAYING or MM_WFD_SINK_STATE_PAUSED. \n
*
- * @par Example
- * @code
-if (mm_wfd_sink_set_display_method(g_wfd_sink, g_display_method) != MM_ERROR_NONE)
-{
- wfd_sink_error("failed to set display method for wi-fi display sink\n");
-}
- * @endcode
*/
-int mm_wfd_sink_set_display_method(MMHandleType wfd_sink, gint display_method);
+int mm_wfd_sink_get_negotiated_video_codec(MMHandleType wfd_sink_handle, gint *codec);
/**
- * This function sets the display visible for wi-fi display sink\n
+ * This function gets the negotiated video resolution for wi-fi display sink\n
*
- * @param wfd_sink [in] Handle of wi-fi display sink
- * @param display_visible [in] Display visible
+ * @param wfd_sink_handle [in] Handle of wi-fi display sink
+ * @param width [in] video width for wi-fi display sink
+ * @param height [in] video height for wi-fi display sink
*
* @return This function returns zero on success, or negative value with error code.
- * @pre wi-fi display state should be MM_WFD_SINK_STATE_NULL. \n
+ * @pre wi-fi display state should be MM_WFD_SINK_STATE_CONNECTED, MM_WFD_SINK_STATE_PLAYING or MM_WFD_SINK_STATE_PAUSED. \n
*
- * @par Example
- * @code
-if (mm_wfd_sink_set_display_visible(g_wfd_sink, g_display_visible) != MM_ERROR_NONE)
-{
- wfd_sink_error("failed to set display visible for wi-fi display sink\n");
-}
- * @endcode
*/
-int mm_wfd_sink_set_display_visible(MMHandleType wfd_sink, gint display_visible);
+int mm_wfd_sink_get_negotiated_video_resolution(MMHandleType wfd_sink_handle, gint *width, gint *height);
/**
- * This function gets the width and height of video which is played by wi-fi display sink\n
+ * This function gets the negotiated video framerate for wi-fi display sink\n
*
- * @param wfd_sink [in] Handle of wi-fi display sink
- * @param width [in] Width of video
- * @param height [in] Height of video
+ * @param wfd_sink_handle [in] Handle of wi-fi display sink
+ * @param framerate [in] video framerate for wi-fi display sink
*
* @return This function returns zero on success, or negative value with error code.
- * @pre wi-fi display state should be MM_WFD_SINK_STATE_CONNECTED or MM_WFD_SINK_STATE_PLAYING. \n
+ * @pre wi-fi display state should be MM_WFD_SINK_STATE_CONNECTED, MM_WFD_SINK_STATE_PLAYING or MM_WFD_SINK_STATE_PAUSED. \n
*
- * @par Example
- * @code
-gint g_width=0, g_height=0;
+ */
+int mm_wfd_sink_get_negotiated_video_frame_rate(MMHandleType wfd_sink_handle, gint *frame_rate);
-if (mm_wfd_sink_get_video_resolution(g_wfd_sink, &g_width, &g_height) != MM_ERROR_NONE)
-{
- wfd_sink_error("failed to get video resolution.\n");
-}
- * @endcode
+/**
+ * This function gets the negotiated audio codec for wi-fi display sink\n
+ *
+ * @param wfd_sink_handle [in] Handle of wi-fi display sink
+ * @param codec [in] audio codec for wi-fi display sink
+ *
+ * @return This function returns zero on success, or negative value with error code.
+ * @pre wi-fi display state should be MM_WFD_SINK_STATE_CONNECTED, MM_WFD_SINK_STATE_PLAYING or MM_WFD_SINK_STATE_PAUSED. \n
+ *
*/
-int mm_wfd_sink_get_video_resolution(MMHandleType wfd_sink, gint *width, gint *height);
+int mm_wfd_sink_get_negotiated_audio_codec(MMHandleType wfd_sink_handle, gint *codec);
/**
- * This function gets the width and height of video which is played by wi-fi display sink\n
+ * This function gets the negotiated audio channel for wi-fi display sink\n
*
- * @param wfd_sink [in] Handle of wi-fi display sink
- * @param framerate [in] Framerate of video
+ * @param wfd_sink_handle [in] Handle of wi-fi display sink
+ * @param channel [in] audio channel for wi-fi display sink
*
* @return This function returns zero on success, or negative value with error code.
- * @pre wi-fi display state should be MM_WFD_SINK_STATE_CONNECTED or MM_WFD_SINK_STATE_PLAYING. \n
+ * @pre wi-fi display state should be MM_WFD_SINK_STATE_CONNECTED, MM_WFD_SINK_STATE_PLAYING or MM_WFD_SINK_STATE_PAUSED. \n
*
- * @par Example
- * @code
-gint g_framerate=0;
+ */
+int mm_wfd_sink_get_negotiated_audio_channel(MMHandleType wfd_sink_handle, gint *channel);
-if (mm_wfd_sink_get_video_framerate(g_wfd_sink, &g_framerate) != MM_ERROR_NONE)
-{
- wfd_sink_error("failed to get video framerate.\n");
-}
- * @endcode
+/**
+ * This function gets the negotiated audio sample rate for wi-fi display sink\n
+ *
+ * @param wfd_sink_handle [in] Handle of wi-fi display sink
+ * @param sample_rate [in] audio sample rate for wi-fi display sink
+ *
+ * @return This function returns zero on success, or negative value with error code.
+ * @pre wi-fi display state should be MM_WFD_SINK_STATE_CONNECTED, MM_WFD_SINK_STATE_PLAYING or MM_WFD_SINK_STATE_PAUSED. \n
+ *
*/
-int mm_wfd_sink_get_video_framerate(MMHandleType wfd_sink, gint *framerate);
+int mm_wfd_sink_get_negotiated_audio_sample_rate(MMHandleType wfd_sink_handle, gint *sample_rate);
/**
- * This function sets the resolutions for wi-fi display sink\n
+ * This function gets the negotiated audio bitwidth for wi-fi display sink\n
*
- * @param wfd_sink [in] Handle of wi-fi display sink
- * @param resolution [in] Resolutions for wi-fi display sink
+ * @param wfd_sink_handle [in] Handle of wi-fi display sink
+ * @param bitwidth [in] audio bitwidth for wi-fi display sink
*
* @return This function returns zero on success, or negative value with error code.
- * @pre wi-fi display state should be MM_WFD_SINK_STATE_NULL. \n
+ * @pre wi-fi display state should be MM_WFD_SINK_STATE_CONNECTED, MM_WFD_SINK_STATE_PLAYING or MM_WFD_SINK_STATE_PAUSED. \n
*
*/
-int mm_wfd_sink_set_resolution(MMHandleType wfd_sink, gint resolution);
-
-int mm_wfd_sink_get_negotiated_video_codec(MMHandleType wfd_sink, gint *codec);
-int mm_wfd_sink_get_negotiated_video_resolution(MMHandleType wfd_sink, gint *width, gint *height);
-int mm_wfd_sink_get_negotiated_video_frame_rate(MMHandleType wfd_sink, gint *frame_rate);
-int mm_wfd_sink_get_negotiated_audio_codec(MMHandleType wfd_sink, gint *codec);
-int mm_wfd_sink_get_negotiated_audio_channel(MMHandleType wfd_sink, gint *channel);
-int mm_wfd_sink_get_negotiated_audio_sample_rate(MMHandleType wfd_sink, gint *sample_rate);
-int mm_wfd_sink_get_negotiated_audio_bitwidth(MMHandleType wfd_sink, gint *bitwidth);
+int mm_wfd_sink_get_negotiated_audio_bitwidth(MMHandleType wfd_sink_handle, gint *bitwidth);
#endif
}
-int mm_wfd_sink_prepare(MMHandleType wfd_sink)
+int mm_wfd_sink_prepare(MMHandleType wfd_sink_handle)
{
+ 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_sink_prepare((mm_wfd_sink_t *)wfd_sink);
- MMWFDSINK_CMD_UNLOCK(wfd_sink);
+
+ if (wfd_sink->func_table == NULL || wfd_sink->func_table->prepare == NULL) {
+ MMWFDSINK_CMD_LOCK(wfd_sink);
+ result = _mm_wfd_sink_prepare(wfd_sink);
+ MMWFDSINK_CMD_UNLOCK(wfd_sink);
+ } else {
+ result = wfd_sink->func_table->prepare(wfd_sink_handle);
+ }
return result;
}
-int mm_wfd_sink_connect(MMHandleType wfd_sink, const char *uri)
+int mm_wfd_sink_connect(MMHandleType wfd_sink_handle, const char *uri)
{
+ 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);
wfd_sink_return_val_if_fail(uri, MM_ERROR_WFD_INVALID_ARGUMENT);
- MMWFDSINK_CMD_LOCK(wfd_sink);
- result = _mm_wfd_sink_connect((mm_wfd_sink_t *)wfd_sink, uri);
- MMWFDSINK_CMD_UNLOCK(wfd_sink);
+ if (wfd_sink->func_table == NULL || wfd_sink->func_table->connect == NULL) {
+ MMWFDSINK_CMD_LOCK(wfd_sink);
+ result = _mm_wfd_sink_connect(wfd_sink, uri);
+ MMWFDSINK_CMD_UNLOCK(wfd_sink);
+ } else {
+ result = wfd_sink->func_table->connect(wfd_sink_handle, uri);
+ }
return result;
}
-int mm_wfd_sink_start(MMHandleType wfd_sink)
+int mm_wfd_sink_start(MMHandleType wfd_sink_handle)
{
+ 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_sink_start((mm_wfd_sink_t *)wfd_sink);
- MMWFDSINK_CMD_UNLOCK(wfd_sink);
+ if (wfd_sink->func_table == NULL || wfd_sink->func_table->start == NULL) {
+ MMWFDSINK_CMD_LOCK(wfd_sink);
+ result = _mm_wfd_sink_start(wfd_sink);
+ MMWFDSINK_CMD_UNLOCK(wfd_sink);
+ } else {
+ result = wfd_sink->func_table->start(wfd_sink_handle);
+ }
return result;
}
-int mm_wfd_sink_pause(MMHandleType wfd_sink)
+int mm_wfd_sink_pause(MMHandleType wfd_sink_handle)
{
+ 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_sink_pause((mm_wfd_sink_t *)wfd_sink);
- MMWFDSINK_CMD_UNLOCK(wfd_sink);
+ if (wfd_sink->func_table == NULL || wfd_sink->func_table->pause == NULL) {
+ MMWFDSINK_CMD_LOCK(wfd_sink);
+ result = _mm_wfd_sink_pause(wfd_sink);
+ MMWFDSINK_CMD_UNLOCK(wfd_sink);
+ } else {
+ result = wfd_sink->func_table->pause(wfd_sink_handle);
+ }
return result;
}
-int mm_wfd_sink_resume(MMHandleType wfd_sink)
+int mm_wfd_sink_resume(MMHandleType wfd_sink_handle)
{
+ 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_sink_resume((mm_wfd_sink_t *)wfd_sink);
- MMWFDSINK_CMD_UNLOCK(wfd_sink);
+ if (wfd_sink->func_table == NULL || wfd_sink->func_table->resume == NULL) {
+ MMWFDSINK_CMD_LOCK(wfd_sink);
+ result = _mm_wfd_sink_resume(wfd_sink);
+ MMWFDSINK_CMD_UNLOCK(wfd_sink);
+ } else {
+ result = wfd_sink->func_table->resume(wfd_sink_handle);
+ }
return result;
}
-int mm_wfd_sink_disconnect(MMHandleType wfd_sink)
+int mm_wfd_sink_disconnect(MMHandleType wfd_sink_handle)
{
+ 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_sink_disconnect((mm_wfd_sink_t *)wfd_sink);
- MMWFDSINK_CMD_UNLOCK(wfd_sink);
+ if (wfd_sink->func_table == NULL || wfd_sink->func_table->disconnect == NULL) {
+ MMWFDSINK_CMD_LOCK(wfd_sink);
+ result = _mm_wfd_sink_disconnect(wfd_sink);
+ MMWFDSINK_CMD_UNLOCK(wfd_sink);
+ } else {
+ result = wfd_sink->func_table->disconnect(wfd_sink_handle);
+ }
return result;
}
-int mm_wfd_sink_unprepare(MMHandleType wfd_sink)
+int mm_wfd_sink_unprepare(MMHandleType wfd_sink_handle)
{
+ 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_sink_unprepare((mm_wfd_sink_t *)wfd_sink);
- MMWFDSINK_CMD_UNLOCK(wfd_sink);
+ if (wfd_sink->func_table == NULL || wfd_sink->func_table->unprepare == NULL) {
+ MMWFDSINK_CMD_LOCK(wfd_sink);
+ result = _mm_wfd_sink_unprepare(wfd_sink);
+ MMWFDSINK_CMD_UNLOCK(wfd_sink);
+ } else {
+ result = wfd_sink->func_table->unprepare(wfd_sink_handle);
+ }
return result;
}
-int mm_wfd_sink_destroy(MMHandleType wfd_sink)
+int mm_wfd_sink_destroy(MMHandleType wfd_sink_handle)
{
+ mm_wfd_sink_t *wfd_sink = (mm_wfd_sink_t *)wfd_sink_handle;
+ mm_wfd_sink_t *handle = NULL;
int result = MM_ERROR_NONE;
- mm_wfd_sink_t *sink_handle = NULL;
wfd_sink_return_val_if_fail(wfd_sink, MM_ERROR_WFD_NOT_INITIALIZED);
MMWFDSINK_CMD_LOCK(wfd_sink);
- result = _mm_wfd_sink_destroy((mm_wfd_sink_t *)wfd_sink);
+ result = _mm_wfd_sink_destroy(wfd_sink);
MMWFDSINK_CMD_UNLOCK(wfd_sink);
- g_mutex_clear(&(((mm_wfd_sink_t *)wfd_sink)->cmd_lock));
+ g_mutex_clear(&(wfd_sink->cmd_lock));
- sink_handle = (mm_wfd_sink_t *)wfd_sink;
- MMWFDSINK_FREEIF(sink_handle);
+ /* TODO */
+ handle = (mm_wfd_sink_t *)wfd_sink_handle;
+ MMWFDSINK_FREEIF(handle);
return result;
}
-int mm_wfd_sink_set_message_callback(MMHandleType wfd_sink, MMWFDMessageCallback callback, void *user_data)
+int mm_wfd_sink_set_message_callback(MMHandleType wfd_sink_handle, MMWFDMessageCallback 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_message_callback((mm_wfd_sink_t *)wfd_sink, callback, user_data);
+ result = _mm_wfd_set_message_callback(wfd_sink, callback, user_data);
MMWFDSINK_CMD_UNLOCK(wfd_sink);
return result;
}
-int mm_wfd_sink_set_attribute(MMHandleType wfd_sink, char **err_attr_name, const char *first_attribute_name, ...)
+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;
int result = MM_ERROR_NONE;
va_list var_args;
return result;
}
-int mm_wfd_sink_get_video_resolution(MMHandleType wfd_sink, gint *width, gint *height)
+int mm_wfd_sink_get_video_resolution(MMHandleType wfd_sink_handle, gint *width, gint *height)
{
- mm_wfd_sink_t *wfd = (mm_wfd_sink_t *)wfd_sink;
+ mm_wfd_sink_t *wfd_sink = (mm_wfd_sink_t *)wfd_sink_handle;
- wfd_sink_return_val_if_fail(wfd, MM_ERROR_WFD_NOT_INITIALIZED);
+ wfd_sink_return_val_if_fail(wfd_sink, MM_ERROR_WFD_NOT_INITIALIZED);
wfd_sink_return_val_if_fail(width, MM_ERROR_WFD_INVALID_ARGUMENT);
wfd_sink_return_val_if_fail(height, MM_ERROR_WFD_INVALID_ARGUMENT);
- *width = wfd->stream_info.video_stream_info.width;
- *height = wfd->stream_info.video_stream_info.height;
+ *width = wfd_sink->stream_info.video_stream_info.width;
+ *height = wfd_sink->stream_info.video_stream_info.height;
return MM_ERROR_NONE;
}
-int mm_wfd_sink_get_video_framerate(MMHandleType wfd_sink, gint *frame_rate)
+int mm_wfd_sink_get_video_framerate(MMHandleType wfd_sink_handle, gint *frame_rate)
{
- mm_wfd_sink_t *wfd = (mm_wfd_sink_t *)wfd_sink;
+ mm_wfd_sink_t *wfd_sink = (mm_wfd_sink_t *)wfd_sink_handle;
- wfd_sink_return_val_if_fail(wfd, MM_ERROR_WFD_NOT_INITIALIZED);
+ wfd_sink_return_val_if_fail(wfd_sink, MM_ERROR_WFD_NOT_INITIALIZED);
wfd_sink_return_val_if_fail(frame_rate, MM_ERROR_WFD_INVALID_ARGUMENT);
- *frame_rate = wfd->stream_info.video_stream_info.frame_rate;
+ *frame_rate = wfd_sink->stream_info.video_stream_info.frame_rate;
return MM_ERROR_NONE;
}
-int mm_wfd_sink_set_resolution(MMHandleType wfd_sink, gint resolution)
+int mm_wfd_sink_set_resolution(MMHandleType wfd_sink_handle, gint resolution)
{
+ 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_sink_set_resolution((mm_wfd_sink_t *)wfd_sink, resolution);
+ result = _mm_wfd_sink_set_resolution(wfd_sink, resolution);
MMWFDSINK_CMD_UNLOCK(wfd_sink);
return result;
}
-int mm_wfd_sink_get_negotiated_video_codec(MMHandleType wfd_sink, gint *codec)
+int mm_wfd_sink_get_negotiated_video_codec(MMHandleType wfd_sink_handle, gint *codec)
{
- int result = MM_ERROR_NONE;
- mm_wfd_sink_t *wfd = (mm_wfd_sink_t *)wfd_sink;
+ mm_wfd_sink_t *wfd_sink = (mm_wfd_sink_t *)wfd_sink_handle;
MMWFDSinkStateType cur_state = MM_WFD_SINK_STATE_NONE;
+ int result = MM_ERROR_NONE;
- wfd_sink_return_val_if_fail(wfd, MM_ERROR_WFD_NOT_INITIALIZED);
+ wfd_sink_return_val_if_fail(wfd_sink, MM_ERROR_WFD_NOT_INITIALIZED);
wfd_sink_return_val_if_fail(codec, MM_ERROR_WFD_INVALID_ARGUMENT);
- MMWFDSINK_CMD_LOCK(wfd);
+ MMWFDSINK_CMD_LOCK(wfd_sink);
- MMWFDSINK_PRINT_STATE(wfd);
- cur_state = MMWFDSINK_CURRENT_STATE(wfd);
+ MMWFDSINK_PRINT_STATE(wfd_sink);
+ cur_state = MMWFDSINK_CURRENT_STATE(wfd_sink);
if (cur_state != MM_WFD_SINK_STATE_CONNECTED &&
cur_state != MM_WFD_SINK_STATE_PLAYING &&
cur_state != MM_WFD_SINK_STATE_PAUSED) {
wfd_sink_error("This function must be called after MM_WFD_SINK_STATE_CONNECTED");
result = MM_ERROR_WFD_INVALID_STATE;
} else {
- *codec = wfd->stream_info.video_stream_info.codec;
+ *codec = wfd_sink->stream_info.video_stream_info.codec;
}
- MMWFDSINK_CMD_UNLOCK(wfd);
+ MMWFDSINK_CMD_UNLOCK(wfd_sink);
wfd_sink_debug_fleave();
return result;
}
-int mm_wfd_sink_get_negotiated_video_frame_rate(MMHandleType wfd_sink, gint *frame_rate)
+int mm_wfd_sink_get_negotiated_video_frame_rate(MMHandleType wfd_sink_handle, gint *frame_rate)
{
- int result = MM_ERROR_NONE;
- mm_wfd_sink_t *wfd = (mm_wfd_sink_t *)wfd_sink;
+ mm_wfd_sink_t *wfd_sink = (mm_wfd_sink_t *)wfd_sink_handle;
MMWFDSinkStateType cur_state = MM_WFD_SINK_STATE_NONE;
+ int result = MM_ERROR_NONE;
- wfd_sink_return_val_if_fail(wfd, MM_ERROR_WFD_NOT_INITIALIZED);
+ wfd_sink_return_val_if_fail(wfd_sink, MM_ERROR_WFD_NOT_INITIALIZED);
wfd_sink_return_val_if_fail(frame_rate, MM_ERROR_WFD_INVALID_ARGUMENT);
- MMWFDSINK_CMD_LOCK(wfd);
+ MMWFDSINK_CMD_LOCK(wfd_sink);
- MMWFDSINK_PRINT_STATE(wfd);
- cur_state = MMWFDSINK_CURRENT_STATE(wfd);
+ MMWFDSINK_PRINT_STATE(wfd_sink);
+ cur_state = MMWFDSINK_CURRENT_STATE(wfd_sink);
if (cur_state != MM_WFD_SINK_STATE_CONNECTED &&
cur_state != MM_WFD_SINK_STATE_PLAYING &&
cur_state != MM_WFD_SINK_STATE_PAUSED) {
wfd_sink_error("This function must be called after MM_WFD_SINK_STATE_CONNECTED");
result = MM_ERROR_WFD_INVALID_STATE;
} else {
- *frame_rate = wfd->stream_info.video_stream_info.frame_rate;
+ *frame_rate = wfd_sink->stream_info.video_stream_info.frame_rate;
}
- MMWFDSINK_CMD_UNLOCK(wfd);
+ MMWFDSINK_CMD_UNLOCK(wfd_sink);
wfd_sink_debug_fleave();
return result;
}
-int mm_wfd_sink_get_negotiated_audio_codec(MMHandleType wfd_sink, gint *codec)
+int mm_wfd_sink_get_negotiated_audio_codec(MMHandleType wfd_sink_handle, gint *codec)
{
- int result = MM_ERROR_NONE;
- mm_wfd_sink_t *wfd = (mm_wfd_sink_t *)wfd_sink;
+ mm_wfd_sink_t *wfd_sink = (mm_wfd_sink_t *)wfd_sink_handle;
MMWFDSinkStateType cur_state = MM_WFD_SINK_STATE_NONE;
+ int result = MM_ERROR_NONE;
- wfd_sink_return_val_if_fail(wfd, MM_ERROR_WFD_NOT_INITIALIZED);
+ wfd_sink_return_val_if_fail(wfd_sink, MM_ERROR_WFD_NOT_INITIALIZED);
wfd_sink_return_val_if_fail(codec, MM_ERROR_WFD_INVALID_ARGUMENT);
- MMWFDSINK_CMD_LOCK(wfd);
+ MMWFDSINK_CMD_LOCK(wfd_sink);
- MMWFDSINK_PRINT_STATE(wfd);
- cur_state = MMWFDSINK_CURRENT_STATE(wfd);
+ MMWFDSINK_PRINT_STATE(wfd_sink);
+ cur_state = MMWFDSINK_CURRENT_STATE(wfd_sink);
if (cur_state != MM_WFD_SINK_STATE_CONNECTED &&
cur_state != MM_WFD_SINK_STATE_PLAYING &&
cur_state != MM_WFD_SINK_STATE_PAUSED) {
wfd_sink_error("This function must be called after MM_WFD_SINK_STATE_CONNECTED");
result = MM_ERROR_WFD_INVALID_STATE;
} else {
- *codec = wfd->stream_info.audio_stream_info.codec;
+ *codec = wfd_sink->stream_info.audio_stream_info.codec;
}
- MMWFDSINK_CMD_UNLOCK(wfd);
+ MMWFDSINK_CMD_UNLOCK(wfd_sink);
wfd_sink_debug_fleave();
return result;
}
-int mm_wfd_sink_get_negotiated_audio_channel(MMHandleType wfd_sink, gint *channel)
+int mm_wfd_sink_get_negotiated_audio_channel(MMHandleType wfd_sink_handle, gint *channel)
{
- int result = MM_ERROR_NONE;
- mm_wfd_sink_t *wfd = (mm_wfd_sink_t *)wfd_sink;
+ mm_wfd_sink_t *wfd_sink = (mm_wfd_sink_t *)wfd_sink_handle;
MMWFDSinkStateType cur_state = MM_WFD_SINK_STATE_NONE;
+ int result = MM_ERROR_NONE;
- wfd_sink_return_val_if_fail(wfd, MM_ERROR_WFD_NOT_INITIALIZED);
+ wfd_sink_return_val_if_fail(wfd_sink, MM_ERROR_WFD_NOT_INITIALIZED);
wfd_sink_return_val_if_fail(channel, MM_ERROR_WFD_INVALID_ARGUMENT);
- MMWFDSINK_CMD_LOCK(wfd);
+ MMWFDSINK_CMD_LOCK(wfd_sink);
- MMWFDSINK_PRINT_STATE(wfd);
- cur_state = MMWFDSINK_CURRENT_STATE(wfd);
+ MMWFDSINK_PRINT_STATE(wfd_sink);
+ cur_state = MMWFDSINK_CURRENT_STATE(wfd_sink);
if (cur_state != MM_WFD_SINK_STATE_CONNECTED &&
cur_state != MM_WFD_SINK_STATE_PLAYING &&
cur_state != MM_WFD_SINK_STATE_PAUSED) {
wfd_sink_error("This function must be called after MM_WFD_SINK_STATE_CONNECTED");
result = MM_ERROR_WFD_INVALID_STATE;
} else {
- *channel = wfd->stream_info.audio_stream_info.channels;
+ *channel = wfd_sink->stream_info.audio_stream_info.channels;
}
- MMWFDSINK_CMD_UNLOCK(wfd);
+ MMWFDSINK_CMD_UNLOCK(wfd_sink);
wfd_sink_debug_fleave();
return result;
}
-int mm_wfd_sink_get_negotiated_audio_sample_rate(MMHandleType wfd_sink, gint *sample_rate)
+int mm_wfd_sink_get_negotiated_audio_sample_rate(MMHandleType wfd_sink_handle, gint *sample_rate)
{
- int result = MM_ERROR_NONE;
- mm_wfd_sink_t *wfd = (mm_wfd_sink_t *)wfd_sink;
+ mm_wfd_sink_t *wfd_sink = (mm_wfd_sink_t *)wfd_sink_handle;
MMWFDSinkStateType cur_state = MM_WFD_SINK_STATE_NONE;
+ int result = MM_ERROR_NONE;
wfd_sink_debug_fenter();
- wfd_sink_return_val_if_fail(wfd, MM_ERROR_WFD_NOT_INITIALIZED);
+ wfd_sink_return_val_if_fail(wfd_sink, MM_ERROR_WFD_NOT_INITIALIZED);
wfd_sink_return_val_if_fail(sample_rate, MM_ERROR_WFD_INVALID_ARGUMENT);
- MMWFDSINK_CMD_LOCK(wfd);
+ MMWFDSINK_CMD_LOCK(wfd_sink);
- MMWFDSINK_PRINT_STATE(wfd);
- cur_state = MMWFDSINK_CURRENT_STATE(wfd);
+ MMWFDSINK_PRINT_STATE(wfd_sink);
+ cur_state = MMWFDSINK_CURRENT_STATE(wfd_sink);
if (cur_state != MM_WFD_SINK_STATE_CONNECTED &&
cur_state != MM_WFD_SINK_STATE_PLAYING &&
cur_state != MM_WFD_SINK_STATE_PAUSED) {
wfd_sink_error("This function must be called after MM_WFD_SINK_STATE_CONNECTED");
result = MM_ERROR_WFD_INVALID_STATE;
} else {
- *sample_rate = wfd->stream_info.audio_stream_info.sample_rate;
+ *sample_rate = wfd_sink->stream_info.audio_stream_info.sample_rate;
}
- MMWFDSINK_CMD_UNLOCK(wfd);
+ MMWFDSINK_CMD_UNLOCK(wfd_sink);
wfd_sink_debug_fleave();
return result;
}
-int mm_wfd_sink_get_negotiated_audio_bitwidth(MMHandleType wfd_sink, gint *bitwidth)
+int mm_wfd_sink_get_negotiated_audio_bitwidth(MMHandleType wfd_sink_handle, gint *bitwidth)
{
- int result = MM_ERROR_NONE;
- mm_wfd_sink_t *wfd = (mm_wfd_sink_t *)wfd_sink;
+ mm_wfd_sink_t *wfd_sink = (mm_wfd_sink_t *)wfd_sink_handle;
MMWFDSinkStateType cur_state = MM_WFD_SINK_STATE_NONE;
+ int result = MM_ERROR_NONE;
wfd_sink_debug_fenter();
- wfd_sink_return_val_if_fail(wfd, MM_ERROR_WFD_NOT_INITIALIZED);
+ wfd_sink_return_val_if_fail(wfd_sink, MM_ERROR_WFD_NOT_INITIALIZED);
wfd_sink_return_val_if_fail(bitwidth, MM_ERROR_WFD_INVALID_ARGUMENT);
- MMWFDSINK_CMD_LOCK(wfd);
+ MMWFDSINK_CMD_LOCK(wfd_sink);
- MMWFDSINK_PRINT_STATE(wfd);
- cur_state = MMWFDSINK_CURRENT_STATE(wfd);
+ MMWFDSINK_PRINT_STATE(wfd_sink);
+ cur_state = MMWFDSINK_CURRENT_STATE(wfd_sink);
if (cur_state != MM_WFD_SINK_STATE_CONNECTED &&
cur_state != MM_WFD_SINK_STATE_PLAYING &&
cur_state != MM_WFD_SINK_STATE_PAUSED) {
wfd_sink_error("This function must be called after MM_WFD_SINK_STATE_CONNECTED");
result = MM_ERROR_WFD_INVALID_STATE;
} else {
- *bitwidth = wfd->stream_info.audio_stream_info.bitwidth;
+ *bitwidth = wfd_sink->stream_info.audio_stream_info.bitwidth;
}
- MMWFDSINK_CMD_UNLOCK(wfd);
+ MMWFDSINK_CMD_UNLOCK(wfd_sink);
wfd_sink_debug_fleave();