*/
typedef void (*mc_ability_support_updated_cb)(const char *server_name, mc_ability_e ability, mc_ability_support_e support, void *user_data);
+/**
+ * @brief Called when a media controller server's supported items for an ability is updated.
+ * @since_tizen 5.5
+ *
+ * @remarks The callback is called in the dbus event loop.\n
+ * The @a server_name should not be released by the application. \n
+ * The @a server_name can be used only in the callback. To use outside, make a copy.
+ *
+ * @param[in] server_name The app_id of the media controller server which sent the notification
+ * @param[in] supported_items The supported items of the updated media controller server
+ * @param[in] user_data The user data passed from the callback function
+ *
+ * @see mc_client_set_display_mode_ability_updated_cb()
+ * @see mc_client_set_display_rotation_ability_updated_cb()
+ */
+typedef void (*mc_ability_supported_items_updated_cb)(const char *server_name, unsigned int supported_items, void *user_data);
+
/**
* @brief Called when requesting the list of created servers.
* @since_tizen @if MOBILE 2.4 @elseif WEARABLE 3.0 @endif
* @since_tizen @if MOBILE 4.0 @elseif WEARABLE 5.0 @endif
*
* @remarks The callback is called in the dbus event loop.\n @a data should be released using bundle_free().\n
- * The @a server_name and @ request_id should not be released by the application. \n
- * The @a server_name and @ request_id can be used only in the callback. To use outside, make a copy.
+ * The @a server_name and @a request_id should not be released by the application. \n
+ * The @a server_name and @a request_id can be used only in the callback. To use outside, make a copy.
*
* @param[in] server_name The app_id of the media controller server which sent the reply
* @param[in] request_id The id of the command request
*/
typedef void (*mc_client_custom_event_received_cb)(const char *server_name, const char *request_id, const char *event, bundle *data, void *user_data);
+/**
+ * @brief Called when the status of a media controller server's boolean attribute (subtitles or 360 mode) is updated.
+ * @since_tizen 5.5
+ *
+ * @remarks The callback is called in the dbus event loop.\n
+ * The @a server_name should not be released by the application. \n
+ * The @a server_name can be used only in the callback. To use outside, make a copy.
+ *
+ * @param[in] server_name The app_id of the media controller server which sent the notification
+ * @param[in] enabled The new status of the attribute
+ * @param[in] user_data The user data passed from the callback function
+ *
+ * @see mc_client_set_subtitles_updated_cb()
+ * @see mc_client_set_360_mode_updated_cb()
+ */
+typedef void (*mc_bool_attribute_updated_cb)(const char *server_name, bool enabled, void *user_data);
+
+/**
+ * @brief Called when a media controller server's display mode is updated.
+ * @since_tizen 5.5
+ *
+ * @remarks The callback is called in the dbus event loop.\n
+ * The @a server_name should not be released by the application. \n
+ * The @a server_name can be used only in the callback. To use outside, make a copy.
+ *
+ * @param[in] server_name The app_id of the media controller server which sent the notification
+ * @param[in] mode The display mode
+ * @param[in] user_data The user data passed from the callback function
+ *
+ * @see mc_client_set_display_mode_updated_cb()
+ */
+typedef void (*mc_display_mode_updated_cb)(const char *server_name, mc_display_mode_e mode, void *user_data);
+
+/**
+ * @brief Called when a media controller server's display rotation is updated.
+ * @since_tizen 5.5
+ *
+ * @remarks The callback is called in the dbus event loop.\n
+ * The @a server_name should not be released by the application. \n
+ * The @a server_name can be used only in the callback. To use outside, make a copy.
+ *
+ * @param[in] server_name The app_id of the media controller server which sent the notification
+ * @param[in] rotation The display rotation
+ * @param[in] user_data The user data passed from the callback function
+ *
+ * @see mc_client_set_display_rotation_updated_cb()
+ */
+typedef void (*mc_display_rotation_updated_cb)(const char *server_name, mc_display_rotation_e rotation, void *user_data);
+
/**
* @brief Creates a media controller client.
* @details The media controller client binds the latest media controller server when handlers are created.
* @pre Create a media controller client handle by calling mc_client_create().
* @see mc_client_create()
* @see mc_client_destroy()
+ * @see mc_client_unset_server_updated_cb()
*/
int mc_client_set_server_updated_cb(mc_client_h client, mc_server_state_updated_cb callback, void *user_data);
* @pre Create a media controller client handle by calling mc_client_create().
* @see mc_client_create()
* @see mc_client_destroy()
+ * @see mc_client_set_server_updated_cb()
*/
int mc_client_unset_server_updated_cb(mc_client_h client);
* @pre Create a media controller client handle by calling mc_client_create().
* @see mc_client_create()
* @see mc_client_destroy()
+ * @see mc_client_unset_playback_updated_cb()
*/
int mc_client_set_playback_updated_cb(mc_client_h client, mc_playback_updated_cb callback, void *user_data);
* @pre Create a media controller client handle by calling mc_client_create().
* @see mc_client_create()
* @see mc_client_destroy()
+ * @see mc_client_set_playback_updated_cb()
*/
int mc_client_unset_playback_updated_cb(mc_client_h client);
* @pre Create a media controller client handle by calling mc_client_create().
* @see mc_client_create()
* @see mc_client_destroy()
+ * @see mc_client_unset_metadata_updated_cb()
*/
int mc_client_set_metadata_updated_cb(mc_client_h client, mc_metadata_updated_cb callback, void *user_data);
* @pre Create a media controller client handle by calling mc_client_create().
* @see mc_client_create()
* @see mc_client_destroy()
+ * @see mc_client_set_metadata_updated_cb()
*/
int mc_client_unset_metadata_updated_cb(mc_client_h client);
* @pre Create a media controller client handle by calling mc_client_create().
* @see mc_client_create()
* @see mc_client_destroy()
+ * @see mc_client_unset_shuffle_mode_updated_cb()
*/
int mc_client_set_shuffle_mode_updated_cb(mc_client_h client, mc_shuffle_mode_updated_cb callback, void *user_data);
* @pre Create a media controller client handle by calling mc_client_create().
* @see mc_client_create()
* @see mc_client_destroy()
+ * @see mc_client_set_shuffle_mode_updated_cb()
*/
int mc_client_unset_shuffle_mode_updated_cb(mc_client_h client);
* @pre Create a media controller client handle by calling mc_client_create().
* @see mc_client_create()
* @see mc_client_destroy()
+ * @see mc_client_unset_repeat_mode_updated_cb()
*/
int mc_client_set_repeat_mode_updated_cb(mc_client_h client, mc_repeat_mode_updated_cb callback, void *user_data);
* @pre Create a media controller client handle by calling mc_client_create().
* @see mc_client_create()
* @see mc_client_destroy()
+ * @see mc_client_set_repeat_mode_updated_cb()
*/
int mc_client_unset_repeat_mode_updated_cb(mc_client_h client);
* @pre Create a media controller client handle by calling mc_client_create().
* @see mc_client_create()
* @see mc_client_destroy()
+ * @see mc_client_unset_playback_ability_updated_cb()
*/
int mc_client_set_playback_ability_updated_cb(mc_client_h client, mc_playback_ability_updated_cb callback, void *user_data);
* @pre Create a media controller client handle by calling mc_client_create().
* @see mc_client_create()
* @see mc_client_destroy()
+ * @see mc_client_set_playback_ability_updated_cb()
*/
int mc_client_unset_playback_ability_updated_cb(mc_client_h client);
* #MC_ABILITY_PLAYLIST, \n
* #MC_ABILITY_CLIENT_CUSTOM, \n
* #MC_ABILITY_SEARCH, \n
- * To monitor the media controller server's support for a playback ability, use mc_client_set_playback_ability_updated_cb().
+ * #MC_ABILITY_SUBTITLES, \n
+ * #MC_ABILITY_360_MODE, \n
+ * To monitor the media controller server's support for other abilities, use corresponding function. \n
+ * For a playback ability, use mc_client_set_playback_ability_updated_cb(). \n
+ * For a display mode ability, use mc_client_set_display_mode_ability_updated_cb(). \n
+ * For a display rotation ability, use mc_client_set_display_rotation_ability_updated_cb(). \n
+ *
* @since_tizen 5.5
*
* @privlevel public
* @pre Create a media controller client handle by calling mc_client_create().
* @see mc_client_create()
* @see mc_client_destroy()
+ * @see mc_client_unset_ability_support_updated_cb()
* @see mc_client_set_playback_ability_updated_cb()
+ * @see mc_client_set_display_mode_ability_updated_cb()
+ * @see mc_client_set_display_rotation_ability_updated_cb()
*/
int mc_client_set_ability_support_updated_cb(mc_client_h client, mc_ability_support_updated_cb callback, void *user_data);
* #MC_ABILITY_PLAYLIST, \n
* #MC_ABILITY_CLIENT_CUSTOM, \n
* #MC_ABILITY_SEARCH, \n
- * To stop monitoring the media controller server's support for a playback ability, use mc_client_unset_playback_ability_updated_cb().
+ * #MC_ABILITY_SUBTITLES, \n
+ * #MC_ABILITY_360_MODE, \n
+ * To stop monitoring the media controller server's support for other abilities, use corresponding function. \n
+ * For a playback ability, use mc_client_unset_playback_ability_updated_cb(). \n
+ * For a display mode ability, use mc_client_unset_display_mode_ability_updated_cb(). \n
+ * For a display rotation ability, use mc_client_unset_display_rotation_ability_updated_cb(). \n
+ *
* @since_tizen 5.5
*
* @privlevel public
* @pre Create a media controller client handle by calling mc_client_create().
* @see mc_client_create()
* @see mc_client_destroy()
- * @see mc_client_unset_playback_ability_updated_cb()
* @see mc_ability_support_updated_cb()
+ * @see mc_client_unset_playback_ability_updated_cb()
+ * @see mc_client_unset_display_mode_ability_updated_cb()
+ * @see mc_client_unset_display_rotation_ability_updated_cb()
*/
int mc_client_unset_ability_support_updated_cb(mc_client_h client);
+/**
+ * @brief Sets the callback for monitoring the display mode ability of the media controller server.
+ * @details The media controller client which calls this function will receive notifications from all media controller servers.
+ * @since_tizen 5.5
+ *
+ * @privlevel public
+ * @privilege %http://tizen.org/privilege/mediacontroller.client
+ *
+ * @param[in] client The handle of the media controller client
+ * @param[in] callback The callback to be invoked when the ability is changed
+ * @param[in] user_data The user data to be passed to the callback function
+ * @return @c 0 on success,
+ * otherwise a negative error value
+ * @retval #MEDIA_CONTROLLER_ERROR_NONE Successful
+ * @retval #MEDIA_CONTROLLER_ERROR_PERMISSION_DENIED Permission denied
+ * @retval #MEDIA_CONTROLLER_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #MEDIA_CONTROLLER_ERROR_INVALID_OPERATION Invalid operation
+ * @retval #MEDIA_CONTROLLER_ERROR_OUT_OF_MEMORY Out of memory
+ *
+ * @pre Create a media controller client handle by calling mc_client_create().
+ * @see mc_client_create()
+ * @see mc_client_destroy()
+ * @see mc_client_unset_display_mode_ability_updated_cb()
+ */
+int mc_client_set_display_mode_ability_updated_cb(mc_client_h client, mc_ability_supported_items_updated_cb callback, void *user_data);
+
+/**
+ * @brief Unsets the callback for monitoring the display mode ability of the media controller server.
+ * @since_tizen 5.5
+ *
+ * @privlevel public
+ * @privilege %http://tizen.org/privilege/mediacontroller.client
+ *
+ * @param[in] client The handle of the media controller client
+ * @return @c 0 on success,
+ * otherwise a negative error value
+ * @retval #MEDIA_CONTROLLER_ERROR_NONE Successful
+ * @retval #MEDIA_CONTROLLER_ERROR_PERMISSION_DENIED Permission denied
+ * @retval #MEDIA_CONTROLLER_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #MEDIA_CONTROLLER_ERROR_INVALID_OPERATION Invalid operation
+ *
+ * @pre Create a media controller client handle by calling mc_client_create().
+ * @see mc_client_create()
+ * @see mc_client_destroy()
+ * @see mc_client_set_display_mode_ability_updated_cb()
+ */
+int mc_client_unset_display_mode_ability_updated_cb(mc_client_h client);
+
+/**
+ * @brief Sets the callback for monitoring the display rotation ability of the media controller server.
+ * @details The media controller client which calls this function will receive notifications from all media controller servers.
+ * @since_tizen 5.5
+ *
+ * @privlevel public
+ * @privilege %http://tizen.org/privilege/mediacontroller.client
+ *
+ * @param[in] client The handle of the media controller client
+ * @param[in] callback The callback to be invoked when the ability is changed
+ * @param[in] user_data The user data to be passed to the callback function
+ * @return @c 0 on success,
+ * otherwise a negative error value
+ * @retval #MEDIA_CONTROLLER_ERROR_NONE Successful
+ * @retval #MEDIA_CONTROLLER_ERROR_PERMISSION_DENIED Permission denied
+ * @retval #MEDIA_CONTROLLER_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #MEDIA_CONTROLLER_ERROR_INVALID_OPERATION Invalid operation
+ * @retval #MEDIA_CONTROLLER_ERROR_OUT_OF_MEMORY Out of memory
+ *
+ * @pre Create a media controller client handle by calling mc_client_create().
+ * @see mc_client_create()
+ * @see mc_client_destroy()
+ * @see mc_client_unset_display_rotation_ability_updated_cb()
+ */
+int mc_client_set_display_rotation_ability_updated_cb(mc_client_h client, mc_ability_supported_items_updated_cb callback, void *user_data);
+
+/**
+ * @brief Unsets the callback for monitoring the display rotation ability of the media controller server.
+ * @since_tizen 5.5
+ *
+ * @privlevel public
+ * @privilege %http://tizen.org/privilege/mediacontroller.client
+ *
+ * @param[in] client The handle of the media controller client
+ * @return @c 0 on success,
+ * otherwise a negative error value
+ * @retval #MEDIA_CONTROLLER_ERROR_NONE Successful
+ * @retval #MEDIA_CONTROLLER_ERROR_PERMISSION_DENIED Permission denied
+ * @retval #MEDIA_CONTROLLER_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #MEDIA_CONTROLLER_ERROR_INVALID_OPERATION Invalid operation
+ *
+ * @pre Create a media controller client handle by calling mc_client_create().
+ * @see mc_client_create()
+ * @see mc_client_destroy()
+ * @see mc_client_set_display_rotation_ability_updated_cb()
+ */
+int mc_client_unset_display_rotation_ability_updated_cb(mc_client_h client);
+
/**
* @brief Sets the callback for receiving the result of the command from the media controller server.
* @details The media controller client which calls this function will receives the result of the command from all media controller servers.
* @privlevel public
* @privilege %http://tizen.org/privilege/mediacontroller.client
*
- * @param[in] client The handle of the media controller client
+ * @param[in] client The handle of the media controller client
+ * @return @c 0 on success,
+ * otherwise a negative error value
+ * @retval #MEDIA_CONTROLLER_ERROR_NONE Successful
+ * @retval #MEDIA_CONTROLLER_ERROR_PERMISSION_DENIED Permission denied
+ * @retval #MEDIA_CONTROLLER_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #MEDIA_CONTROLLER_ERROR_INVALID_OPERATION Invalid operation
+ *
+ * @pre Create a media controller client handle by calling mc_client_create().
+ * @see mc_client_create()
+ * @see mc_client_destroy()
+ * @see mc_client_set_playlist_updated_cb()
+ */
+int mc_client_unset_playlist_updated_cb(mc_client_h client);
+
+/**
+ * @brief Sets the callback for monitoring the media controller server's subtitles display.
+ * @details The media controller client which calls this function will receive notifications from all media controller servers.
+ * @since_tizen 5.5
+ *
+ * @privlevel public
+ * @privilege %http://tizen.org/privilege/mediacontroller.client
+ *
+ * @param[in] client The handle of the media controller client
+ * @param[in] callback The callback to be invoked when the subtitles status is changed
+ * @param[in] user_data The user data to be passed to the callback function
+ * @return @c 0 on success,
+ * otherwise a negative error value
+ * @retval #MEDIA_CONTROLLER_ERROR_NONE Successful
+ * @retval #MEDIA_CONTROLLER_ERROR_PERMISSION_DENIED Permission denied
+ * @retval #MEDIA_CONTROLLER_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #MEDIA_CONTROLLER_ERROR_INVALID_OPERATION Invalid operation
+ * @retval #MEDIA_CONTROLLER_ERROR_OUT_OF_MEMORY Out of memory
+ *
+ * @pre Create a media controller client handle by calling mc_client_create().
+ * @see mc_client_create()
+ * @see mc_client_destroy()
+ * @see mc_client_unset_subtitles_updated_cb()
+ */
+int mc_client_set_subtitles_updated_cb(mc_client_h client, mc_bool_attribute_updated_cb callback, void *user_data);
+
+/**
+ * @brief Unsets the callback for monitoring the media controller server's subtitles display.
+ * @details The media controller client which calls this function will not receive notifications from all media controller servers.
+ * @since_tizen 5.5
+ *
+ * @privlevel public
+ * @privilege %http://tizen.org/privilege/mediacontroller.client
+ *
+ * @param[in] client The handle of the media controller client
+ * @return @c 0 on success,
+ * otherwise a negative error value
+ * @retval #MEDIA_CONTROLLER_ERROR_NONE Successful
+ * @retval #MEDIA_CONTROLLER_ERROR_PERMISSION_DENIED Permission denied
+ * @retval #MEDIA_CONTROLLER_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #MEDIA_CONTROLLER_ERROR_INVALID_OPERATION Invalid operation
+ *
+ * @pre Create a media controller client handle by calling mc_client_create().
+ * @see mc_client_create()
+ * @see mc_client_destroy()
+ * @see mc_client_set_subtitles_updated_cb()
+ */
+int mc_client_unset_subtitles_updated_cb(mc_client_h client);
+
+/**
+ * @brief Sets the callback for monitoring the media controller server's 360 mode display.
+ * @details The media controller client which calls this function will receive notifications from all media controller servers.
+ * @since_tizen 5.5
+ *
+ * @privlevel public
+ * @privilege %http://tizen.org/privilege/mediacontroller.client
+ *
+ * @param[in] client The handle of the media controller client
+ * @param[in] callback The callback to be invoked when the 360 mode is changed
+ * @param[in] user_data The user data to be passed to the callback function
+ * @return @c 0 on success,
+ * otherwise a negative error value
+ * @retval #MEDIA_CONTROLLER_ERROR_NONE Successful
+ * @retval #MEDIA_CONTROLLER_ERROR_PERMISSION_DENIED Permission denied
+ * @retval #MEDIA_CONTROLLER_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #MEDIA_CONTROLLER_ERROR_INVALID_OPERATION Invalid operation
+ * @retval #MEDIA_CONTROLLER_ERROR_OUT_OF_MEMORY Out of memory
+ *
+ * @pre Create a media controller client handle by calling mc_client_create().
+ * @see mc_client_create()
+ * @see mc_client_destroy()
+ * @see mc_client_unset_360_mode_updated_cb()
+ */
+int mc_client_set_360_mode_updated_cb(mc_client_h client, mc_bool_attribute_updated_cb callback, void *user_data);
+
+/**
+ * @brief Unsets the callback for monitoring the media controller server's 360 mode display.
+ * @details The media controller client which calls this function will not receive notifications from all media controller servers.
+ * @since_tizen 5.5
+ *
+ * @privlevel public
+ * @privilege %http://tizen.org/privilege/mediacontroller.client
+ *
+ * @param[in] client The handle of the media controller client
+ * @return @c 0 on success,
+ * otherwise a negative error value
+ * @retval #MEDIA_CONTROLLER_ERROR_NONE Successful
+ * @retval #MEDIA_CONTROLLER_ERROR_PERMISSION_DENIED Permission denied
+ * @retval #MEDIA_CONTROLLER_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #MEDIA_CONTROLLER_ERROR_INVALID_OPERATION Invalid operation
+ *
+ * @pre Create a media controller client handle by calling mc_client_create().
+ * @see mc_client_create()
+ * @see mc_client_destroy()
+ * @see mc_client_set_360_mode_updated_cb()
+ */
+int mc_client_unset_360_mode_updated_cb(mc_client_h client);
+
+/**
+ * @brief Sets the callback for monitoring the media controller server's display mode.
+ * @details The media controller client which calls this function will receive notifications from all media controller servers.
+ * @since_tizen 5.5
+ *
+ * @privlevel public
+ * @privilege %http://tizen.org/privilege/mediacontroller.client
+ *
+ * @param[in] client The handle of the media controller client
+ * @param[in] callback The callback to be invoked when the display mode is changed
+ * @param[in] user_data The user data to be passed to the callback function
+ * @return @c 0 on success,
+ * otherwise a negative error value
+ * @retval #MEDIA_CONTROLLER_ERROR_NONE Successful
+ * @retval #MEDIA_CONTROLLER_ERROR_PERMISSION_DENIED Permission denied
+ * @retval #MEDIA_CONTROLLER_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #MEDIA_CONTROLLER_ERROR_INVALID_OPERATION Invalid operation
+ * @retval #MEDIA_CONTROLLER_ERROR_OUT_OF_MEMORY Out of memory
+ *
+ * @pre Create a media controller client handle by calling mc_client_create().
+ * @see mc_client_create()
+ * @see mc_client_destroy()
+ * @see mc_client_unset_display_mode_updated_cb()
+ */
+int mc_client_set_display_mode_updated_cb(mc_client_h client, mc_display_mode_updated_cb callback, void *user_data);
+
+/**
+ * @brief Unsets the callback for monitoring the media controller server's display mode.
+ * @details The media controller client which calls this function will not receive notifications from all media controller servers.
+ * @since_tizen 5.5
+ *
+ * @privlevel public
+ * @privilege %http://tizen.org/privilege/mediacontroller.client
+ *
+ * @param[in] client The handle of the media controller client
+ * @return @c 0 on success,
+ * otherwise a negative error value
+ * @retval #MEDIA_CONTROLLER_ERROR_NONE Successful
+ * @retval #MEDIA_CONTROLLER_ERROR_PERMISSION_DENIED Permission denied
+ * @retval #MEDIA_CONTROLLER_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #MEDIA_CONTROLLER_ERROR_INVALID_OPERATION Invalid operation
+ *
+ * @pre Create a media controller client handle by calling mc_client_create().
+ * @see mc_client_create()
+ * @see mc_client_destroy()
+ * @see mc_client_set_display_mode_updated_cb()
+ */
+int mc_client_unset_display_mode_updated_cb(mc_client_h client);
+
+/**
+ * @brief Sets the callback for monitoring the media controller server's display rotation.
+ * @details The media controller client which calls this function will receive notifications from all media controller servers.
+ * @since_tizen 5.5
+ *
+ * @privlevel public
+ * @privilege %http://tizen.org/privilege/mediacontroller.client
+ *
+ * @param[in] client The handle of the media controller client
+ * @param[in] callback The callback to be invoked when the display rotation is changed
+ * @param[in] user_data The user data to be passed to the callback function
+ * @return @c 0 on success,
+ * otherwise a negative error value
+ * @retval #MEDIA_CONTROLLER_ERROR_NONE Successful
+ * @retval #MEDIA_CONTROLLER_ERROR_PERMISSION_DENIED Permission denied
+ * @retval #MEDIA_CONTROLLER_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #MEDIA_CONTROLLER_ERROR_INVALID_OPERATION Invalid operation
+ * @retval #MEDIA_CONTROLLER_ERROR_OUT_OF_MEMORY Out of memory
+ *
+ * @pre Create a media controller client handle by calling mc_client_create().
+ * @see mc_client_create()
+ * @see mc_client_destroy()
+ * @see mc_client_unset_display_rotation_updated_cb()
+ */
+int mc_client_set_display_rotation_updated_cb(mc_client_h client, mc_display_rotation_updated_cb callback, void *user_data);
+
+/**
+ * @brief Unsets the callback for monitoring the media controller server's display rotation.
+ * @details The media controller client which calls this function will not receive notifications from all media controller servers.
+ * @since_tizen 5.5
+ *
+ * @privlevel public
+ * @privilege %http://tizen.org/privilege/mediacontroller.client
+ *
+ * @param[in] client The handle of the media controller client
* @return @c 0 on success,
* otherwise a negative error value
* @retval #MEDIA_CONTROLLER_ERROR_NONE Successful
* @pre Create a media controller client handle by calling mc_client_create().
* @see mc_client_create()
* @see mc_client_destroy()
- * @see mc_client_set_playlist_updated_cb()
+ * @see mc_client_set_display_rotation_updated_cb()
*/
-int mc_client_unset_playlist_updated_cb(mc_client_h client);
+int mc_client_unset_display_rotation_updated_cb(mc_client_h client);
/**
* @brief Sets the callback for receiving the custom event from a media controller server.
* @pre Create a media controller client handle by calling mc_client_create().
* @see mc_client_create()
* @see mc_client_destroy()
- * @see mc_playlist_foreach_playlist()
*/
int mc_client_get_server_icon(mc_client_h client, const char *server_name, char **uri);
+/**
+ * @brief Gets the latest subtitles display status.
+ * @details The media controller client will get the most recently updated information from @a server_name.
+ * @since_tizen 5.5
+ *
+ * @privlevel public
+ * @privilege %http://tizen.org/privilege/mediacontroller.client
+ *
+ * @param[in] client The handle of the media controller client
+ * @param[in] server_name The app_id of the media controller server
+ * @param[out] enabled The status of the latest subtitles display
+ * @return @c 0 on success,
+ * otherwise a negative error value
+ * @retval #MEDIA_CONTROLLER_ERROR_NONE Successful
+ * @retval #MEDIA_CONTROLLER_ERROR_PERMISSION_DENIED Permission denied
+ * @retval #MEDIA_CONTROLLER_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #MEDIA_CONTROLLER_ERROR_INVALID_OPERATION Invalid operation
+ * @retval #MEDIA_CONTROLLER_ERROR_OUT_OF_MEMORY Out of memory
+ *
+ * @pre Create a media controller client handle by calling mc_client_create().
+ * @see mc_client_create()
+ * @see mc_client_destroy()
+ */
+int mc_client_get_server_subtitles_enabled(mc_client_h client, const char *server_name, bool *enabled);
+
+/**
+ * @brief Gets the latest 360 mode display status.
+ * @details The media controller client will get the most recently updated information from @a server_name.
+ * @since_tizen 5.5
+ *
+ * @privlevel public
+ * @privilege %http://tizen.org/privilege/mediacontroller.client
+ *
+ * @param[in] client The handle of the media controller client
+ * @param[in] server_name The app_id of the media controller server
+ * @param[out] enabled The status of the latest 360 mode display
+ * @return @c 0 on success,
+ * otherwise a negative error value
+ * @retval #MEDIA_CONTROLLER_ERROR_NONE Successful
+ * @retval #MEDIA_CONTROLLER_ERROR_PERMISSION_DENIED Permission denied
+ * @retval #MEDIA_CONTROLLER_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #MEDIA_CONTROLLER_ERROR_INVALID_OPERATION Invalid operation
+ * @retval #MEDIA_CONTROLLER_ERROR_OUT_OF_MEMORY Out of memory
+ *
+ * @pre Create a media controller client handle by calling mc_client_create().
+ * @see mc_client_create()
+ * @see mc_client_destroy()
+ */
+int mc_client_get_server_360_mode_enabled(mc_client_h client, const char *server_name, bool *enabled);
+
+/**
+ * @brief Gets the latest display mode.
+ * @details The media controller client will get the most recently updated information from @a server_name.
+ * @since_tizen 5.5
+ *
+ * @privlevel public
+ * @privilege %http://tizen.org/privilege/mediacontroller.client
+ *
+ * @remarks The default display mode is #MC_DISPLAY_MODE_FULL_SCREEN.
+ *
+ * @param[in] client The handle of the media controller client
+ * @param[in] server_name The app_id of the media controller server
+ * @param[out] mode The info of the latest display mode
+ * @return @c 0 on success,
+ * otherwise a negative error value
+ * @retval #MEDIA_CONTROLLER_ERROR_NONE Successful
+ * @retval #MEDIA_CONTROLLER_ERROR_PERMISSION_DENIED Permission denied
+ * @retval #MEDIA_CONTROLLER_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #MEDIA_CONTROLLER_ERROR_INVALID_OPERATION Invalid operation
+ * @retval #MEDIA_CONTROLLER_ERROR_OUT_OF_MEMORY Out of memory
+ *
+ * @pre Create a media controller client handle by calling mc_client_create().
+ * @see mc_client_create()
+ * @see mc_client_destroy()
+ */
+int mc_client_get_server_display_mode(mc_client_h client, const char *server_name, mc_display_mode_e *mode);
+
+/**
+ * @brief Gets the latest display rotation.
+ * @details The media controller client will get the most recently updated information from @a server_name.
+ * @since_tizen 5.5
+ *
+ * @privlevel public
+ * @privilege %http://tizen.org/privilege/mediacontroller.client
+ *
+ * @remarks The default display rotation is #MC_DISPLAY_ROTATION_NONE.
+ *
+ * @param[in] client The handle of the media controller client
+ * @param[in] server_name The app_id of the media controller server
+ * @param[out] rotation The info of the latest display rotation
+ * @return @c 0 on success,
+ * otherwise a negative error value
+ * @retval #MEDIA_CONTROLLER_ERROR_NONE Successful
+ * @retval #MEDIA_CONTROLLER_ERROR_PERMISSION_DENIED Permission denied
+ * @retval #MEDIA_CONTROLLER_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #MEDIA_CONTROLLER_ERROR_INVALID_OPERATION Invalid operation
+ * @retval #MEDIA_CONTROLLER_ERROR_OUT_OF_MEMORY Out of memory
+ *
+ * @pre Create a media controller client handle by calling mc_client_create().
+ * @see mc_client_create()
+ * @see mc_client_destroy()
+ */
+int mc_client_get_server_display_rotation(mc_client_h client, const char *server_name, mc_display_rotation_e *rotation);
+
+
/**
* @brief Gets the playback ability of the media controller server.
* @since_tizen 5.0
* @see mc_client_destroy()
* @see mc_client_get_latest_server_info()
* @see mc_client_foreach_server()
+ * @see mc_client_get_server_playback_ability()
+ * @see mc_client_get_server_display_mode_ability()
+ * @see mc_client_get_server_display_rotation_ability()
*/
int mc_client_get_server_ability_support(mc_client_h client, const char *server_name, mc_ability_e ability, mc_ability_support_e *support);
+/**
+ * @brief Gets the supported display mode of the updated media controller server.
+ * @since_tizen 5.5
+ *
+ * @privlevel public
+ * @privilege %http://tizen.org/privilege/mediacontroller.client
+ *
+ * @remarks If a display mode is not present in the @a supported_modes, then the server's support for this mode is #MC_ABILITY_SUPPORTED_NO and you can't send the corresponding command to the server. \n
+ *
+ * @param[in] client The handle of the media controller client
+ * @param[in] server_name The app_id of the media controller server
+ * @param[out] supported_modes The supported display mode, values of #mc_display_mode_e combined with bitwise 'or'.
+ * @return @c 0 on success,
+ * otherwise a negative error value
+ * @retval #MEDIA_CONTROLLER_ERROR_NONE Successful
+ * @retval #MEDIA_CONTROLLER_ERROR_PERMISSION_DENIED Permission denied
+ * @retval #MEDIA_CONTROLLER_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #MEDIA_CONTROLLER_ERROR_INVALID_OPERATION Invalid operation
+ * @retval #MEDIA_CONTROLLER_ERROR_OUT_OF_MEMORY Out of memory
+ *
+ * @pre Create a media controller client handle by calling mc_client_create().
+ * @pre Get a server name handle by calling mc_client_create().
+ * @see mc_client_create()
+ * @see mc_client_destroy()
+ * @see mc_client_get_latest_server_info()
+ * @see mc_client_foreach_server()
+ * @see mc_client_get_server_playback_ability()
+ * @see mc_client_get_server_ability_support()
+ * @see mc_client_get_server_display_rotation_ability()
+ */
+int mc_client_get_server_display_mode_ability(mc_client_h client, const char *server_name, unsigned int *supported_modes);
+
+/**
+ * @brief Gets the supported display rotation of the updated media controller server.
+ * @since_tizen 5.5
+ *
+ * @privlevel public
+ * @privilege %http://tizen.org/privilege/mediacontroller.client
+ *
+ * @remarks If a display rotation is not present in the @a supported_rotations, then the server's support for this mode is #MC_ABILITY_SUPPORTED_NO and you can't send the corresponding command to the server. \n
+ *
+ * @param[in] client The handle of the media controller client
+ * @param[in] server_name The app_id of the media controller server
+ * @param[out] supported_rotations The supported display rotation, values of #mc_display_rotation_e combined with bitwise 'or'
+ * @return @c 0 on success,
+ * otherwise a negative error value
+ * @retval #MEDIA_CONTROLLER_ERROR_NONE Successful
+ * @retval #MEDIA_CONTROLLER_ERROR_PERMISSION_DENIED Permission denied
+ * @retval #MEDIA_CONTROLLER_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #MEDIA_CONTROLLER_ERROR_INVALID_OPERATION Invalid operation
+ * @retval #MEDIA_CONTROLLER_ERROR_OUT_OF_MEMORY Out of memory
+ *
+ * @pre Create a media controller client handle by calling mc_client_create().
+ * @pre Get a server name handle by calling mc_client_create().
+ * @see mc_client_create()
+ * @see mc_client_destroy()
+ * @see mc_client_get_latest_server_info()
+ * @see mc_client_foreach_server()
+ * @see mc_client_get_server_playback_ability()
+ * @see mc_client_get_server_ability_support()
+ * @see mc_client_get_server_display_mode_ability()
+ */
+int mc_client_get_server_display_rotation_ability(mc_client_h client, const char *server_name, unsigned int *supported_rotations);
+
/**
* @brief Retrieves all created servers.
* @details This function gets all created media controller servers.
*/
int mc_client_send_search_cmd(mc_client_h client, const char *server_name, mc_search_h search, char **request_id);
+/**
+ * @brief Sends the subtitles command to server.
+ * @details If the server sends the result of the command, the media controller client will get the result of the subtitles command by mc_cmd_reply_received_cb() callback.
+ * @since_tizen 5.5
+ *
+ * @privlevel public
+ * @privilege %http://tizen.org/privilege/mediacontroller.client
+ *
+ * @remarks The @a request_id should be released using free().\n
+ * If the @a request_id is null, the server will not send the reply of the command.\n
+ * If the @a server_name application doesn't support the subtitles command, this function will return #MEDIA_CONTROLLER_ERROR_ABILITY_LIMITED_BY_SERVER_APP.
+ *
+ * @param[in] client The handle of the media controller client
+ * @param[in] server_name The app_id of the media controller server
+ * @param[in] enable The request status to send to media controller server
+ * @param[out] request_id The id of the command request, it will be passed to the mc_cmd_reply_received_cb() function
+ * @return @c 0 on success,
+ * otherwise a negative error value
+ * @retval #MEDIA_CONTROLLER_ERROR_NONE Successful
+ * @retval #MEDIA_CONTROLLER_ERROR_PERMISSION_DENIED Permission denied
+ * @retval #MEDIA_CONTROLLER_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #MEDIA_CONTROLLER_ERROR_INVALID_OPERATION Invalid operation
+ * @retval #MEDIA_CONTROLLER_ERROR_OUT_OF_MEMORY Out of memory
+ * @retval #MEDIA_CONTROLLER_ERROR_ABILITY_LIMITED_BY_SERVER_APP Limited by server application
+ *
+ * @pre Create a media controller client handle by calling mc_client_create().
+ * @see mc_client_create()
+ * @see mc_client_set_cmd_reply_received_cb()
+ */
+int mc_client_send_subtitles_cmd(mc_client_h client, const char *server_name, bool enable, char **request_id);
+
+/**
+ * @brief Sends the 360 mode command to server.
+ * @details If the server sends the result of the command, the media controller client will get the result of the 360 mode command by mc_cmd_reply_received_cb() callback.
+ * @since_tizen 5.5
+ *
+ * @privlevel public
+ * @privilege %http://tizen.org/privilege/mediacontroller.client
+ *
+ * @remarks The @a request_id should be released using free().\n
+ * If the @a request_id is null, the server will not send the reply of the command.\n
+ * If the @a server_name application doesn't support the 360 mode command, this function will return #MEDIA_CONTROLLER_ERROR_ABILITY_LIMITED_BY_SERVER_APP.
+ *
+ * @param[in] client The handle of the media controller client
+ * @param[in] server_name The app_id of the media controller server
+ * @param[in] enable The request status to send to media controller server
+ * @param[out] request_id The id of the command request, it will be passed to the mc_cmd_reply_received_cb() function
+ * @return @c 0 on success,
+ * otherwise a negative error value
+ * @retval #MEDIA_CONTROLLER_ERROR_NONE Successful
+ * @retval #MEDIA_CONTROLLER_ERROR_PERMISSION_DENIED Permission denied
+ * @retval #MEDIA_CONTROLLER_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #MEDIA_CONTROLLER_ERROR_INVALID_OPERATION Invalid operation
+ * @retval #MEDIA_CONTROLLER_ERROR_OUT_OF_MEMORY Out of memory
+ * @retval #MEDIA_CONTROLLER_ERROR_ABILITY_LIMITED_BY_SERVER_APP Limited by server application
+ *
+ * @pre Create a media controller client handle by calling mc_client_create().
+ * @see mc_client_create()
+ * @see mc_client_set_cmd_reply_received_cb()
+ */
+int mc_client_send_360_mode_cmd(mc_client_h client, const char *server_name, bool enable, char **request_id);
+
+/**
+ * @brief Sends the display mode command to server.
+ * @details If the server sends the result of the command, the media controller client will get the result of the display mode command by mc_cmd_reply_received_cb() callback.
+ * @since_tizen 5.5
+ *
+ * @privlevel public
+ * @privilege %http://tizen.org/privilege/mediacontroller.client
+ *
+ * @remarks The @a request_id should be released using free().\n
+ * If the @a request_id is null, the server will not send the reply of the command.\n
+ * If the @a server_name application doesn't support the display mode command, this function will return #MEDIA_CONTROLLER_ERROR_ABILITY_LIMITED_BY_SERVER_APP.
+ *
+ * @param[in] client The handle of the media controller client
+ * @param[in] server_name The app_id of the media controller server
+ * @param[in] mode The display mode to send to media controller server
+ * @param[out] request_id The id of the command request, it will be passed to the mc_cmd_reply_received_cb() function
+ * @return @c 0 on success,
+ * otherwise a negative error value
+ * @retval #MEDIA_CONTROLLER_ERROR_NONE Successful
+ * @retval #MEDIA_CONTROLLER_ERROR_PERMISSION_DENIED Permission denied
+ * @retval #MEDIA_CONTROLLER_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #MEDIA_CONTROLLER_ERROR_INVALID_OPERATION Invalid operation
+ * @retval #MEDIA_CONTROLLER_ERROR_OUT_OF_MEMORY Out of memory
+ * @retval #MEDIA_CONTROLLER_ERROR_ABILITY_LIMITED_BY_SERVER_APP Limited by server application
+ *
+ * @pre Create a media controller client handle by calling mc_client_create().
+ * @see mc_client_create()
+ * @see mc_client_set_cmd_reply_received_cb()
+ */
+int mc_client_send_display_mode_cmd(mc_client_h client, const char *server_name, mc_display_mode_e mode, char **request_id);
+
+/**
+ * @brief Sends the display rotation command to server.
+ * @details If the server sends the result of the command, the media controller client will get the result of the display rotation command by mc_cmd_reply_received_cb() callback.
+ * @since_tizen 5.5
+ *
+ * @privlevel public
+ * @privilege %http://tizen.org/privilege/mediacontroller.client
+ *
+ * @remarks The @a request_id should be released using free().\n
+ * If the @a request_id is null, the server will not send the reply of the command.\n
+ * If the @a server_name application doesn't support the display rotation command, this function will return #MEDIA_CONTROLLER_ERROR_ABILITY_LIMITED_BY_SERVER_APP.
+ *
+ * @param[in] client The handle of the media controller client
+ * @param[in] server_name The app_id of the media controller server
+ * @param[in] rotation The display rotation to send to media controller server
+ * @param[out] request_id The id of the command request, it will be passed to the mc_cmd_reply_received_cb() function
+ * @return @c 0 on success,
+ * otherwise a negative error value
+ * @retval #MEDIA_CONTROLLER_ERROR_NONE Successful
+ * @retval #MEDIA_CONTROLLER_ERROR_PERMISSION_DENIED Permission denied
+ * @retval #MEDIA_CONTROLLER_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #MEDIA_CONTROLLER_ERROR_INVALID_OPERATION Invalid operation
+ * @retval #MEDIA_CONTROLLER_ERROR_OUT_OF_MEMORY Out of memory
+ * @retval #MEDIA_CONTROLLER_ERROR_ABILITY_LIMITED_BY_SERVER_APP Limited by server application
+ *
+ * @pre Create a media controller client handle by calling mc_client_create().
+ * @see mc_client_create()
+ * @see mc_client_set_cmd_reply_received_cb()
+ */
+int mc_client_send_display_rotation_cmd(mc_client_h client, const char *server_name, mc_display_rotation_e rotation, char **request_id);
+
/**
* @brief Destroys client.
* @since_tizen @if MOBILE 2.4 @elseif WEARABLE 3.0 @endif
int mc_db_update_whole_metadata(const char *server_name,
const char *title, const char *artist, const char *album, const char *author, const char *genre, const char *duration, const char *date,
const char *copyright, const char *description, const char *track_num, const char *picture, const char *season, const char *episode, const char *resolution);
-int mc_db_update_shuffle_mode(const char *table_name, int shuffle_mode);
-int mc_db_update_repeat_mode(const char *table_name, int repeat_mode);
int mc_db_update_icon_uri(const char *server_name, const char *uri);
int mc_db_update_ability_supported(const char *server_name, const media_controller_ability_s ability);
int mc_db_get_icon_uri(sqlite3 *handle, const char *server_name, char **uri);
int mc_db_get_ability_supported(sqlite3 *handle, const char *server_name, int ability, mc_ability_support_e *supported);
int mc_db_get_pb_action_ability(sqlite3 *handle, const char *server_name, mc_playback_ability_h *ability);
+int _mc_db_get_display_mode_ability(sqlite3 *handle, const char *server_name, unsigned int *ability);
+int _mc_db_get_display_rotation_ability(sqlite3 *handle, const char *server_name, unsigned int *ability);
int _mc_db_get_playlist_count(sqlite3 *handle, const char *server_name);
int mc_db_get_foreach_playlist(sqlite3 *handle, const char *server_name, mc_playlist_cb callback, void *user_data);
gboolean _mc_db_is_playlist_exist(sqlite3 *handle, const char *server_name, const char *playlist_name);
int mc_db_remove_playlist(const char *server_name, const char *playlist_name);
int mc_db_update_playlist(const char *server_name, const char *playlist_name, bundle_raw *bundle_data, int bundle_size);
int _mc_db_add_playlist(const char *server_name, const char *playlist_name);
-
+int _mc_db_update_server_attribute(const char *server_name, const char *attribute, int value);
+int _mc_db_get_subtitles_enabled(sqlite3 *handle, const char *server_name, bool *enabled);
+int _mc_db_get_360_mode_enabled(sqlite3 *handle, const char *server_name, bool *enabled);
+int _mc_db_get_display_mode(sqlite3 *handle, const char *server_name, mc_display_mode_e *mode);
+int _mc_db_get_display_rotation(sqlite3 *handle, const char *server_name, mc_display_rotation_e *rotation);
#endif /*__TIZEN_MULTIMEDIA_MEDIA_CONTROLLER_DB_H__*/
#define MC_DBUS_SIGNAL_NAME_SHUFFLE_ABILITY "shuffle_ability"
#define MC_DBUS_SIGNAL_NAME_REPEAT_ABILITY "repeat_ability"
#define MC_DBUS_SIGNAL_NAME_ABILITY_SUPPORT "ability_support"
+#define MC_DBUS_SIGNAL_NAME_DP_MODE_ABILITY "display_mode_ability"
+#define MC_DBUS_SIGNAL_NAME_DP_ROTATION_ABILITY "display_rotation_ability"
+#define MC_DBUS_SIGNAL_NAME_SEARCH_CMD "search_cmd"
+#define MC_DBUS_SIGNAL_NAME_SUBTITLES "subtitles"
+#define MC_DBUS_SIGNAL_NAME_DISPLAY_MODE "display_mode"
+#define MC_DBUS_SIGNAL_NAME_DISPLAY_ROTATION "display_rotation"
+#define MC_DBUS_SIGNAL_NAME_360 "spherical_mode"
-#define MC_DBUS_SIGNAL_NAME_SEARCH_CMD "search_cmd"
#ifdef TIZEN_FEATURE_COMPATIBILITY
#define MC_DBUS_SIGNAL_NAME_PLAYBACK_STATE_CMD "pb_state_cmd"
#define MC_DBUS_SIGNAL_NAME_CUSTOM_COMMAND "custom_command"
#define MC_COMMAND_CUSTOMACTION "_custom_action_"
#define MC_COMMAND_CMDREPLY "_cmd_reply_"
#define MC_COMMAND_SEARCH "_search_cmd_"
+#define MC_COMMAND_SUBTITLES "_subtitles_cmd_"
+#define MC_COMMAND_DISPLAYMODE "_display_mode_cmd_"
+#define MC_COMMAND_DISPLAYROTATION "_display_rotation_cmd_"
+#define MC_COMMAND_360 "360_cmd_"
+
+
+
#ifdef TIZEN_FEATURE_COMPATIBILITY
#define MC_COMMAND_PLAYBACKSTATE "_pb_state_cmd_"
#define MC_COMMAND_CUSTOM "_custom_cmd_"
#define MC_EVENT_REPLY "_event_reply_"
-#define MC_DB_CMD_UPDATE_PLAYBACK "DB_CMD_UPDATE_PLAYBACK" /* Update Server Playback info*/
-#define MC_DB_CMD_UPDATE_META "DB_CMD_UPDATE_META" /* Update Server Meta info*/
-#define MC_DB_CMD_UPDATE_SHUFFLE "DB_CMD_UPDATE_SHUFFLE" /* Update Server Shuffle mode*/
-#define MC_DB_CMD_UPDATE_REPEAT "DB_CMD_UPDATE_REPEAT" /* Update Server Repeat mode*/
-#define MC_DB_CMD_UPDATE_LATEST "DB_CMD_UPDATE_LATEST" /* Update Latest Server info*/
-#define MC_DB_CMD_UPDATE_PLAYLIST "DB_CMD_UPDATE_PLAYLIST" /* Update Server Playlist*/
-#define MC_DB_CMD_ADD_PLAYLIST "DB_CMD_ADD_PLAYLIST" /* Add new Server Playlist*/
-#define MC_DB_CMD_UPDATE_ICON "DB_CMD_UPDATE_ICON" /* Update Server Icon*/
-#define MC_DB_CMD_UPDATE_ABILITY "DB_CMD_UPDATE_ABILITY" /* Update Server abilities*/
-#define MC_DB_CMD_REMOVE_PLAYLIST "DB_CMD_REMOVE_PLAYLIST" /* Remove Playlist*/
+#define MC_DB_CMD_UPDATE_PLAYBACK "DB_CMD_UPDATE_PLAYBACK" /* Update Server Playback info */
+#define MC_DB_CMD_UPDATE_META "DB_CMD_UPDATE_META" /* Update Server Meta info */
+#define MC_DB_CMD_UPDATE_SHUFFLE "DB_CMD_UPDATE_SHUFFLE" /* Update Server Shuffle mode */
+#define MC_DB_CMD_UPDATE_REPEAT "DB_CMD_UPDATE_REPEAT" /* Update Server Repeat mode */
+#define MC_DB_CMD_UPDATE_LATEST "DB_CMD_UPDATE_LATEST" /* Update Latest Server info */
+#define MC_DB_CMD_UPDATE_PLAYLIST "DB_CMD_UPDATE_PLAYLIST" /* Update Server Playlist */
+#define MC_DB_CMD_ADD_PLAYLIST "DB_CMD_ADD_PLAYLIST" /* Add new Server Playlist */
+#define MC_DB_CMD_UPDATE_ICON "DB_CMD_UPDATE_ICON" /* Update Server Icon */
+#define MC_DB_CMD_UPDATE_ABILITY "DB_CMD_UPDATE_ABILITY" /* Update Server abilities */
+#define MC_DB_CMD_REMOVE_PLAYLIST "DB_CMD_REMOVE_PLAYLIST" /* Remove Playlist */
+#define MC_DB_CMD_UPDATE_SUBTITLES "DB_CMD_UPDATE_SUBTITLES" /* Update subtitles */
+#define MC_DB_CMD_UPDATE_DISPLAY_MODE "DB_CMD_UPDATE_DISPLAY_MODE" /* Update display mode */
+#define MC_DB_CMD_UPDATE_DISPLAY_ROTATION "DB_CMD_UPDATE_DISPLAY_ROTATION" /* Update display rotation */
+#define MC_DB_CMD_UPDATE_360 "DB_CMD_UPDATE_360" /* Update 360 mode */
+
#define DEFAULT_USER_UID 5001 /* owner */
MC_CLIENT_EVENT_SHUFFLE_ABILITY = MC_SUBSCRIPTION_TYPE_SHUFFLE_ABILITY,
MC_CLIENT_EVENT_REPEAT_ABILITY = MC_SUBSCRIPTION_TYPE_REPEAT_ABILITY,
MC_CLIENT_EVENT_ABILITY_SUPPORT = MC_SUBSCRIPTION_TYPE_ABILITY_SUPPORT,
+ MC_CLIENT_EVENT_DISPLAY_MODE_ABILITY = MC_SUBSCRIPTION_TYPE_DISPLAY_MODE_ABILITY,
+ MC_CLIENT_EVENT_DISPLAY_ROTATION_ABILITY = MC_SUBSCRIPTION_TYPE_DISPLAY_ROTATION_ABILITY,
+ MC_CLIENT_EVENT_SUBTITLES,
+ MC_CLIENT_EVENT_DISPLAY_MODE,
+ MC_CLIENT_EVENT_DISPLAY_ROTATION,
+ MC_CLIENT_EVENT_360,
MC_CLIENT_EVENT_CMD_REPLY,
MC_CLIENT_EVENT_SERVER_CUSTOM, //receive event from server to client
#ifdef TIZEN_FEATURE_COMPATIBILITY
MC_SERVER_EVENT_CLIENT_CUSTOM, //received event from client
MC_SERVER_EVENT_REPLY_CUSTOM, //received event reply from client
MC_SERVER_EVENT_SEARCH,
+ MC_SERVER_EVENT_SUBTITLES,
+ MC_SERVER_EVENT_DISPLAY_MODE,
+ MC_SERVER_EVENT_DISPLAY_ROTATION,
+ MC_SERVER_EVENT_360,
#ifdef TIZEN_FEATURE_COMPATIBILITY
MC_SERVER_EVENT_PLAYBACK_STATE, //deprecated. use action instead of it.
MC_SERVER_EVENT_CLIENT_CUSTOM_OLD, //received event from client, deprecated
MC_SERVER_EVENT_MAX,
} mc_server_receive_event_e;
-#define PLAYBACK_ACTION_ABILITY MC_SERVER_EVENT_PLAYBACK_ACTION + 30
+#define PLAYBACK_ACTION_ABILITY MC_SERVER_EVENT_PLAYBACK_ACTION + 20
+#define DISPLAY_MODE_ABILITY MC_SERVER_EVENT_PLAYBACK_ACTION + 35
+#define DISPLAY_ROTATION_ABILITY MC_SERVER_EVENT_PLAYBACK_ACTION + 50
+
typedef struct {
char *server_name;
int mc_util_bundle_to_string(bundle *bundle_data, char **str_data);
gboolean _mc_util_is_valid_playback_action(mc_playback_action_e action);
gboolean _mc_util_is_valid_subscription_type(const mc_subscription_type_e subscription_type);
+gboolean _mc_util_is_valid_display_mode(mc_display_mode_e mode);
void _mc_util_set_bit(int bit_num, gboolean set, unsigned long long *value);
gboolean _mc_util_is_true_bit(unsigned long long value, int bit_num);
const char * _mc_util_replace_null(const char *data);
*
* @remarks The callback is called in the dbus event loop.\n
* If @a request_id is not null, the server should send the reply to the client with the @a request_id. \n
- * The @a client_name and @ request_id should not be released by the application. \n
- * The @a client_name and @ request_id can be used only in the callback. To use outside, make a copy.
+ * The @a client_name and @a request_id should not be released by the application. \n
+ * The @a client_name and @a request_id can be used only in the callback. To use outside, make a copy.
*
* @param[in] client_name The app_id of the media controller client
* @param[in] request_id The request_id of the media controller client
*
* @remarks The callback is called in the dbus event loop.\n
* If @a request_id is not null, the server should send the reply to the client with the @a request_id.\n
- * The @a client_name and @ request_id should not be released by the application. \n
- * The @a client_name and @ request_id can be used only in the callback. To use outside, make a copy.
+ * The @a client_name and @a request_id should not be released by the application. \n
+ * The @a client_name and @a request_id can be used only in the callback. To use outside, make a copy.
*
* @param[in] client_name The app_id of the media controller client
* @param[in] request_id The request_id of the media controller client
*
* @remarks The callback is called in the dbus event loop.\n
* If @a request_id is not null, the server should send the reply to the client with the @a request_id.\n
- * The @a client_name and @ request_id should not be released by the application. \n
- * The @a client_name and @ request_id can be used only in the callback. To use outside, make a copy.
+ * The @a client_name and @a request_id should not be released by the application. \n
+ * The @a client_name and @a request_id can be used only in the callback. To use outside, make a copy.
*
* @param[in] client_name The app_id of the media controller client
* @param[in] request_id The request_id of the media controller client
*
* @remarks The callback is called in the dbus event loop.\n
* If @a request_id is not null, the server should send the reply to the client with the @a request_id.\n
- * The @a client_name and @ request_id should not be released by the application. \n
- * The @a client_name and @ request_id can be used only in the callback. To use outside, make a copy.
+ * The @a client_name and @a request_id should not be released by the application. \n
+ * The @a client_name and @a request_id can be used only in the callback. To use outside, make a copy.
*
* @param[in] client_name The app_id of the media controller client
* @param[in] request_id The request_id of the media controller client
*
* @remarks The callback is called in the dbus event loop. \n
* If @a request_id is not null, the server should send the reply to the client with the @a request_id.\n
- * The @a client_name, @ request_id, @ playlist_name and @ index should not be released by the application. \n
- * The @a client_name, @ request_id, @ playlist_name and @ index can be used only in the callback. To use outside, make a copy.
+ * The @a client_name, @a request_id, @ playlist_name and @ index should not be released by the application. \n
+ * The @a client_name, @a request_id, @ playlist_name and @ index can be used only in the callback. To use outside, make a copy.
*
* @param[in] client_name The app_id of the media controller client
* @param[in] request_id The request_id of the media controller client
*
* @remarks The callback is called in the dbus event loop. @a data should be released using bundle_free().\n
* If @a request_id is not null, the server should send the reply to the client with the @a request_id.\n
- * The @a client_name, @ request_id and @ command should not be released by the application. \n
- * The @a client_name, @ request_id and @ command can be used only in the callback. To use outside, make a copy.
+ * The @a client_name, @a request_id and @ command should not be released by the application. \n
+ * The @a client_name, @a request_id and @ command can be used only in the callback. To use outside, make a copy.
*
* @param[in] client_name The app_id of the media controller client
* @param[in] request_id The id of the command request
*/
typedef void (*mc_server_search_cmd_received_cb)(const char *client_name, const char *request_id, mc_search_h search, void *user_data);
+/**
+ * @brief Called when the server receives the subtite and 360 mode command from the client.
+ * @since_tizen 5.5
+ *
+ * @remarks The callback is called in the dbus event loop.\n
+ * If @a request_id is not null, the server should send the reply to the client with the @a request_id.\n
+ * The @a client_name and @a request_id should not be released by the application. \n
+ * The @a client_name and @a request_id can be used only in the callback. To use outside, make a copy.
+ *
+ * @param[in] client_name The app_id of the media controller client
+ * @param[in] request_id The request_id of the media controller client
+ * @param[in] enabled The received command
+ * @param[in] user_data The user data passed from the callback function
+ *
+ * @pre mc_server_set_subtitles_cmd_received_cb() or mc_server_set_360_mode_cmd_received_cb()
+ *
+ * @see mc_server_set_subtitles_cmd_received_cb()
+ * @see mc_server_set_360_mode_cmd_received_cb()
+ * @see mc_server_send_cmd_reply()
+ */
+typedef void (*mc_server_enable_cmd_received_cb)(const char* client_name, const char *request_id, bool enabled, void *user_data);
+
+/**
+ * @brief Called when the server receives the display mode command from the client.
+ * @since_tizen 5.5
+ *
+ * @remarks The callback is called in the dbus event loop.\n
+ * If @a request_id is not null, the server should send the reply to the client with the @a request_id.\n
+ * The @a client_name and @a request_id should not be released by the application. \n
+ * The @a client_name and @a request_id can be used only in the callback. To use outside, make a copy.
+ *
+ * @param[in] client_name The app_id of the media controller client
+ * @param[in] request_id The request_id of the media controller client
+ * @param[in] mode The received display mode
+ * @param[in] user_data The user data passed from the mc_server_set_display_mode_cmd_received_cb() function
+ *
+ * @pre mc_server_set_display_mode_cmd_received_cb()
+ *
+ * @see mc_server_set_display_mode_cmd_received_cb()
+ * @see mc_server_send_cmd_reply()
+ */
+typedef void (*mc_server_display_mode_cmd_received_cb)(const char* client_name, const char *request_id, mc_display_mode_e mode, void *user_data);
+
+/**
+ * @brief Called when the server receives the display rotation command from the client.
+ * @since_tizen 5.5
+ *
+ * @remarks The callback is called in the dbus event loop.\n
+ * If @a request_id is not null, the server should send the reply to the client with the @a request_id.\n
+ * The @a client_name and @a request_id should not be released by the application. \n
+ * The @a client_name and @a request_id can be used only in the callback. To use outside, make a copy.
+ *
+ * @param[in] client_name The app_id of the media controller client
+ * @param[in] request_id The request_id of the media controller client
+ * @param[in] rotation The received display rotation
+ * @param[in] user_data The user data passed from the mc_server_set_display_mode_cmd_received_cb() function
+ *
+ * @pre mc_server_set_display_rotation_cmd_received_cb()
+ *
+ * @see mc_server_set_display_rotation_cmd_received_cb()
+ * @see mc_server_send_cmd_reply()
+ */
+typedef void (*mc_server_display_rotation_cmd_received_cb)(const char* client_name, const char *request_id, mc_display_rotation_e rotation, void *user_data);
+
/**
* @brief Creates a media controller server.
* @since_tizen @if MOBILE 2.4 @elseif WEARABLE 3.0 @endif
*/
int mc_server_update_repeat_mode(mc_server_h server, mc_repeat_mode_e mode);
+/**
+ * @brief Updates the modified subtitles display status.
+ * @details If this function is called, the updated subtitles display status will be sent to all clients.
+ * @since_tizen 5.5
+ *
+ * @privlevel public
+ * @privilege %http://tizen.org/privilege/mediacontroller.server
+ *
+ * @remarks The default subtitles display is false.
+ *
+ * @param[in] server The handle to media controller server
+ * @param[in] enabled The subtitles display status to update the latest status
+ * @return @c 0 on success,
+ * otherwise a negative error value
+ * @retval #MEDIA_CONTROLLER_ERROR_NONE Successful
+ * @retval #MEDIA_CONTROLLER_ERROR_PERMISSION_DENIED Permission denied
+ * @retval #MEDIA_CONTROLLER_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #MEDIA_CONTROLLER_ERROR_INVALID_OPERATION Invalid operation
+ * @retval #MEDIA_CONTROLLER_ERROR_OUT_OF_MEMORY Out of memory
+ *
+ * @pre Create a media controller server handle by calling mc_server_create().
+ * @see mc_server_create()
+ * @see mc_server_destroy()
+ */
+int mc_server_update_subtitles_enabled(mc_server_h server, bool enabled);
+
+/**
+ * @brief Updates the modified 360 mode display status.
+ * @details If this function is called, the updated 360 mode display status will be sent to all clients.
+ * @since_tizen 5.5
+ *
+ * @privlevel public
+ * @privilege %http://tizen.org/privilege/mediacontroller.server
+ *
+ * @remarks The default 360 mode display is false.
+ *
+ * @param[in] server The handle to media controller server
+ * @param[in] enabled The 360 mode display status to update the latest status
+ * @return @c 0 on success,
+ * otherwise a negative error value
+ * @retval #MEDIA_CONTROLLER_ERROR_NONE Successful
+ * @retval #MEDIA_CONTROLLER_ERROR_PERMISSION_DENIED Permission denied
+ * @retval #MEDIA_CONTROLLER_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #MEDIA_CONTROLLER_ERROR_INVALID_OPERATION Invalid operation
+ * @retval #MEDIA_CONTROLLER_ERROR_OUT_OF_MEMORY Out of memory
+ *
+ * @pre Create a media controller server handle by calling mc_server_create().
+ * @see mc_server_create()
+ * @see mc_server_destroy()
+ */
+int mc_server_update_360_mode_enabled(mc_server_h server, bool enabled);
+
+/**
+ * @brief Updates the modified display mode.
+ * @details If this function is called, the updated display mode information will be sent to all clients.
+ * @since_tizen 5.5
+ *
+ * @privlevel public
+ * @privilege %http://tizen.org/privilege/mediacontroller.server
+ *
+ * @remarks The default display mode is #MC_DISPLAY_MODE_FULL_SCREEN.
+ *
+ * @param[in] server The handle to media controller server
+ * @param[in] mode The display mode to update the latest status
+ * @return @c 0 on success,
+ * otherwise a negative error value
+ * @retval #MEDIA_CONTROLLER_ERROR_NONE Successful
+ * @retval #MEDIA_CONTROLLER_ERROR_PERMISSION_DENIED Permission denied
+ * @retval #MEDIA_CONTROLLER_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #MEDIA_CONTROLLER_ERROR_INVALID_OPERATION Invalid operation
+ * @retval #MEDIA_CONTROLLER_ERROR_OUT_OF_MEMORY Out of memory
+ *
+ * @pre Create a media controller server handle by calling mc_server_create().
+ * @see mc_server_create()
+ * @see mc_server_destroy()
+ */
+int mc_server_update_display_mode(mc_server_h server, mc_display_mode_e mode);
+
+/**
+ * @brief Updates the modified display rotation.
+ * @details If this function is called, the updated display rotation information will be sent to all clients.
+ * @since_tizen 5.5
+ *
+ * @privlevel public
+ * @privilege %http://tizen.org/privilege/mediacontroller.server
+ *
+ * @remarks The default display rotation is #MC_DISPLAY_ROTATION_NONE.
+ *
+ * @param[in] server The handle to media controller server
+ * @param[in] rotation The display rotation to update the latest status
+ * @return @c 0 on success,
+ * otherwise a negative error value
+ * @retval #MEDIA_CONTROLLER_ERROR_NONE Successful
+ * @retval #MEDIA_CONTROLLER_ERROR_PERMISSION_DENIED Permission denied
+ * @retval #MEDIA_CONTROLLER_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #MEDIA_CONTROLLER_ERROR_INVALID_OPERATION Invalid operation
+ * @retval #MEDIA_CONTROLLER_ERROR_OUT_OF_MEMORY Out of memory
+ *
+ * @pre Create a media controller server handle by calling mc_server_create().
+ * @see mc_server_create()
+ * @see mc_server_destroy()
+ */
+int mc_server_update_display_rotation(mc_server_h server, mc_display_rotation_e rotation);
+
/**
* @brief Sets the callback for receiving playback action command from client.
* @since_tizen @if MOBILE 4.0 @elseif WEARABLE 5.0 @endif
*/
int mc_server_unset_custom_cmd_received_cb(mc_server_h server);
+/**
+ * @brief Sets the callback for receiving subtitles command from client.
+ * @since_tizen 5.5
+ *
+ * @privlevel public
+ * @privilege %http://tizen.org/privilege/mediacontroller.server
+ *
+ * @remarks It is mandatory to set the corresponding ability's support using mc_server_set_ability_support(). \n
+ * If not, server can't receive command from clients. It will let the client know about the server's abilities and what commands the client can send.
+ *
+ * @param[in] server The handle to media controller server
+ * @param[in] callback The callback to be invoked when media controller server receives subtitles command from client
+ * @param[in] user_data The user data to be passed to the callback function
+ * @return @c 0 on success,
+ * otherwise a negative error value
+ * @retval #MEDIA_CONTROLLER_ERROR_NONE Successful
+ * @retval #MEDIA_CONTROLLER_ERROR_PERMISSION_DENIED Permission denied
+ * @retval #MEDIA_CONTROLLER_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #MEDIA_CONTROLLER_ERROR_INVALID_OPERATION Invalid operation
+ * @retval #MEDIA_CONTROLLER_ERROR_OUT_OF_MEMORY Out of memory
+ *
+ * @pre Create a media controller server handle by calling mc_server_create().
+ * @see mc_server_create()
+ * @see mc_server_destroy()
+ * @see mc_server_unset_subtitles_cmd_received_cb()
+ * @see mc_server_set_ability_support()
+ */
+int mc_server_set_subtitles_cmd_received_cb(mc_server_h server, mc_server_enable_cmd_received_cb callback, void *user_data);
+
+/**
+ * @brief Unsets the callback for receiving subtitles command from client.
+ * @since_tizen 5.5
+ *
+ * @privlevel public
+ * @privilege %http://tizen.org/privilege/mediacontroller.server
+ *
+ * @remarks It is mandatory to set the corresponding ability's support using mc_server_set_ability_support(). \n
+ * If not, server can't receive command from clients. It will let the client know about the server's abilities and what commands the client can send.
+ *
+ * @param[in] server The handle to media controller server
+ * @return @c 0 on success,
+ * otherwise a negative error value
+ * @retval #MEDIA_CONTROLLER_ERROR_NONE Successful
+ * @retval #MEDIA_CONTROLLER_ERROR_PERMISSION_DENIED Permission denied
+ * @retval #MEDIA_CONTROLLER_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #MEDIA_CONTROLLER_ERROR_INVALID_OPERATION Invalid operation
+ *
+ * @pre Create a media controller server handle by calling mc_server_create().
+ * @see mc_server_create()
+ * @see mc_server_destroy()
+ * @see mc_server_set_subtitles_cmd_received_cb()
+ * @see mc_server_set_ability_support()
+ */
+int mc_server_unset_subtitles_cmd_received_cb(mc_server_h server);
+
+/**
+ * @brief Sets the callback for receiving 360 mode command from client.
+ * @since_tizen 5.5
+ *
+ * @privlevel public
+ * @privilege %http://tizen.org/privilege/mediacontroller.server
+ *
+ * @remarks It is mandatory to set the corresponding ability's support using mc_server_set_ability_support(). \n
+ * If not, server can't receive command from clients. It will let the client know about the server's abilities and what commands the client can send.
+ *
+ * @param[in] server The handle to media controller server
+ * @param[in] callback The callback to be invoked when media controller server receives 360 mode command from client
+ * @param[in] user_data The user data to be passed to the callback function
+ * @return @c 0 on success,
+ * otherwise a negative error value
+ * @retval #MEDIA_CONTROLLER_ERROR_NONE Successful
+ * @retval #MEDIA_CONTROLLER_ERROR_PERMISSION_DENIED Permission denied
+ * @retval #MEDIA_CONTROLLER_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #MEDIA_CONTROLLER_ERROR_INVALID_OPERATION Invalid operation
+ * @retval #MEDIA_CONTROLLER_ERROR_OUT_OF_MEMORY Out of memory
+ *
+ * @pre Create a media controller server handle by calling mc_server_create().
+ * @see mc_server_create()
+ * @see mc_server_destroy()
+ * @see mc_server_unset_360_mode_cmd_received_cb()
+ * @see mc_server_set_ability_support()
+ */
+int mc_server_set_360_mode_cmd_received_cb(mc_server_h server, mc_server_enable_cmd_received_cb callback, void *user_data);
+
+/**
+ * @brief Unsets the callback for receiving 360 mode command from client.
+ * @since_tizen 5.5
+ *
+ * @privlevel public
+ * @privilege %http://tizen.org/privilege/mediacontroller.server
+ *
+ * @remarks It is mandatory to set the corresponding ability's support using mc_server_set_ability_support(). \n
+ * If not, server can't receive command from clients. It will let the client know about the server's abilities and what commands the client can send.
+ *
+ * @param[in] server The handle to media controller server
+ * @return @c 0 on success,
+ * otherwise a negative error value
+ * @retval #MEDIA_CONTROLLER_ERROR_NONE Successful
+ * @retval #MEDIA_CONTROLLER_ERROR_PERMISSION_DENIED Permission denied
+ * @retval #MEDIA_CONTROLLER_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #MEDIA_CONTROLLER_ERROR_INVALID_OPERATION Invalid operation
+ *
+ * @pre Create a media controller server handle by calling mc_server_create().
+ * @see mc_server_create()
+ * @see mc_server_destroy()
+ * @see mc_server_set_360_mode_cmd_received_cb()
+ * @see mc_server_set_ability_support()
+ */
+int mc_server_unset_360_mode_cmd_received_cb(mc_server_h server);
+
+/**
+ * @brief Sets the callback for receiving display mode command from client.
+ * @since_tizen 5.5
+ *
+ * @privlevel public
+ * @privilege %http://tizen.org/privilege/mediacontroller.server
+ *
+ * @remarks It is mandatory to set the corresponding ability's support using mc_server_set_display_mode_ability(). \n
+ * If not, server can't receive command from clients. It will let the client know about the server's abilities and what commands the client can send.
+ *
+ * @param[in] server The handle to media controller server
+ * @param[in] callback The callback to be invoked when media controller server receives display mode command from client
+ * @param[in] user_data The user data to be passed to the callback function
+ * @return @c 0 on success,
+ * otherwise a negative error value
+ * @retval #MEDIA_CONTROLLER_ERROR_NONE Successful
+ * @retval #MEDIA_CONTROLLER_ERROR_PERMISSION_DENIED Permission denied
+ * @retval #MEDIA_CONTROLLER_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #MEDIA_CONTROLLER_ERROR_INVALID_OPERATION Invalid operation
+ * @retval #MEDIA_CONTROLLER_ERROR_OUT_OF_MEMORY Out of memory
+ *
+ * @pre Create a media controller server handle by calling mc_server_create().
+ * @see mc_server_create()
+ * @see mc_server_destroy()
+ * @see mc_server_unset_display_mode_cmd_received_cb()
+ * @see mc_server_set_display_mode_ability()
+ */
+int mc_server_set_display_mode_cmd_received_cb(mc_server_h server, mc_server_display_mode_cmd_received_cb callback, void *user_data);
+
+/**
+ * @brief Unsets the callback for receiving display mode command from client.
+ * @since_tizen 5.5
+ *
+ * @privlevel public
+ * @privilege %http://tizen.org/privilege/mediacontroller.server
+ *
+ * @remarks It is mandatory to set the corresponding ability's support using mc_server_set_display_mode_ability(). \n
+ * If not, server can't receive command from clients. It will let the client know about the server's abilities and what commands the client can send.
+ *
+ * @param[in] server The handle to media controller server
+ * @return @c 0 on success,
+ * otherwise a negative error value
+ * @retval #MEDIA_CONTROLLER_ERROR_NONE Successful
+ * @retval #MEDIA_CONTROLLER_ERROR_PERMISSION_DENIED Permission denied
+ * @retval #MEDIA_CONTROLLER_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #MEDIA_CONTROLLER_ERROR_INVALID_OPERATION Invalid operation
+ *
+ * @pre Create a media controller server handle by calling mc_server_create().
+ * @see mc_server_create()
+ * @see mc_server_destroy()
+ * @see mc_server_set_display_mode_cmd_received_cb()
+ * @see mc_server_set_display_mode_ability()
+ */
+int mc_server_unset_display_mode_cmd_received_cb(mc_server_h server);
+
+/**
+ * @brief Sets the callback for receiving display rotation command from client.
+ * @since_tizen 5.5
+ *
+ * @privlevel public
+ * @privilege %http://tizen.org/privilege/mediacontroller.server
+ *
+ * @remarks It is mandatory to set the corresponding ability's support using mc_server_set_display_rotation_ability(). \n
+ * If not, server can't receive command from clients. It will let the client know about the server's abilities and what commands the client can send.
+ *
+ * @param[in] server The handle to media controller server
+ * @param[in] callback The callback to be invoked when media controller server receives display rotation command from client
+ * @param[in] user_data The user data to be passed to the callback function
+ * @return @c 0 on success,
+ * otherwise a negative error value
+ * @retval #MEDIA_CONTROLLER_ERROR_NONE Successful
+ * @retval #MEDIA_CONTROLLER_ERROR_PERMISSION_DENIED Permission denied
+ * @retval #MEDIA_CONTROLLER_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #MEDIA_CONTROLLER_ERROR_INVALID_OPERATION Invalid operation
+ * @retval #MEDIA_CONTROLLER_ERROR_OUT_OF_MEMORY Out of memory
+ *
+ * @pre Create a media controller server handle by calling mc_server_create().
+ * @see mc_server_create()
+ * @see mc_server_destroy()
+ * @see mc_server_unset_display_rotation_cmd_received_cb()
+ * @see mc_server_set_display_rotation_ability()
+ */
+int mc_server_set_display_rotation_cmd_received_cb(mc_server_h server, mc_server_display_rotation_cmd_received_cb callback, void *user_data);
+
+/**
+ * @brief Unsets the callback for receiving display rotation command from client.
+ * @since_tizen 5.5
+ *
+ * @privlevel public
+ * @privilege %http://tizen.org/privilege/mediacontroller.server
+ *
+ * @remarks It is mandatory to set the corresponding ability's support using mc_server_set_display_rotation_ability(). \n
+ * If not, server can't receive command from clients. It will let the client know about the server's abilities and what commands the client can send.
+ *
+ * @param[in] server The handle to media controller server
+ * @return @c 0 on success,
+ * otherwise a negative error value
+ * @retval #MEDIA_CONTROLLER_ERROR_NONE Successful
+ * @retval #MEDIA_CONTROLLER_ERROR_PERMISSION_DENIED Permission denied
+ * @retval #MEDIA_CONTROLLER_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #MEDIA_CONTROLLER_ERROR_INVALID_OPERATION Invalid operation
+ *
+ * @pre Create a media controller server handle by calling mc_server_create().
+ * @see mc_server_create()
+ * @see mc_server_destroy()
+ * @see mc_server_set_display_rotation_cmd_received_cb()
+ * @see mc_server_set_display_rotation_ability()
+ */
+int mc_server_unset_display_rotation_cmd_received_cb(mc_server_h server);
+
/**
* @brief Replies the result of the requested command to the client.
* @since_tizen @if MOBILE 4.0 @elseif WEARABLE 5.0 @endif
/**
* @brief Sets the ability's support of the media controller.
* @details This function allows setting the support for the following abilities:
- * MC_ABILITY_SHUFFLE, \n
- * MC_ABILITY_REPEAT, \n
- * MC_ABILITY_PLAYBACK_POSITION, \n
- * MC_ABILITY_PLAYLIST, \n
- * MC_ABILITY_CLIENT_CUSTOM, \n
- * MC_ABILITY_SEARCH, \n
- * To set the support for a playback ability, use mc_server_set_playback_ability() and mc_server_update_playback_ability().
+ * #MC_ABILITY_SHUFFLE, \n
+ * #MC_ABILITY_REPEAT, \n
+ * #MC_ABILITY_PLAYBACK_POSITION, \n
+ * #MC_ABILITY_PLAYLIST, \n
+ * #MC_ABILITY_CLIENT_CUSTOM, \n
+ * #MC_ABILITY_SEARCH, \n
+ * #MC_ABILITY_SUBTITLES, \n
+ * #MC_ABILITY_360_MODE, \n
+ * To set the support for other abilities, use corresponding function. \n
+ * For a playback ability, use mc_server_set_playback_ability() and mc_server_update_playback_ability(). \n
+ * For a display mode ability, use mc_server_set_display_mode_ability(). \n
+ * For a display rotation ability, use mc_server_set_display_rotation_ability(). \n
* @since_tizen 5.5
*
* @privlevel public
* @privilege %http://tizen.org/privilege/mediacontroller.server
*
- * @remarks If @a support is #MC_ABILITY_SUPPORTED_UNDECIDED, this function will return #MEDIA_CONTROLLER_ERROR_INVALID_PARAMETER.
+ * @remarks If @a support is #MC_ABILITY_SUPPORTED_UNDECIDED, this function will return #MEDIA_CONTROLLER_ERROR_INVALID_PARAMETER. \n
+ * Default value is #MC_ABILITY_SUPPORTED_UNDECIDED. \n
+ * But for the #MC_ABILITY_SUBTITLES, #MC_ABILITY_360_MODE default value is #MC_ABILITY_SUPPORTED_NO. \n
+ * Clients can send command to servers when server's ability is #MC_ABILITY_SUPPORTED_YES or #MC_ABILITY_SUPPORTED_UNDECIDED.
+ * So, it is required that server set the corresponding ability's support to communicate with clients.
*
* @param[in] server The handle to media controller server
* @param[in] ability The ability to set support
* @see mc_server_destroy()
* @see mc_server_set_playback_ability()
* @see mc_server_update_playback_ability()
+ * @see mc_server_set_display_mode_ability()
+ * @see mc_server_set_display_rotation_ability()
*/
int mc_server_set_ability_support(mc_server_h server, mc_ability_e ability, mc_ability_support_e support);
+/**
+ * @brief Sets the display mode ability of the media controller.
+ * @since_tizen 5.5
+ *
+ * @privlevel public
+ * @privilege %http://tizen.org/privilege/mediacontroller.server
+ *
+ * @remarks If @a support is #MC_ABILITY_SUPPORTED_UNDECIDED, this function will return #MEDIA_CONTROLLER_ERROR_INVALID_PARAMETER.
+ * The default display mode ability is #MC_ABILITY_SUPPORTED_NO. \n
+ * It means client can't send the corresponding command to the server, so to receive command from clients, set ability as #MC_ABILITY_SUPPORTED_YES.
+ *
+ * @param[in] server The handle to media controller server
+ * @param[in] mode The display mode, values of #mc_display_mode_e combined with bitwise 'or'.
+ * @param[in] support The support value of the ability
+ * @return @c 0 on success,
+ * otherwise a negative error value
+ * @retval #MEDIA_CONTROLLER_ERROR_NONE Successful
+ * @retval #MEDIA_CONTROLLER_ERROR_PERMISSION_DENIED Permission denied
+ * @retval #MEDIA_CONTROLLER_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #MEDIA_CONTROLLER_ERROR_INVALID_OPERATION Invalid operation
+ * @retval #MEDIA_CONTROLLER_ERROR_OUT_OF_MEMORY Out of memory
+ *
+ * @pre Create a media controller server handle by calling mc_server_create().
+ * @see mc_server_create()
+ * @see mc_server_destroy()
+ * @see mc_server_set_display_mode_cmd_received_cb()
+ */
+int mc_server_set_display_mode_ability(mc_server_h server, unsigned int mode, mc_ability_support_e support);
+
+/**
+ * @brief Sets the display rotation ability of the media controller.
+ * @since_tizen 5.5
+ *
+ * @privlevel public
+ * @privilege %http://tizen.org/privilege/mediacontroller.server
+ *
+ * @remarks If @a support is #MC_ABILITY_SUPPORTED_UNDECIDED, this function will return #MEDIA_CONTROLLER_ERROR_INVALID_PARAMETER.
+ * The default display rotation ability is #MC_ABILITY_SUPPORTED_NO. \n
+ * It means client can't send the corresponding command to the server, so to receive command from clients, set ability as #MC_ABILITY_SUPPORTED_YES.
+ *
+ * @param[in] server The handle to media controller server
+ * @param[in] rotation The display rotation, values of #mc_display_rotation_e combined with bitwise 'or'
+ * @param[in] support The support value of the ability
+ * @return @c 0 on success,
+ * otherwise a negative error value
+ * @retval #MEDIA_CONTROLLER_ERROR_NONE Successful
+ * @retval #MEDIA_CONTROLLER_ERROR_PERMISSION_DENIED Permission denied
+ * @retval #MEDIA_CONTROLLER_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #MEDIA_CONTROLLER_ERROR_INVALID_OPERATION Invalid operation
+ * @retval #MEDIA_CONTROLLER_ERROR_OUT_OF_MEMORY Out of memory
+ *
+ * @pre Create a media controller server handle by calling mc_server_create().
+ * @see mc_server_create()
+ * @see mc_server_destroy()
+ */
+int mc_server_set_display_rotation_ability(mc_server_h server, unsigned int rotation, mc_ability_support_e support);
+
/**
* @brief Sets the icon URI of media controller server.
* @since_tizen 5.0
MC_SUBSCRIPTION_TYPE_SHUFFLE_ABILITY, /**< Shuffle ability (Since 5.0) (Deprecated since 5.5. Use #MC_SUBSCRIPTION_TYPE_ABILITY_SUPPORT instead)*/
MC_SUBSCRIPTION_TYPE_REPEAT_ABILITY, /**< Repeat ability (Since 5.0) (Deprecated since 5.5. Use #MC_SUBSCRIPTION_TYPE_ABILITY_SUPPORT instead)*/
MC_SUBSCRIPTION_TYPE_ABILITY_SUPPORT = 9, /**< Ability support (Since 5.5) */
+ MC_SUBSCRIPTION_TYPE_DISPLAY_MODE_ABILITY, /**< Display mode ability (Since 5.5) */
+ MC_SUBSCRIPTION_TYPE_DISPLAY_ROTATION_ABILITY, /**< Display rotation ability (Since 5.5) */
} mc_subscription_type_e;
/**
MC_ABILITY_PLAYLIST, /**< Playlist */
MC_ABILITY_CLIENT_CUSTOM, /**< Custom command from a client */
MC_ABILITY_SEARCH, /**< Search */
+ MC_ABILITY_SUBTITLES, /**< Subtitles display*/
+ MC_ABILITY_360_MODE, /**< 360 content mode display*/
} mc_ability_e;
/**
MC_SEARCH_TPO, /**< Search by Time Place Occasion */
} mc_search_category_e;
+/**
+ * @brief Enumeration for the display mode.
+ * @since_tizen 5.5
+ */
+typedef enum {
+ MC_DISPLAY_MODE_LETTER_BOX = 1 << 0, /**< Letter box */
+ MC_DISPLAY_MODE_ORIGIN_SIZE = 1 << 1, /**< Origin size */
+ MC_DISPLAY_MODE_FULL_SCREEN = 1 << 2, /**< Full-screen */
+ MC_DISPLAY_MODE_CROPPED_FULL = 1 << 3, /**< Cropped full-screen */
+} mc_display_mode_e;
+
+/**
+ * @brief Enumeration for the display rotation.
+ * @since_tizen 5.5
+ */
+typedef enum {
+ MC_DISPLAY_ROTATION_NONE = 1 << 0, /**< Display is not rotated */
+ MC_DISPLAY_ROTATION_90 = 1 << 1, /**< Display is rotated 90 degrees */
+ MC_DISPLAY_ROTATION_180 = 1 << 2, /**< Display is rotated 180 degrees */
+ MC_DISPLAY_ROTATION_270 = 1 << 3, /**< Display is rotated 270 degrees */
+} mc_display_rotation_e;
+
/**
* @}
*/
Name: capi-media-controller
Summary: A media controller library in Tizen Native API
-Version: 0.2.3
+Version: 0.2.4
Release: 1
Group: Multimedia/API
License: Apache-2.0
static void __client_playback_ability_cb(const char *interface_name, const char *signal_name, const char *message, const char *request_id, void *user_data);
static void __client_ability_cb(const char *interface_name, const char *signal_name, const char *message, const char *request_id, void *user_data);
static void __client_ability_support_cb(const char *interface_name, const char *signal_name, const char *message, const char *request_id, void *user_data);
+static void __client_display_mode_ability_cb(const char *interface_name, const char *signal_name, const char *message, const char *request_id, void *user_data);
+static void __client_display_rotation_ability_cb(const char *interface_name, const char *signal_name, const char *message, const char *request_id, void *user_data);
+static void __client_attribute_cb(const char *interface_name, const char *signal_name, const char *message, const char *request_id, void *user_data);
+static void __client_display_mode_cb(const char *interface_name, const char *signal_name, const char *message, const char *request_id, void *user_data);
+static void __client_display_rotation_cb(const char *interface_name, const char *signal_name, const char *message, const char *request_id, void *user_data);
#ifdef TIZEN_FEATURE_COMPATIBILITY
static void __client_reply_cb(const char *interface_name, const char *signal_name, const char *message, const char *request_id, void *user_data);
#endif
-
static mc_cb_event_s cb_event[MC_CLIENT_EVENT_MAX] = {
{MC_DBUS_SIGNAL_NAME_SERVER_STATE, __client_server_cb},
{MC_DBUS_SIGNAL_NAME_PLAY_BACK, __client_playback_cb},
{MC_DBUS_SIGNAL_NAME_SHUFFLE_ABILITY, __client_ability_cb},
{MC_DBUS_SIGNAL_NAME_REPEAT_ABILITY, __client_ability_cb},
{MC_DBUS_SIGNAL_NAME_ABILITY_SUPPORT, __client_ability_support_cb},
+ {MC_DBUS_SIGNAL_NAME_DP_MODE_ABILITY, __client_display_mode_ability_cb},
+ {MC_DBUS_SIGNAL_NAME_DP_ROTATION_ABILITY, __client_display_rotation_ability_cb},
+ {MC_DBUS_SIGNAL_NAME_SUBTITLES, __client_attribute_cb},
+ {MC_DBUS_SIGNAL_NAME_DISPLAY_MODE, __client_display_mode_cb},
+ {MC_DBUS_SIGNAL_NAME_DISPLAY_ROTATION, __client_display_rotation_cb},
+ {MC_DBUS_SIGNAL_NAME_360, __client_attribute_cb},
{MC_DBUS_SIGNAL_NAME_CMD_REPLY, __client_cmd_reply_received_cb},
{MC_DBUS_SIGNAL_NAME_CUSTOM_EVENT, __client_custom_event_received_cb},
#ifdef TIZEN_FEATURE_COMPATIBILITY
g_strfreev(params);
}
+static void __client_display_mode_ability_cb(const char *interface_name, const char *signal_name, const char *message, const char *request_id, void *user_data)
+{
+ int ret = MEDIA_CONTROLLER_ERROR_NONE;
+ unsigned int ability = 0;
+
+ media_controller_client_s *mc_client = (media_controller_client_s *)user_data;
+ mc_retm_if(!mc_client, "mc_client is NULL");
+
+ mc_ability_supported_items_updated_cb callback = (mc_ability_supported_items_updated_cb)mc_client->updated_cb[MC_CLIENT_EVENT_DISPLAY_MODE_ABILITY].callback;
+ mc_retm_if(!callback , "display_mode_ability_cb is NULL");
+ mc_retm_if(!message, "message is NULL");
+
+ mc_secure_debug("__client_display_mode_ability_cb(%s, %s, %s, %s, %p)", interface_name, signal_name, message, request_id, user_data);
+
+ ret = _mc_db_get_display_mode_ability(mc_client->db_handle, message, &ability);
+ if (ret != MEDIA_CONTROLLER_ERROR_NONE)
+ mc_error("Fail to _mc_db_get_display_mode_ability");
+
+ callback(message, ability, mc_client->updated_cb[MC_CLIENT_EVENT_DISPLAY_MODE_ABILITY].user_data);
+
+}
+
+static void __client_display_rotation_ability_cb(const char *interface_name, const char *signal_name, const char *message, const char *request_id, void *user_data)
+{
+ int ret = MEDIA_CONTROLLER_ERROR_NONE;
+ unsigned int ability = 0;
+
+ media_controller_client_s *mc_client = (media_controller_client_s *)user_data;
+ mc_retm_if(!mc_client, "mc_client is NULL");
+
+ mc_ability_supported_items_updated_cb callback = (mc_ability_supported_items_updated_cb)mc_client->updated_cb[MC_CLIENT_EVENT_DISPLAY_ROTATION_ABILITY].callback;
+ mc_retm_if(!callback , "display_rotation_ability_cb is NULL");
+ mc_retm_if(!message, "message is NULL");
+
+ mc_secure_debug("__client_display_rotation_ability_cb(%s, %s, %s, %s, %p)", interface_name, signal_name, message, request_id, user_data);
+
+ ret = _mc_db_get_display_rotation_ability(mc_client->db_handle, message, &ability);
+ if (ret != MEDIA_CONTROLLER_ERROR_NONE)
+ mc_error("Fail to _mc_db_get_display_rotation_ability");
+
+ callback(message, ability, mc_client->updated_cb[MC_CLIENT_EVENT_DISPLAY_ROTATION_ABILITY].user_data);
+
+}
+
+static void __client_attribute_cb(const char *interface_name, const char *signal_name, const char *message, const char *request_id, void *user_data)
+{
+ gchar **params = NULL;
+ media_controller_receiver_s *reciever = (media_controller_receiver_s *)user_data;
+ mc_retm_if(!reciever, "Invalid reciever");
+
+ mc_bool_attribute_updated_cb callback = (mc_bool_attribute_updated_cb)reciever->callback;
+ mc_retm_if(!callback, "Invalid callback");
+ mc_retm_if(!message, "Invalid message");
+
+ mc_secure_debug("__client_attribute_cb(%s, %s, %s, %s, %p)", interface_name, signal_name, message, request_id, user_data);
+
+ params = g_strsplit(message, MC_STRING_DELIMITER, 0);
+ mc_retm_if(params == NULL, "invalid data");
+
+ callback(params[0], atoi(params[1]), reciever->user_data);
+
+ g_strfreev(params);
+}
+
+static void __client_display_mode_cb(const char *interface_name, const char *signal_name, const char *message, const char *request_id, void *user_data)
+{
+ gchar **params = NULL;
+ media_controller_receiver_s *reciever = (media_controller_receiver_s *)user_data;
+ mc_retm_if(!reciever, "Invalid reciever");
+
+ mc_display_mode_updated_cb callback = (mc_display_mode_updated_cb)reciever->callback;
+ mc_retm_if(!callback, "Invalid callback");
+ mc_retm_if(!message, "Invalid message");
+
+ mc_secure_debug("__client_display_mode_cb(%s, %s, %s, %s, %p)", interface_name, signal_name, message, request_id, user_data);
+
+ params = g_strsplit(message, MC_STRING_DELIMITER, 0);
+ mc_retm_if(params == NULL, "invalid data");
+
+ callback(params[0], (mc_display_mode_e)atoi(params[1]), reciever->user_data);
+
+ g_strfreev(params);
+}
+
+static void __client_display_rotation_cb(const char *interface_name, const char *signal_name, const char *message, const char *request_id, void *user_data)
+{
+ gchar **params = NULL;
+ media_controller_receiver_s *reciever = (media_controller_receiver_s *)user_data;
+ mc_retm_if(!reciever, "Invalid reciever");
+
+ mc_display_rotation_updated_cb callback = (mc_display_rotation_updated_cb)reciever->callback;
+ mc_retm_if(!callback, "Invalid callback");
+ mc_retm_if(!message, "Invalid message");
+
+ mc_secure_debug("__client_display_rotation_cb(%s, %s, %s, %s, %p)", interface_name, signal_name, message, request_id, user_data);
+
+ params = g_strsplit(message, MC_STRING_DELIMITER, 0);
+ mc_retm_if(params == NULL, "invalid data");
+
+ callback(params[0], (mc_display_rotation_e)atoi(params[1]), reciever->user_data);
+
+ g_strfreev(params);
+}
+
static int __mc_client_create(media_controller_client_s **mc_client)
{
int ret = MEDIA_CONTROLLER_ERROR_NONE;
MC_SAFE_FREE(interface_name);
- } else if ((event == MC_CLIENT_EVENT_PLAYBACK_INFO) || (event == MC_CLIENT_EVENT_METADATA) || event == MC_CLIENT_EVENT_PLAYBACK_ABILITY) {
+ } else if ((event == MC_CLIENT_EVENT_PLAYBACK_INFO) || (event == MC_CLIENT_EVENT_METADATA) || (event == MC_CLIENT_EVENT_PLAYBACK_ABILITY)
+ || (event == MC_CLIENT_EVENT_DISPLAY_MODE_ABILITY) || (event == MC_CLIENT_EVENT_DISPLAY_ROTATION_ABILITY)) {
ret = mc_ipc_register_listener(&mc_client->listeners, mc_client->dconn, MC_DBUS_UPDATE_INTERFACE, cb_event[event].signal_name,
cb_event[event].cb_func, (void *)(mc_client));
} else {
return __mc_client_unset_updated_cb(client, MC_CLIENT_EVENT_SERVER_CUSTOM);
}
+int mc_client_set_subtitles_updated_cb(mc_client_h client, mc_bool_attribute_updated_cb callback, void *user_data)
+{
+ return __mc_client_set_updated_cb(client, MC_CLIENT_EVENT_SUBTITLES, callback, user_data);
+}
+
+int mc_client_unset_subtitles_updated_cb(mc_client_h client)
+{
+ return __mc_client_unset_updated_cb(client, MC_CLIENT_EVENT_SUBTITLES);
+}
+
+int mc_client_set_display_mode_updated_cb(mc_client_h client, mc_display_mode_updated_cb callback, void *user_data)
+{
+ return __mc_client_set_updated_cb(client, MC_CLIENT_EVENT_DISPLAY_MODE, callback, user_data);
+}
+
+int mc_client_unset_display_mode_updated_cb(mc_client_h client)
+{
+ return __mc_client_unset_updated_cb(client, MC_CLIENT_EVENT_DISPLAY_MODE);
+}
+
+int mc_client_set_display_rotation_updated_cb(mc_client_h client, mc_display_rotation_updated_cb callback, void *user_data)
+{
+ return __mc_client_set_updated_cb(client, MC_CLIENT_EVENT_DISPLAY_ROTATION, callback, user_data);
+}
+
+int mc_client_unset_display_rotation_updated_cb(mc_client_h client)
+{
+ return __mc_client_unset_updated_cb(client, MC_CLIENT_EVENT_DISPLAY_ROTATION);
+}
+
+int mc_client_set_360_mode_updated_cb(mc_client_h client, mc_bool_attribute_updated_cb callback, void *user_data)
+{
+ return __mc_client_set_updated_cb(client, MC_CLIENT_EVENT_360, callback, user_data);
+}
+
+int mc_client_unset_360_mode_updated_cb(mc_client_h client)
+{
+ return __mc_client_unset_updated_cb(client, MC_CLIENT_EVENT_360);
+}
+
int mc_client_set_playback_ability_updated_cb(mc_client_h client, mc_playback_ability_updated_cb callback, void *user_data)
{
return __mc_client_set_updated_cb(client, MC_CLIENT_EVENT_PLAYBACK_ABILITY, callback, user_data);
return __mc_client_unset_updated_cb(client, MC_CLIENT_EVENT_ABILITY_SUPPORT);
}
+int mc_client_set_display_mode_ability_updated_cb(mc_client_h client, mc_ability_supported_items_updated_cb callback, void *user_data)
+{
+ return __mc_client_set_updated_cb(client, MC_CLIENT_EVENT_DISPLAY_MODE_ABILITY, callback, user_data);
+}
+
+int mc_client_unset_display_mode_ability_updated_cb(mc_client_h client)
+{
+ return __mc_client_unset_updated_cb(client, MC_CLIENT_EVENT_DISPLAY_MODE_ABILITY);
+}
+
+int mc_client_set_display_rotation_ability_updated_cb(mc_client_h client, mc_ability_supported_items_updated_cb callback, void *user_data)
+{
+ return __mc_client_set_updated_cb(client, MC_CLIENT_EVENT_DISPLAY_ROTATION_ABILITY, callback, user_data);
+}
+
+int mc_client_unset_display_rotation_ability_updated_cb(mc_client_h client)
+{
+ return __mc_client_unset_updated_cb(client, MC_CLIENT_EVENT_DISPLAY_ROTATION_ABILITY);
+}
+
int mc_client_subscribe(mc_client_h client, const mc_subscription_type_e subscription_type, const char *server_name)
{
int ret = MEDIA_CONTROLLER_ERROR_NONE;
ret = mc_ipc_unregister_listener(&mc_client->listeners, MC_DBUS_UPDATE_INTERFACE, cb_event[subscription_type].signal_name);
- if (subscription_type == MC_SUBSCRIPTION_TYPE_METADATA || subscription_type == MC_SUBSCRIPTION_TYPE_PLAYBACK_ABILITY) {
+ if (subscription_type == MC_SUBSCRIPTION_TYPE_METADATA || subscription_type == MC_SUBSCRIPTION_TYPE_PLAYBACK_ABILITY
+ || subscription_type == MC_SUBSCRIPTION_TYPE_DISPLAY_MODE_ABILITY || subscription_type == MC_SUBSCRIPTION_TYPE_DISPLAY_ROTATION_ABILITY) {
ret = __mc_client_register_filter_listener(mc_client, &mc_client->updated_cb[subscription_type].filter_list, server_name, cb_event[subscription_type].signal_name,
cb_event[subscription_type].cb_func, (void *)(mc_client));
} else {
return ret;
}
+int mc_client_get_server_subtitles_enabled(mc_client_h client, const char *server_name, bool *enabled)
+{
+ int ret = MEDIA_CONTROLLER_ERROR_NONE;
+ media_controller_client_s *mc_client = (media_controller_client_s *)client;
+
+ mc_retvm_if(!mc_client, MEDIA_CONTROLLER_ERROR_INVALID_PARAMETER, "Invalid client");
+ mc_retvm_if(!enabled, MEDIA_CONTROLLER_ERROR_INVALID_PARAMETER, "Invalid enabled");
+ mc_retvm_if(!mc_db_is_exist_server(mc_client->db_handle, server_name), MEDIA_CONTROLLER_ERROR_INVALID_PARAMETER, "Invalid server_name");
+
+ ret = _mc_db_get_subtitles_enabled(mc_client->db_handle, server_name, enabled);
+
+ return ret;
+}
+
+int mc_client_get_server_360_mode_enabled(mc_client_h client, const char *server_name, bool *enabled)
+{
+ int ret = MEDIA_CONTROLLER_ERROR_NONE;
+ media_controller_client_s *mc_client = (media_controller_client_s *)client;
+
+ mc_retvm_if(!mc_client, MEDIA_CONTROLLER_ERROR_INVALID_PARAMETER, "Invalid client");
+ mc_retvm_if(!enabled, MEDIA_CONTROLLER_ERROR_INVALID_PARAMETER, "Invalid enabled");
+ mc_retvm_if(!mc_db_is_exist_server(mc_client->db_handle, server_name), MEDIA_CONTROLLER_ERROR_INVALID_PARAMETER, "Invalid server_name");
+
+ ret = _mc_db_get_360_mode_enabled(mc_client->db_handle, server_name, enabled);
+
+ return ret;
+}
+
+int mc_client_get_server_display_mode(mc_client_h client, const char *server_name, mc_display_mode_e *mode)
+{
+ int ret = MEDIA_CONTROLLER_ERROR_NONE;
+ media_controller_client_s *mc_client = (media_controller_client_s *)client;
+
+ mc_retvm_if(!mc_client, MEDIA_CONTROLLER_ERROR_INVALID_PARAMETER, "Invalid client");
+ mc_retvm_if(!mode, MEDIA_CONTROLLER_ERROR_INVALID_PARAMETER, "Invalid mode");
+ mc_retvm_if(!mc_db_is_exist_server(mc_client->db_handle, server_name), MEDIA_CONTROLLER_ERROR_INVALID_PARAMETER, "Invalid server_name");
+
+ ret = _mc_db_get_display_mode(mc_client->db_handle, server_name, mode);
+
+ return ret;
+}
+
+int mc_client_get_server_display_rotation(mc_client_h client, const char *server_name, mc_display_rotation_e *rotation)
+{
+ int ret = MEDIA_CONTROLLER_ERROR_NONE;
+ media_controller_client_s *mc_client = (media_controller_client_s *)client;
+
+ mc_retvm_if(!mc_client, MEDIA_CONTROLLER_ERROR_INVALID_PARAMETER, "Invalid client");
+ mc_retvm_if(!rotation, MEDIA_CONTROLLER_ERROR_INVALID_PARAMETER, "Invalid rotation");
+ mc_retvm_if(!mc_db_is_exist_server(mc_client->db_handle, server_name), MEDIA_CONTROLLER_ERROR_INVALID_PARAMETER, "Invalid server_name");
+
+ ret = _mc_db_get_display_rotation(mc_client->db_handle, server_name, rotation);
+
+ return ret;
+}
+
int mc_client_foreach_server_playlist(mc_client_h client, const char *server_name, mc_playlist_cb callback, void *user_data)
{
int ret = MEDIA_CONTROLLER_ERROR_NONE;
mc_ability_support_e supported = MC_ABILITY_SUPPORTED_UNDECIDED;
mc_retvm_if(!mc_client, MEDIA_CONTROLLER_ERROR_INVALID_PARAMETER, "Invalid handle");
- mc_retvm_if(!_mc_db_is_activated_server(mc_client->db_handle, server_name), MEDIA_CONTROLLER_ERROR_INVALID_PARAMETER, "Invalid server_name");
+ mc_retvm_if(!_mc_db_is_activated_server(mc_client->db_handle, server_name), MEDIA_CONTROLLER_ERROR_INVALID_PARAMETER, "Invalid not activated server_name");
ret = mc_db_get_ability_supported(mc_client->db_handle, server_name, ability, &supported);
mc_retvm_if(ret != MEDIA_CONTROLLER_ERROR_NONE, ret, "fail to get ability");
return ret;
}
-int mc_client_send_shuffle_mode_cmd(mc_client_h client, const char *server_name, mc_shuffle_mode_e shuffle_mode, char **request_id)
+static int __mc_client_send_cmd(mc_client_h client, const char *server_name, unsigned int value, mc_server_receive_event_e event, char **request_id)
{
int ret = MEDIA_CONTROLLER_ERROR_NONE;
char *message = NULL;
media_controller_client_s *mc_client = (media_controller_client_s *)client;
mc_retvm_if(!mc_client, MEDIA_CONTROLLER_ERROR_INVALID_PARAMETER, "Invalid handle");
- mc_retvm_if(((shuffle_mode < MC_SHUFFLE_MODE_ON) || (shuffle_mode > MC_SHUFFLE_MODE_OFF)), MEDIA_CONTROLLER_ERROR_INVALID_PARAMETER, "Invalid shuffle mode [%d]", shuffle_mode);
- ret = __mc_client_verify_ability(client, server_name, MC_ABILITY_SHUFFLE);
- mc_retvm_if(ret != MEDIA_CONTROLLER_ERROR_NONE, ret, "fail to verify ability");
+ message = g_strdup_printf("%s%s%d", mc_client->client_name, MC_STRING_DELIMITER, value);
+ mc_retvm_if(!message, MEDIA_CONTROLLER_ERROR_INVALID_OPERATION, "fail to make message [%d]", ret);
- message = g_strdup_printf("%s%s%d", mc_client->client_name, MC_STRING_DELIMITER, shuffle_mode);
- mc_retvm_if(message == NULL, MEDIA_CONTROLLER_ERROR_INVALID_OPERATION, "fail making message [%d]", ret);
+ switch (event) {
+ case MC_SERVER_EVENT_SHUFFLE:
+ ret = __mc_client_verify_ability(client, server_name, MC_ABILITY_SHUFFLE);
+ if (ret != MEDIA_CONTROLLER_ERROR_NONE) {
+ mc_error("fail to verify ability [%d]", ret);
+ MC_SAFE_G_FREE(message);
+ return ret;
+ }
+
+ ret = __mc_client_send_command(client, server_name, MC_COMMAND_SHUFFLE, NULL, MC_DBUS_SIGNAL_NAME_SHUFFLE_CMD, message, request_id);
+ break;
+
+ case MC_SERVER_EVENT_REPEAT:
+ ret = __mc_client_verify_ability(client, server_name, MC_ABILITY_REPEAT);
+ if (ret != MEDIA_CONTROLLER_ERROR_NONE) {
+ mc_error("fail to verify ability [%d]", ret);
+ MC_SAFE_G_FREE(message);
+ return ret;
+ }
+
+ ret = __mc_client_send_command(client, server_name, MC_COMMAND_REPEAT, NULL, MC_DBUS_SIGNAL_NAME_REPEAT_CMD, message, request_id);
+ break;
+
+ case MC_SERVER_EVENT_SUBTITLES:
+ ret = __mc_client_verify_ability(client, server_name, MC_ABILITY_SUBTITLES);
+ if (ret != MEDIA_CONTROLLER_ERROR_NONE) {
+ mc_error("fail to verify ability [%d]", ret);
+ MC_SAFE_G_FREE(message);
+ return ret;
+ }
+
+ ret = __mc_client_send_command(client, server_name, MC_COMMAND_SUBTITLES, NULL, MC_DBUS_SIGNAL_NAME_SUBTITLES, message, request_id);
+ break;
+
+ case MC_SERVER_EVENT_DISPLAY_MODE:
+ ret = __mc_client_verify_ability(client, server_name, DISPLAY_MODE_ABILITY + value);
+ if (ret != MEDIA_CONTROLLER_ERROR_NONE) {
+ mc_error("fail to verify ability [%d]", ret);
+ MC_SAFE_G_FREE(message);
+ return ret;
+ }
- ret = __mc_client_send_command(client, server_name, MC_COMMAND_SHUFFLE, NULL, MC_DBUS_SIGNAL_NAME_SHUFFLE_CMD, message, request_id);
+ ret = __mc_client_send_command(client, server_name, MC_COMMAND_DISPLAYMODE, NULL, MC_DBUS_SIGNAL_NAME_DISPLAY_MODE, message, request_id);
+ break;
+
+ case MC_SERVER_EVENT_DISPLAY_ROTATION:
+ ret = __mc_client_verify_ability(client, server_name, DISPLAY_ROTATION_ABILITY + value);
+ if (ret != MEDIA_CONTROLLER_ERROR_NONE) {
+ mc_error("fail to verify ability [%d]", ret);
+ MC_SAFE_G_FREE(message);
+ return ret;
+ }
+
+ ret = __mc_client_send_command(client, server_name, MC_COMMAND_DISPLAYROTATION, NULL, MC_DBUS_SIGNAL_NAME_DISPLAY_ROTATION, message, request_id);
+ break;
+
+ case MC_SERVER_EVENT_360:
+ ret = __mc_client_verify_ability(client, server_name, MC_ABILITY_360_MODE);
+ if (ret != MEDIA_CONTROLLER_ERROR_NONE) {
+ mc_error("fail to verify ability [%d]", ret);
+ MC_SAFE_G_FREE(message);
+ return ret;
+ }
+
+ ret = __mc_client_send_command(client, server_name, MC_COMMAND_360, NULL, MC_DBUS_SIGNAL_NAME_360, message, request_id);
+ break;
+
+ default:
+ mc_error("Not supported event [%d]", event);
+ MC_SAFE_G_FREE(message);
+ return MEDIA_CONTROLLER_ERROR_INVALID_OPERATION;
+ }
MC_SAFE_G_FREE(message);
return ret;
}
-int mc_client_send_repeat_mode_cmd(mc_client_h client, const char *server_name, mc_repeat_mode_e repeat_mode, char **request_id)
+int mc_client_send_shuffle_mode_cmd(mc_client_h client, const char *server_name, mc_shuffle_mode_e shuffle_mode, char **request_id)
{
- int ret = MEDIA_CONTROLLER_ERROR_NONE;
- char *message = NULL;
- media_controller_client_s *mc_client = (media_controller_client_s *)client;
+ mc_retvm_if(((shuffle_mode < MC_SHUFFLE_MODE_ON) || (shuffle_mode > MC_SHUFFLE_MODE_OFF)), MEDIA_CONTROLLER_ERROR_INVALID_PARAMETER, "Invalid shuffle mode [%d]", shuffle_mode);
- mc_retvm_if(mc_client == NULL, MEDIA_CONTROLLER_ERROR_INVALID_PARAMETER, "Handle is NULL");
+ return __mc_client_send_cmd(client, server_name, shuffle_mode, MC_SERVER_EVENT_SHUFFLE, request_id);
+}
+
+int mc_client_send_repeat_mode_cmd(mc_client_h client, const char *server_name, mc_repeat_mode_e repeat_mode, char **request_id)
+{
mc_retvm_if(((repeat_mode < MC_REPEAT_MODE_ON) || (repeat_mode > MC_REPEAT_MODE_ONE_MEDIA)), MEDIA_CONTROLLER_ERROR_INVALID_PARAMETER, "Invalid repeat mode [%d]", repeat_mode);
- ret = __mc_client_verify_ability(client, server_name, MC_ABILITY_REPEAT);
- mc_retvm_if(ret != MEDIA_CONTROLLER_ERROR_NONE, ret, "fail to verify ability");
+ return __mc_client_send_cmd(client, server_name, repeat_mode, MC_SERVER_EVENT_REPEAT, request_id);
+}
- message = g_strdup_printf("%s%s%d", mc_client->client_name, MC_STRING_DELIMITER, repeat_mode);
- mc_retvm_if(message == NULL, MEDIA_CONTROLLER_ERROR_INVALID_OPERATION, "fail making message [%d]", ret);
+int mc_client_send_subtitles_cmd(mc_client_h client, const char *server_name, bool enable, char **request_id)
+{
+ return __mc_client_send_cmd(client, server_name, enable, MC_SERVER_EVENT_SUBTITLES, request_id);
+}
- ret = __mc_client_send_command(client, server_name, MC_COMMAND_REPEAT, NULL, MC_DBUS_SIGNAL_NAME_REPEAT_CMD, message, request_id);
+int mc_client_send_display_mode_cmd(mc_client_h client, const char *server_name, mc_display_mode_e mode, char **request_id)
+{
+ mc_retvm_if((mode != MC_DISPLAY_MODE_LETTER_BOX) && (mode != MC_DISPLAY_MODE_ORIGIN_SIZE) && (mode != MC_DISPLAY_MODE_FULL_SCREEN) && (mode != MC_DISPLAY_MODE_CROPPED_FULL),
+ MEDIA_CONTROLLER_ERROR_INVALID_PARAMETER, "Invalid display mode [%d]", mode);
- MC_SAFE_G_FREE(message);
+ return __mc_client_send_cmd(client, server_name, mode, MC_SERVER_EVENT_DISPLAY_MODE, request_id);
+}
- return ret;
+int mc_client_send_display_rotation_cmd(mc_client_h client, const char *server_name, mc_display_rotation_e rotation, char **request_id)
+{
+ mc_retvm_if((rotation != MC_DISPLAY_ROTATION_NONE) && (rotation != MC_DISPLAY_ROTATION_90) && (rotation != MC_DISPLAY_ROTATION_180) && (rotation != MC_DISPLAY_ROTATION_270),
+ MEDIA_CONTROLLER_ERROR_INVALID_PARAMETER, "Invalid display rotation [%d]", rotation);
+
+ return __mc_client_send_cmd(client, server_name, rotation, MC_SERVER_EVENT_DISPLAY_ROTATION, request_id);
+}
+
+int mc_client_send_360_mode_cmd(mc_client_h client, const char *server_name, bool enable, char **request_id)
+{
+ return __mc_client_send_cmd(client, server_name, enable, MC_SERVER_EVENT_360, request_id);
}
int mc_client_send_playlist_cmd(mc_client_h client, const char *server_name, const char *playlist_name, const char *index, mc_playback_action_e action, unsigned long long position, char **request_id)
mc_retvm_if(!client, MEDIA_CONTROLLER_ERROR_INVALID_PARAMETER, "Invalid client");
mc_retvm_if(!mc_db_is_exist_server(mc_client->db_handle, server_name), MEDIA_CONTROLLER_ERROR_INVALID_PARAMETER, "Invalid server_name");
- mc_retvm_if(((ability < MC_ABILITY_SHUFFLE) || (ability > MC_ABILITY_SEARCH)) , MEDIA_CONTROLLER_ERROR_INVALID_PARAMETER, "Invalid ability [%d]", ability);
+ mc_retvm_if(((ability < MC_ABILITY_SHUFFLE) || (ability > MC_ABILITY_360_MODE)) , MEDIA_CONTROLLER_ERROR_INVALID_PARAMETER, "Invalid ability [%d]", ability);
ret = mc_db_get_ability_supported(mc_client->db_handle, server_name, ability, support);
mc_retvm_if(ret != MEDIA_CONTROLLER_ERROR_NONE, ret, "Error mc_db_get_ability_supported [%d]", ret);
return __mc_client_get_server_ability(client, server_name, ability, support);
}
+int mc_client_get_server_display_mode_ability(mc_client_h client, const char *server_name, unsigned int *supported_modes)
+{
+ media_controller_client_s *mc_client = (media_controller_client_s *)client;
+
+ mc_retvm_if(!client, MEDIA_CONTROLLER_ERROR_INVALID_PARAMETER, "Invalid client");
+ mc_retvm_if(!mc_db_is_exist_server(mc_client->db_handle, server_name), MEDIA_CONTROLLER_ERROR_INVALID_PARAMETER, "Invalid server_name");
+
+ return _mc_db_get_display_mode_ability(mc_client->db_handle, server_name, supported_modes);
+}
+
+int mc_client_get_server_display_rotation_ability(mc_client_h client, const char *server_name, unsigned int *supported_rotations)
+{
+ media_controller_client_s *mc_client = (media_controller_client_s *)client;
+
+ mc_retvm_if(!client, MEDIA_CONTROLLER_ERROR_INVALID_PARAMETER, "Invalid client");
+ mc_retvm_if(!mc_db_is_exist_server(mc_client->db_handle, server_name), MEDIA_CONTROLLER_ERROR_INVALID_PARAMETER, "Invalid server_name");
+
+ return _mc_db_get_display_rotation_ability(mc_client->db_handle, server_name, supported_rotations);
+}
+
int mc_client_destroy(mc_client_h client)
{
int ret = MEDIA_CONTROLLER_ERROR_NONE;
return ret;
}
-int mc_db_update_shuffle_mode(const char *server_name, int shuffle_mode)
-{
- int ret = MEDIA_CONTROLLER_ERROR_NONE;
- char *sql_str = NULL;
-
- mc_retvm_if(!server_name, MEDIA_CONTROLLER_ERROR_INVALID_PARAMETER, "Invalid server_name");
-
- sql_str = g_strdup_printf("%s%s%s%s%d", MC_DB_CMD_UPDATE_SHUFFLE, MC_STRING_DELIMITER, server_name, MC_STRING_DELIMITER, shuffle_mode);
-
- ret = __mc_db_update_db(MC_PRIV_TYPE_SERVER, sql_str);
-
- MC_SAFE_FREE(sql_str);
-
- return ret;
-}
-
-int mc_db_update_repeat_mode(const char *server_name, int repeat_mode)
-{
- int ret = MEDIA_CONTROLLER_ERROR_NONE;
- char *sql_str = NULL;
-
- mc_retvm_if(!server_name, MEDIA_CONTROLLER_ERROR_INVALID_PARAMETER, "Invalid server_name");
-
- sql_str = g_strdup_printf("%s%s%s%s%d", MC_DB_CMD_UPDATE_REPEAT, MC_STRING_DELIMITER, server_name, MC_STRING_DELIMITER, repeat_mode);
-
- ret = __mc_db_update_db(MC_PRIV_TYPE_SERVER, sql_str);
-
- MC_SAFE_FREE(sql_str);
-
- return ret;
-}
-
int mc_db_update_icon_uri(const char *server_name, const char *uri)
{
int ret = MEDIA_CONTROLLER_ERROR_NONE;
return ret;
}
+int _mc_db_get_display_mode_ability(sqlite3 *handle, const char *server_name, unsigned int *ability)
+{
+ int ret = MEDIA_CONTROLLER_ERROR_NONE;
+ unsigned long long _decided = 0;
+ unsigned long long _supported = 0;
+ unsigned int _ability = 0;
+
+ mc_retvm_if(!ability, MEDIA_CONTROLLER_ERROR_INVALID_PARAMETER, "Invliad ability");
+
+ ret = __mc_db_get_ability(handle, server_name, &_decided, &_supported);
+ mc_retvm_if(ret != MEDIA_CONTROLLER_ERROR_NONE, ret, "__mc_db_get_ability failed");
+
+ if (_mc_util_is_true_bit(_supported, (DISPLAY_MODE_ABILITY + MC_DISPLAY_MODE_LETTER_BOX)))
+ _ability |= MC_DISPLAY_MODE_LETTER_BOX;
+
+ if (_mc_util_is_true_bit(_supported, (DISPLAY_MODE_ABILITY + MC_DISPLAY_MODE_ORIGIN_SIZE)))
+ _ability |= MC_DISPLAY_MODE_ORIGIN_SIZE;
+
+ if (_mc_util_is_true_bit(_supported, (DISPLAY_MODE_ABILITY + MC_DISPLAY_MODE_FULL_SCREEN)))
+ _ability |= MC_DISPLAY_MODE_FULL_SCREEN;
+
+ if (_mc_util_is_true_bit(_supported, (DISPLAY_MODE_ABILITY + MC_DISPLAY_MODE_CROPPED_FULL)))
+ _ability |= MC_DISPLAY_MODE_CROPPED_FULL;
+
+ *ability = _ability;
+
+ return ret;
+}
+
+int _mc_db_get_display_rotation_ability(sqlite3 *handle, const char *server_name, unsigned int *ability)
+{
+ int ret = MEDIA_CONTROLLER_ERROR_NONE;
+ unsigned long long _decided = 0;
+ unsigned long long _supported = 0;
+ unsigned int _ability = 0;
+
+ mc_retvm_if(!ability, MEDIA_CONTROLLER_ERROR_INVALID_PARAMETER, "Invliad ability");
+
+ ret = __mc_db_get_ability(handle, server_name, &_decided, &_supported);
+ mc_retvm_if(ret != MEDIA_CONTROLLER_ERROR_NONE, ret, "__mc_db_get_ability failed");
+
+ if (_mc_util_is_true_bit(_supported, (DISPLAY_ROTATION_ABILITY + MC_DISPLAY_ROTATION_NONE)))
+ _ability |= MC_DISPLAY_ROTATION_NONE;
+
+ if (_mc_util_is_true_bit(_supported, (DISPLAY_ROTATION_ABILITY + MC_DISPLAY_ROTATION_90)))
+ _ability |= MC_DISPLAY_ROTATION_90;
+
+ if (_mc_util_is_true_bit(_supported, (DISPLAY_ROTATION_ABILITY + MC_DISPLAY_ROTATION_180)))
+ _ability |= MC_DISPLAY_ROTATION_180;
+
+ if (_mc_util_is_true_bit(_supported, (DISPLAY_ROTATION_ABILITY + MC_DISPLAY_ROTATION_270)))
+ _ability |= MC_DISPLAY_ROTATION_270;
+
+ *ability = _ability;
+
+ return ret;
+}
+
int _mc_db_get_playlist_count(sqlite3 *handle, const char *server_name)
{
int ret = MEDIA_CONTROLLER_ERROR_NONE;
char *sql_str = NULL;
sqlite3_stmt *stmt = NULL;
- mc_retvm_if(handle == NULL, FALSE, "Handle is NULL");
- mc_retvm_if(server_name == NULL, FALSE, "server_name is NULL");
+ mc_retvm_if(!handle, FALSE, "Invalid handle");
+ mc_retvm_if(!server_name, FALSE, "Invalid server_name");
mc_secure_debug("server name [%s]", server_name);
return ret;
}
+
+int _mc_db_update_server_attribute(const char *server_name, const char *attribute, int value)
+{
+ int ret = MEDIA_CONTROLLER_ERROR_NONE;
+ char *sql_str = NULL;
+
+ mc_retvm_if(!server_name, MEDIA_CONTROLLER_ERROR_INVALID_PARAMETER, "Invalid server_name");
+ mc_retvm_if(!MC_STRING_VALID(attribute), MEDIA_CONTROLLER_ERROR_INVALID_PARAMETER, "Invalid attribute");
+
+ sql_str = g_strdup_printf("%s%s%s%s%d", attribute, MC_STRING_DELIMITER, server_name, MC_STRING_DELIMITER, value);
+
+ ret = __mc_db_update_db(MC_PRIV_TYPE_SERVER, sql_str);
+
+ MC_SAFE_FREE(sql_str);
+
+ return ret;
+}
+
+int _mc_db_get_int_value(sqlite3 *handle, const char *server_name, const char *column, int *value)
+{
+ int ret = MEDIA_CONTROLLER_ERROR_NONE;
+ char *sql_str = NULL;
+ sqlite3_stmt *stmt = NULL;
+
+ mc_retvm_if(!handle, MEDIA_CONTROLLER_ERROR_INVALID_PARAMETER, "Invalid handle");
+ mc_retvm_if(!server_name, MEDIA_CONTROLLER_ERROR_INVALID_PARAMETER, "Invalid server_name");
+ mc_retvm_if(!value, MEDIA_CONTROLLER_ERROR_INVALID_PARAMETER, "Invalid value");
+
+ sql_str = sqlite3_mprintf("SELECT %Q FROM %q WHERE name=%Q", MC_DB_TABLE_SERVER_INFO, column, server_name);
+
+ ret = __mc_db_get_record(handle, sql_str, &stmt);
+ mc_retvm_if(ret != MEDIA_CONTROLLER_ERROR_NONE, MEDIA_CONTROLLER_ERROR_INVALID_OPERATION, "__mc_db_get_record failed [%d]", ret);
+
+ *value = sqlite3_column_int(stmt, 0);
+ SQLITE3_FINALIZE(stmt);
+
+ return MEDIA_CONTROLLER_ERROR_NONE;
+}
+
+int _mc_db_get_subtitles_enabled(sqlite3 *handle, const char *server_name, bool *enabled)
+{
+ int ret = MEDIA_CONTROLLER_ERROR_NONE;
+ char *sql_str = NULL;
+ sqlite3_stmt *stmt = NULL;
+
+ mc_retvm_if(!handle, MEDIA_CONTROLLER_ERROR_INVALID_PARAMETER, "Invalid handle");
+ mc_retvm_if(!server_name, MEDIA_CONTROLLER_ERROR_INVALID_PARAMETER, "Invalid server_name");
+ mc_retvm_if(!enabled, MEDIA_CONTROLLER_ERROR_INVALID_PARAMETER, "Invalid enabled");
+
+ sql_str = sqlite3_mprintf("SELECT subtitles_mode FROM %q WHERE name=%Q", MC_DB_TABLE_SERVER_INFO, server_name);
+
+ ret = __mc_db_get_record(handle, sql_str, &stmt);
+ mc_retvm_if(ret != MEDIA_CONTROLLER_ERROR_NONE, MEDIA_CONTROLLER_ERROR_INVALID_OPERATION, "__mc_db_get_record failed [%d]", ret);
+
+ *enabled = sqlite3_column_int(stmt, 0);
+ SQLITE3_FINALIZE(stmt);
+
+ return MEDIA_CONTROLLER_ERROR_NONE;
+}
+
+int _mc_db_get_360_mode_enabled(sqlite3 *handle, const char *server_name, bool *enabled)
+{
+ int ret = MEDIA_CONTROLLER_ERROR_NONE;
+ char *sql_str = NULL;
+ sqlite3_stmt *stmt = NULL;
+
+ mc_retvm_if(!handle, MEDIA_CONTROLLER_ERROR_INVALID_PARAMETER, "Invalid handle");
+ mc_retvm_if(!server_name, MEDIA_CONTROLLER_ERROR_INVALID_PARAMETER, "Invalid server_name");
+ mc_retvm_if(!enabled, MEDIA_CONTROLLER_ERROR_INVALID_PARAMETER, "Invalid enabled");
+
+ sql_str = sqlite3_mprintf("SELECT spherical_mode FROM %q WHERE name=%Q", MC_DB_TABLE_SERVER_INFO, server_name);
+
+ ret = __mc_db_get_record(handle, sql_str, &stmt);
+ mc_retvm_if(ret != MEDIA_CONTROLLER_ERROR_NONE, MEDIA_CONTROLLER_ERROR_INVALID_OPERATION, "__mc_db_get_record failed [%d]", ret);
+
+ *enabled = sqlite3_column_int(stmt, 0);
+ SQLITE3_FINALIZE(stmt);
+
+ return MEDIA_CONTROLLER_ERROR_NONE;
+}
+
+int _mc_db_get_display_mode(sqlite3 *handle, const char *server_name, mc_display_mode_e *mode)
+{
+ int ret = MEDIA_CONTROLLER_ERROR_NONE;
+ char *sql_str = NULL;
+ sqlite3_stmt *stmt = NULL;
+
+ mc_retvm_if(!handle, MEDIA_CONTROLLER_ERROR_INVALID_PARAMETER, "Invalid handle");
+ mc_retvm_if(!server_name, MEDIA_CONTROLLER_ERROR_INVALID_PARAMETER, "Invalid server_name");
+ mc_retvm_if(!mode, MEDIA_CONTROLLER_ERROR_INVALID_PARAMETER, "Invalid mode");
+
+ sql_str = sqlite3_mprintf("SELECT display_mode FROM %q WHERE name=%Q", MC_DB_TABLE_SERVER_INFO, server_name);
+
+ ret = __mc_db_get_record(handle, sql_str, &stmt);
+ mc_retvm_if(ret != MEDIA_CONTROLLER_ERROR_NONE, MEDIA_CONTROLLER_ERROR_INVALID_OPERATION, "__mc_db_get_record failed [%d]", ret);
+
+ *mode = sqlite3_column_int(stmt, 0);
+ SQLITE3_FINALIZE(stmt);
+
+ return MEDIA_CONTROLLER_ERROR_NONE;
+}
+
+int _mc_db_get_display_rotation(sqlite3 *handle, const char *server_name, mc_display_rotation_e *rotation)
+{
+ int ret = MEDIA_CONTROLLER_ERROR_NONE;
+ char *sql_str = NULL;
+ sqlite3_stmt *stmt = NULL;
+
+ mc_retvm_if(!handle, MEDIA_CONTROLLER_ERROR_INVALID_PARAMETER, "Invalid handle");
+ mc_retvm_if(!server_name, MEDIA_CONTROLLER_ERROR_INVALID_PARAMETER, "Invalid server_name");
+ mc_retvm_if(!rotation, MEDIA_CONTROLLER_ERROR_INVALID_PARAMETER, "Invalid rotation");
+
+ sql_str = sqlite3_mprintf("SELECT display_rotation FROM %q WHERE name=%Q", MC_DB_TABLE_SERVER_INFO, server_name);
+
+ ret = __mc_db_get_record(handle, sql_str, &stmt);
+ mc_retvm_if(ret != MEDIA_CONTROLLER_ERROR_NONE, MEDIA_CONTROLLER_ERROR_INVALID_OPERATION, "__mc_db_get_record failed [%d]", ret);
+
+ *rotation = sqlite3_column_int(stmt, 0);
+ SQLITE3_FINALIZE(stmt);
+
+ return MEDIA_CONTROLLER_ERROR_NONE;
+}
static void __server_event_reply_received_cb(const char *interface_name, const char *signal_name, const char *message, const char *request_id, void *user_data);
static void __server_search_cmd_cb(const char *interface_name, const char *signal_name, const char *message, const char *request_id, void *user_data);
static int __mc_server_update_ability(mc_server_h server, int support_item, mc_ability_support_e support, gboolean immediate_update);
+static void __server_enable_cmd_cb(const char *interface_name, const char *signal_name, const char *message, const char *request_id, void *user_data);
+static void __server_display_mode_cb(const char *interface_name, const char *signal_name, const char *message, const char *request_id, void *user_data);
+static void __server_display_rotation_cb(const char *interface_name, const char *signal_name, const char *message, const char *request_id, void *user_data);
#ifdef TIZEN_FEATURE_COMPATIBILITY
static void __server_playback_state_command_cb(const char *interface_name, const char *signal_name, const char *message, const char *request_id, void *user_data);
{MC_DBUS_SIGNAL_NAME_CUSTOM_CMD, __server_custom_cmd_cb},
{MC_DBUS_SIGNAL_NAME_EVENT_REPLY, __server_event_reply_received_cb},
{MC_DBUS_SIGNAL_NAME_SEARCH_CMD, __server_search_cmd_cb},
+ {MC_DBUS_SIGNAL_NAME_SUBTITLES, __server_enable_cmd_cb},
+ {MC_DBUS_SIGNAL_NAME_DISPLAY_MODE, __server_display_mode_cb},
+ {MC_DBUS_SIGNAL_NAME_DISPLAY_ROTATION, __server_display_rotation_cb},
+ {MC_DBUS_SIGNAL_NAME_360, __server_enable_cmd_cb},
#ifdef TIZEN_FEATURE_COMPATIBILITY
{MC_DBUS_SIGNAL_NAME_PLAYBACK_STATE_CMD, __server_playback_state_command_cb},
{MC_DBUS_SIGNAL_NAME_CUSTOM_COMMAND, __server_custom_command_cb}, //deprecated one
mc_search_destroy((mc_search_h)mc_search);
}
+static void __server_enable_cmd_cb(const char *interface_name, const char *signal_name, const char *message, const char *request_id, void *user_data)
+{
+ gchar **params = NULL;
+ media_controller_receiver_s *receiver = (media_controller_receiver_s *)user_data;
+ int value = 0;
+
+ mc_retm_if(!receiver, "Invalid reciever");
+ mc_retm_if(!signal_name, "Invalid signal_name");
+ mc_retm_if(!message, "Invalid message");
+
+ mc_server_enable_cmd_received_cb callback = receiver->callback;
+ mc_retm_if(!receiver->callback, "mc_server_enable_cmd_received_cb is NULL");
+
+ mc_secure_debug("__server_enable_cmd_cb(%s, %s, %s, %s, %p)", interface_name, signal_name, message, request_id, user_data);
+
+ params = g_strsplit(message, MC_STRING_DELIMITER, 0);
+ mc_retm_if(params == NULL, "invalid command");
+
+ if (!strncmp(signal_name, MC_DBUS_SIGNAL_NAME_SUBTITLES, strlen(MC_DBUS_SIGNAL_NAME_SUBTITLES))) {
+ if (mc_util_get_command_available(MC_PRIV_TYPE_SERVER, params[0], MC_COMMAND_SUBTITLES, NULL) != MEDIA_CONTROLLER_ERROR_NONE) {
+ mc_error("Error permission denied for subtitles");
+ g_strfreev(params);
+ return;
+ }
+ } else if (!strncmp(signal_name, MC_DBUS_SIGNAL_NAME_360, strlen(MC_DBUS_SIGNAL_NAME_360))) {
+ if (mc_util_get_command_available(MC_PRIV_TYPE_SERVER, params[0], MC_COMMAND_360, NULL) != MEDIA_CONTROLLER_ERROR_NONE) {
+ mc_error("Error permission denied for 360");
+ g_strfreev(params);
+ return;
+ }
+ } else {
+ mc_secure_error("Invalid signal_name [%s]", signal_name);
+ g_strfreev(params);
+ return;
+ }
+
+ if (mc_safe_strtoi(params[1], &value) != MEDIA_CONTROLLER_ERROR_NONE) {
+ mc_error("Error get recieved value");
+ g_strfreev(params);
+ return;
+ }
+
+ callback(params[0], request_id, value, receiver->user_data);
+
+ g_strfreev(params);
+}
+
+static void __server_display_mode_cb(const char *interface_name, const char *signal_name, const char *message, const char *request_id, void *user_data)
+{
+ gchar **params = NULL;
+ media_controller_receiver_s *receiver = (media_controller_receiver_s *)user_data;
+ int value = 0;
+
+ mc_retm_if(!receiver, "Invalid reciever");
+ mc_retm_if(!signal_name, "Invalid signal_name");
+ mc_retm_if(!message, "Invalid message");
+
+ mc_server_display_mode_cmd_received_cb callback = receiver->callback;
+ mc_retm_if(!receiver->callback, "mc_server_display_mode_cmd_received_cb is NULL");
+
+ mc_secure_debug("__server_display_mode_cb(%s, %s, %s, %s, %p)", interface_name, signal_name, message, request_id, user_data);
+
+ params = g_strsplit(message, MC_STRING_DELIMITER, 0);
+ mc_retm_if(params == NULL, "invalid display mode command");
+
+ if (mc_util_get_command_available(MC_PRIV_TYPE_SERVER, params[0], MC_COMMAND_DISPLAYMODE, NULL) != MEDIA_CONTROLLER_ERROR_NONE) {
+ mc_error("Error permission denied");
+ g_strfreev(params);
+ return;
+ }
+
+ if (mc_safe_strtoi(params[1], &value) != MEDIA_CONTROLLER_ERROR_NONE) {
+ mc_error("Error get recieved value");
+ g_strfreev(params);
+ return;
+ }
+
+ callback(params[0], request_id, (mc_display_mode_e)value, receiver->user_data);
+
+ g_strfreev(params);
+}
+
+static void __server_display_rotation_cb(const char *interface_name, const char *signal_name, const char *message, const char *request_id, void *user_data)
+{
+ gchar **params = NULL;
+ media_controller_receiver_s *receiver = (media_controller_receiver_s *)user_data;
+ int value = 0;
+
+ mc_retm_if(!receiver, "Invalid reciever");
+ mc_retm_if(!signal_name, "Invalid signal_name");
+ mc_retm_if(!message, "Invalid message");
+
+ mc_server_display_rotation_cmd_received_cb callback = receiver->callback;
+ mc_retm_if(!receiver->callback, "mc_server_display_rotation_cmd_received_cb is NULL");
+
+ mc_secure_debug("__server_display_rotation_cb(%s, %s, %s, %s, %p)", interface_name, signal_name, message, request_id, user_data);
+
+ params = g_strsplit(message, MC_STRING_DELIMITER, 0);
+ mc_retm_if(params == NULL, "invalid display rotation command");
+
+ if (mc_util_get_command_available(MC_PRIV_TYPE_SERVER, params[0], MC_COMMAND_DISPLAYROTATION, NULL) != MEDIA_CONTROLLER_ERROR_NONE) {
+ mc_error("Error permission denied");
+ g_strfreev(params);
+ return;
+ }
+
+ if (mc_safe_strtoi(params[1], &value) != MEDIA_CONTROLLER_ERROR_NONE) {
+ mc_error("Error get recieved value");
+ g_strfreev(params);
+ return;
+ }
+
+ callback(params[0], request_id, (mc_display_rotation_e)value, receiver->user_data);
+
+ g_strfreev(params);
+}
+
static int __mc_server_send_message(media_controller_server_s *mc_server, const char *interface_name, const char *signal_name, const int param1, const int param2, const char* param3)
{
int ret = MEDIA_CONTROLLER_ERROR_NONE;
if ((!g_strcmp0(MC_DBUS_SIGNAL_NAME_PLAY_BACK, signal_name))
|| (!g_strcmp0(MC_DBUS_SIGNAL_NAME_METADATA, signal_name))
- || (!g_strcmp0(MC_DBUS_SIGNAL_NAME_PLAYBACK_ABILITY, signal_name)))
+ || (!g_strcmp0(MC_DBUS_SIGNAL_NAME_PLAYBACK_ABILITY, signal_name))
+ || (!g_strcmp0(MC_DBUS_SIGNAL_NAME_DP_MODE_ABILITY, signal_name))
+ || (!g_strcmp0(MC_DBUS_SIGNAL_NAME_DP_ROTATION_ABILITY, signal_name)))
message = g_strdup_printf("%s", mc_server->server_name);
else if (!g_strcmp0(MC_DBUS_SIGNAL_NAME_PLAYLIST, signal_name))
message = g_strdup_printf("%s%s%d%s%s", mc_server->server_name, MC_STRING_DELIMITER, param1, MC_STRING_DELIMITER, param3);
mc_debug("shuffle mode %d", mode);
- ret = mc_db_update_shuffle_mode(mc_server->server_name, mode);
- mc_retvm_if(ret != MEDIA_CONTROLLER_ERROR_NONE, ret, "fail to mc_db_update_shuffle_mode");
+ ret = _mc_db_update_server_attribute(mc_server->server_name, MC_DB_CMD_UPDATE_SHUFFLE, mode);
+ mc_retvm_if(ret != MEDIA_CONTROLLER_ERROR_NONE, ret, "fail to update shuffle mode");
ret = __mc_server_send_message(mc_server, MC_DBUS_UPDATE_INTERFACE, MC_DBUS_SIGNAL_NAME_PLAYBACK_SHUFFLE, mode, 0, NULL);
mc_retvm_if(ret != MEDIA_CONTROLLER_ERROR_NONE, ret, "fail to __mc_server_send_message");
media_controller_server_s *mc_server = (media_controller_server_s *)server;
mc_retvm_if(mc_server == NULL, MEDIA_CONTROLLER_ERROR_INVALID_PARAMETER, "Handle is NULL");
- mc_retvm_if(((mode < MC_REPEAT_MODE_ON) || (mode > MC_REPEAT_MODE_ONE_MEDIA)), MEDIA_CONTROLLER_ERROR_INVALID_PARAMETER, "repeat is invalid [%d]", mode);
+ mc_retvm_if(((mode < MC_REPEAT_MODE_ON) || (mode > MC_REPEAT_MODE_ONE_MEDIA)), MEDIA_CONTROLLER_ERROR_INVALID_PARAMETER, "Invalid repeat mode [%d]", mode);
mc_debug("repeat mode %d", mode);
- ret = mc_db_update_repeat_mode(mc_server->server_name, mode);
- mc_retvm_if(ret != MEDIA_CONTROLLER_ERROR_NONE, ret, "fail to mc_db_update_repeat_mode");
+ ret = _mc_db_update_server_attribute(mc_server->server_name, MC_DB_CMD_UPDATE_REPEAT, mode);
+ mc_retvm_if(ret != MEDIA_CONTROLLER_ERROR_NONE, ret, "fail to update repeat mode");
ret = __mc_server_send_message(mc_server, MC_DBUS_UPDATE_INTERFACE, MC_DBUS_SIGNAL_NAME_PLAYBACK_REPEAT, mode, 0, NULL);
mc_retvm_if(ret != MEDIA_CONTROLLER_ERROR_NONE, ret, "fail to __mc_server_send_message");
return ret;
}
+int mc_server_update_subtitles_enabled(mc_server_h server, bool enabled)
+{
+ int ret = MEDIA_CONTROLLER_ERROR_NONE;
+ media_controller_server_s *mc_server = (media_controller_server_s *)server;
+
+ mc_retvm_if(!mc_server, MEDIA_CONTROLLER_ERROR_INVALID_PARAMETER, "Invalid server");
+
+ mc_debug("enabled [%d]", enabled);
+
+ ret = _mc_db_update_server_attribute(mc_server->server_name, MC_DB_CMD_UPDATE_SUBTITLES, enabled);
+ mc_retvm_if(ret != MEDIA_CONTROLLER_ERROR_NONE, ret, "fail to update subtitles");
+
+ ret = __mc_server_send_message(mc_server, MC_DBUS_UPDATE_INTERFACE, MC_DBUS_SIGNAL_NAME_SUBTITLES, enabled, 0, NULL);
+ mc_retvm_if(ret != MEDIA_CONTROLLER_ERROR_NONE, ret, "fail to __mc_server_send_message");
+
+ return ret;
+}
+
+int mc_server_update_display_mode(mc_server_h server, mc_display_mode_e mode)
+{
+ int ret = MEDIA_CONTROLLER_ERROR_NONE;
+ media_controller_server_s *mc_server = (media_controller_server_s *)server;
+
+ mc_retvm_if(!mc_server, MEDIA_CONTROLLER_ERROR_INVALID_PARAMETER, "Invalid server");
+
+ mc_debug("mode [%d]", mode);
+
+ ret = _mc_db_update_server_attribute(mc_server->server_name, MC_DB_CMD_UPDATE_DISPLAY_MODE, mode);
+ mc_retvm_if(ret != MEDIA_CONTROLLER_ERROR_NONE, ret, "fail to update display mode");
+
+ ret = __mc_server_send_message(mc_server, MC_DBUS_UPDATE_INTERFACE, MC_DBUS_SIGNAL_NAME_DISPLAY_MODE, mode, 0, NULL);
+ mc_retvm_if(ret != MEDIA_CONTROLLER_ERROR_NONE, ret, "fail to __mc_server_send_message");
+
+ return ret;
+}
+
+int mc_server_update_display_rotation(mc_server_h server, mc_display_rotation_e rotation)
+{
+ int ret = MEDIA_CONTROLLER_ERROR_NONE;
+ media_controller_server_s *mc_server = (media_controller_server_s *)server;
+
+ mc_retvm_if(!mc_server, MEDIA_CONTROLLER_ERROR_INVALID_PARAMETER, "Invalid server");
+
+ mc_debug("rotation [%d]", rotation);
+
+ ret = _mc_db_update_server_attribute(mc_server->server_name, MC_DB_CMD_UPDATE_DISPLAY_ROTATION, rotation);
+ mc_retvm_if(ret != MEDIA_CONTROLLER_ERROR_NONE, ret, "fail to update display rotation");
+
+ ret = __mc_server_send_message(mc_server, MC_DBUS_UPDATE_INTERFACE, MC_DBUS_SIGNAL_NAME_DISPLAY_ROTATION, rotation, 0, NULL);
+ mc_retvm_if(ret != MEDIA_CONTROLLER_ERROR_NONE, ret, "fail to __mc_server_send_message");
+
+ return ret;
+}
+
+int mc_server_update_360_mode_enabled(mc_server_h server, bool enabled)
+{
+ int ret = MEDIA_CONTROLLER_ERROR_NONE;
+ media_controller_server_s *mc_server = (media_controller_server_s *)server;
+
+ mc_retvm_if(!mc_server, MEDIA_CONTROLLER_ERROR_INVALID_PARAMETER, "Invalid server");
+
+ mc_debug("enabled [%d]", enabled);
+
+ ret = _mc_db_update_server_attribute(mc_server->server_name, MC_DB_CMD_UPDATE_360, enabled);
+ mc_retvm_if(ret != MEDIA_CONTROLLER_ERROR_NONE, ret, "fail to update 360 mode");
+
+ ret = __mc_server_send_message(mc_server, MC_DBUS_UPDATE_INTERFACE, MC_DBUS_SIGNAL_NAME_360, enabled, 0, NULL);
+ mc_retvm_if(ret != MEDIA_CONTROLLER_ERROR_NONE, ret, "fail to __mc_server_send_message");
+
+ return ret;
+}
+
int mc_server_set_metadata(mc_server_h server, mc_meta_e attribute, const char *value)
{
media_controller_server_s *mc_server = (media_controller_server_s *)server;
int ret = MEDIA_CONTROLLER_ERROR_NONE;
media_controller_server_s *mc_server = (media_controller_server_s *)server;
- mc_retvm_if(((ability < MC_ABILITY_SHUFFLE) || (ability > MC_ABILITY_SEARCH)) , MEDIA_CONTROLLER_ERROR_INVALID_PARAMETER, "Invalid ability [%d]", ability);
+ mc_retvm_if(((ability < MC_ABILITY_SHUFFLE) || (ability > MC_ABILITY_360_MODE)) , MEDIA_CONTROLLER_ERROR_INVALID_PARAMETER, "Invalid ability [%d]", ability);
ret = __mc_server_update_ability(server, ability, support, TRUE);
mc_retvm_if(ret != MEDIA_CONTROLLER_ERROR_NONE, ret, "fail to __mc_server_update_ability");
return __mc_server_unset_updated_cb(server, MC_SERVER_EVENT_SEARCH);
}
+int mc_server_set_subtitles_cmd_received_cb(mc_server_h server, mc_server_enable_cmd_received_cb callback, void *user_data)
+{
+ return __mc_server_set_updated_cb(server, MC_SERVER_EVENT_SUBTITLES, callback, user_data);
+}
+
+int mc_server_unset_subtitles_cmd_received_cb(mc_server_h server)
+{
+ return __mc_server_unset_updated_cb(server, MC_SERVER_EVENT_SUBTITLES);
+}
+
+int mc_server_set_display_mode_cmd_received_cb(mc_server_h server, mc_server_display_mode_cmd_received_cb callback, void *user_data)
+{
+ return __mc_server_set_updated_cb(server, MC_SERVER_EVENT_DISPLAY_MODE, callback, user_data);
+}
+
+int mc_server_unset_display_mode_cmd_received_cb(mc_server_h server)
+{
+ return __mc_server_unset_updated_cb(server, MC_SERVER_EVENT_DISPLAY_MODE);
+}
+
+int mc_server_set_display_rotation_cmd_received_cb(mc_server_h server, mc_server_display_rotation_cmd_received_cb callback, void *user_data)
+{
+ return __mc_server_set_updated_cb(server, MC_SERVER_EVENT_DISPLAY_ROTATION, callback, user_data);
+}
+
+int mc_server_unset_display_rotation_cmd_received_cb(mc_server_h server)
+{
+ return __mc_server_unset_updated_cb(server, MC_SERVER_EVENT_DISPLAY_ROTATION);
+}
+
+int mc_server_set_360_mode_cmd_received_cb(mc_server_h server, mc_server_enable_cmd_received_cb callback, void *user_data)
+{
+ return __mc_server_set_updated_cb(server, MC_SERVER_EVENT_360, callback, user_data);
+}
+
+int mc_server_unset_360_mode_cmd_received_cb(mc_server_h server)
+{
+ return __mc_server_unset_updated_cb(server, MC_SERVER_EVENT_360);
+}
+
int mc_server_send_cmd_reply(mc_server_h server, const char *client_name, const char *request_id, int result_code, bundle *data)
{
int ret = MEDIA_CONTROLLER_ERROR_NONE;
return __mc_server_set_ability(server, ability, support);
}
+int mc_server_set_display_mode_ability(mc_server_h server, mc_display_mode_e mode, mc_ability_support_e support)
+{
+ int ret = MEDIA_CONTROLLER_ERROR_NONE;
+ gboolean find = FALSE;
+ media_controller_server_s *mc_server = (media_controller_server_s *)server;
+
+ mc_retvm_if(!mc_server, MEDIA_CONTROLLER_ERROR_INVALID_PARAMETER, "Invalid server");
+
+ if (mode & MC_DISPLAY_MODE_LETTER_BOX) {
+ find = TRUE;
+ ret = __mc_server_update_ability(server, DISPLAY_MODE_ABILITY + MC_DISPLAY_MODE_LETTER_BOX, support, FALSE);
+ mc_retvm_if(ret != MEDIA_CONTROLLER_ERROR_NONE, ret, "Failed to __mc_server_update_ability");
+ }
+
+ if (mode & MC_DISPLAY_MODE_ORIGIN_SIZE) {
+ find = TRUE;
+ ret = __mc_server_update_ability(server, DISPLAY_MODE_ABILITY + MC_DISPLAY_MODE_ORIGIN_SIZE, support, FALSE);
+ mc_retvm_if(ret != MEDIA_CONTROLLER_ERROR_NONE, ret, "Failed to __mc_server_update_ability");
+ }
+
+ if (mode & MC_DISPLAY_MODE_FULL_SCREEN) {
+ find = TRUE;
+ ret = __mc_server_update_ability(server, DISPLAY_MODE_ABILITY + MC_DISPLAY_MODE_FULL_SCREEN, support, FALSE);
+ mc_retvm_if(ret != MEDIA_CONTROLLER_ERROR_NONE, ret, "Failed to __mc_server_update_ability");
+ }
+
+ if (mode & MC_DISPLAY_MODE_CROPPED_FULL) {
+ find = TRUE;
+ ret = __mc_server_update_ability(server, DISPLAY_MODE_ABILITY + MC_DISPLAY_MODE_CROPPED_FULL, support, FALSE);
+ mc_retvm_if(ret != MEDIA_CONTROLLER_ERROR_NONE, ret, "Failed to __mc_server_update_ability");
+ }
+
+ mc_retvm_if(!find, MEDIA_CONTROLLER_ERROR_INVALID_PARAMETER, "Invalid mode");
+
+ ret = mc_db_update_ability_supported(mc_server->server_name, mc_server->basic_ability);
+ mc_retvm_if(ret != MEDIA_CONTROLLER_ERROR_NONE, ret, "fail to mc_db_update_ability_supported");
+
+ ret = __mc_server_send_message(mc_server, MC_DBUS_UPDATE_INTERFACE, MC_DBUS_SIGNAL_NAME_DP_MODE_ABILITY, 0, 0, NULL);
+ mc_retvm_if(ret != MEDIA_CONTROLLER_ERROR_NONE, ret, "fail to __mc_server_send_message");
+
+ return MEDIA_CONTROLLER_ERROR_NONE;
+}
+
+int mc_server_set_display_rotation_ability(mc_server_h server, mc_display_rotation_e rotation, mc_ability_support_e support)
+{
+ int ret = MEDIA_CONTROLLER_ERROR_NONE;
+ gboolean find = FALSE;
+ media_controller_server_s *mc_server = (media_controller_server_s *)server;
+
+ mc_retvm_if(!mc_server, MEDIA_CONTROLLER_ERROR_INVALID_PARAMETER, "Invalid server");
+
+ if (rotation & MC_DISPLAY_ROTATION_NONE) {
+ find = TRUE;
+ ret = __mc_server_update_ability(server, DISPLAY_ROTATION_ABILITY + MC_DISPLAY_ROTATION_NONE, support, FALSE);
+ mc_retvm_if(ret != MEDIA_CONTROLLER_ERROR_NONE, ret, "Failed to __mc_server_update_ability");
+ }
+
+ if (rotation & MC_DISPLAY_ROTATION_90) {
+ find = TRUE;
+ ret = __mc_server_update_ability(server, DISPLAY_ROTATION_ABILITY + MC_DISPLAY_ROTATION_90, support, FALSE);
+ mc_retvm_if(ret != MEDIA_CONTROLLER_ERROR_NONE, ret, "Failed to __mc_server_update_ability");
+ }
+
+ if (rotation & MC_DISPLAY_ROTATION_180) {
+ find = TRUE;
+ ret = __mc_server_update_ability(server, DISPLAY_ROTATION_ABILITY + MC_DISPLAY_ROTATION_180, support, FALSE);
+ mc_retvm_if(ret != MEDIA_CONTROLLER_ERROR_NONE, ret, "Failed to __mc_server_update_ability");
+ }
+
+ if (rotation & MC_DISPLAY_ROTATION_270) {
+ find = TRUE;
+ ret = __mc_server_update_ability(server, DISPLAY_ROTATION_ABILITY + MC_DISPLAY_ROTATION_270, support, FALSE);
+ mc_retvm_if(ret != MEDIA_CONTROLLER_ERROR_NONE, ret, "Failed to __mc_server_update_ability");
+ }
+
+ mc_retvm_if(!find, MEDIA_CONTROLLER_ERROR_INVALID_PARAMETER, "Invalid rotation");
+
+ ret = mc_db_update_ability_supported(mc_server->server_name, mc_server->basic_ability);
+ mc_retvm_if(ret != MEDIA_CONTROLLER_ERROR_NONE, ret, "fail to mc_db_update_ability_supported");
+
+ ret = __mc_server_send_message(mc_server, MC_DBUS_UPDATE_INTERFACE, MC_DBUS_SIGNAL_NAME_DP_ROTATION_ABILITY, 0, 0, NULL);
+ mc_retvm_if(ret != MEDIA_CONTROLLER_ERROR_NONE, ret, "fail to __mc_server_send_message");
+
+ return MEDIA_CONTROLLER_ERROR_NONE;
+}
+
int mc_server_create(mc_server_h *server)
{
int ret = MEDIA_CONTROLLER_ERROR_NONE;
return ret;
}
+ /* Set default value of a ability to Support No. Only for added from Tizen 5.5*/
+ ret = mc_server_set_ability_support(mc_server, MC_ABILITY_SUBTITLES, MC_ABILITY_SUPPORTED_NO);
+ if (ret != MEDIA_CONTROLLER_ERROR_NONE)
+ mc_error("fail to set subtitles ability [%d]", ret);
+ ret = mc_server_set_ability_support(mc_server, MC_ABILITY_360_MODE, MC_ABILITY_SUPPORTED_NO);
+ if (ret != MEDIA_CONTROLLER_ERROR_NONE)
+ mc_error("fail to set 360 mode ability [%d]", ret);
+
+ ret = mc_server_set_display_mode_ability(mc_server,
+ MC_DISPLAY_MODE_LETTER_BOX |MC_DISPLAY_MODE_ORIGIN_SIZE | MC_DISPLAY_MODE_FULL_SCREEN | MC_DISPLAY_MODE_CROPPED_FULL, MC_ABILITY_SUPPORTED_NO);
+ if (ret != MEDIA_CONTROLLER_ERROR_NONE)
+ mc_error("fail to set display mode ability [%d]", ret);
+
+ ret = mc_server_set_display_rotation_ability(mc_server,
+ MC_DISPLAY_ROTATION_NONE |MC_DISPLAY_ROTATION_90 | MC_DISPLAY_ROTATION_180 | MC_DISPLAY_ROTATION_270, MC_ABILITY_SUPPORTED_NO);
+ if (ret != MEDIA_CONTROLLER_ERROR_NONE)
+ mc_error("fail to set display rotation ability [%d]", ret);
+
+ /* Set default value of display*/
+ ret = mc_server_update_display_mode(mc_server, MC_DISPLAY_MODE_FULL_SCREEN);
+ if (ret != MEDIA_CONTROLLER_ERROR_NONE)
+ mc_error("fail to mc_server_update_display_mode [%d]", ret);
+
+ ret = mc_server_update_display_rotation(mc_server, MC_DISPLAY_ROTATION_NONE);
+ if (ret != MEDIA_CONTROLLER_ERROR_NONE)
+ mc_error("fail to mc_server_update_display_rotation [%d]", ret);
+
ret = __mc_server_send_message(mc_server, MC_DBUS_UPDATE_INTERFACE, MC_DBUS_SIGNAL_NAME_SERVER_STATE, MC_SERVER_STATE_ACTIVATE, 0, NULL);
if (ret != MEDIA_CONTROLLER_ERROR_NONE)
mc_error("Error __mc_server_send_message [%d]", ret);
return TRUE;
}
+gboolean _mc_util_is_valid_display_mode(mc_display_mode_e mode)
+{
+ if ((mode < MC_DISPLAY_MODE_LETTER_BOX) || (mode > MC_DISPLAY_MODE_CROPPED_FULL)) {
+ mc_error("Invalid mode [%d]", mode);
+ return FALSE;
+ }
+
+ return TRUE;
+}
+
gboolean _mc_util_is_valid_subscription_type(const mc_subscription_type_e subscription_type)
{
if ((subscription_type < MC_SUBSCRIPTION_TYPE_SERVER_STATE) || (subscription_type > MC_SUBSCRIPTION_TYPE_ABILITY_SUPPORT)) {
SQLITE3_SAFE_FREE(sql_str);
mc_retvm_if(ret != MEDIA_CONTROLLER_ERROR_NONE, ret, "create app_list table failed [%d]", ret);
- sql_str = sqlite3_mprintf("CREATE TABLE IF NOT EXISTS %s(name TEXT PRIMARY KEY, server_state INTEGER DEFAULT 1,\
- playback_state INTEGER DEFAULT 0, playback_position INTEGER DEFAULT 0,\
- playlist_name TEXT, playlist_index TEXT, playback_content_type INTEGER DEFAULT 4, age_rating INTEGER DEFAULT 0,\
- shuffle_mode INTEGER DEFAULT 1, repeat_mode INTEGER DEFAULT 1, icon_uri TEXT, ability_decided INTEGER DEFAULT 0, ability_supported INTEGER DEFAULT 0)",
+ sql_str = sqlite3_mprintf("CREATE TABLE IF NOT EXISTS %s( \
+ name TEXT PRIMARY KEY, \
+ server_state INTEGER DEFAULT 1, \
+ playback_state INTEGER DEFAULT 0, \
+ playback_position INTEGER DEFAULT 0, \
+ playlist_name TEXT, playlist_index TEXT, \
+ playback_content_type INTEGER DEFAULT 4, \
+ age_rating INTEGER DEFAULT 0, \
+ shuffle_mode INTEGER DEFAULT 1, \
+ repeat_mode INTEGER DEFAULT 1, \
+ icon_uri TEXT, \
+ subtitles_mode INTEGER DEFAULT 0, \
+ display_mode INTEGER DEFAULT 0, \
+ display_rotation INTEGER DEFAULT 0, \
+ spherical_mode INTEGER DEFAULT 0, \
+ ability_decided INTEGER DEFAULT 0, \
+ ability_supported INTEGER DEFAULT 0)",
MC_DB_TABLE_SERVER_INFO);
ret = mc_db_util_update_db(handle, sql_str);
sql_str = sqlite3_mprintf("DELETE FROM %q WHERE server_name=%Q and playlist_name=%Q", MC_DB_TABLE_PLAYLIST, params[1], params[2]);
+ } else if (strncmp(MC_DB_CMD_UPDATE_SUBTITLES, params[0], strlen(MC_DB_CMD_UPDATE_SUBTITLES)) == 0) {
+ if (!params[2]) {
+ mc_error("invalid query");
+ g_strfreev(params);
+ return MEDIA_CONTROLLER_ERROR_INVALID_OPERATION;
+ }
+
+ mc_safe_strtoi(params[2], &i_value);
+ sql_str = sqlite3_mprintf("UPDATE %q SET subtitles_mode=%d WHERE name=%Q", MC_DB_TABLE_SERVER_INFO, i_value, params[1]);
+
+ } else if (strncmp(MC_DB_CMD_UPDATE_DISPLAY_MODE, params[0], strlen(MC_DB_CMD_UPDATE_DISPLAY_MODE)) == 0) {
+ if (!params[2]) {
+ mc_error("invalid query");
+ g_strfreev(params);
+ return MEDIA_CONTROLLER_ERROR_INVALID_OPERATION;
+ }
+
+ mc_safe_strtoi(params[2], &i_value);
+ sql_str = sqlite3_mprintf("UPDATE %q SET display_mode=%d WHERE name=%Q", MC_DB_TABLE_SERVER_INFO, i_value, params[1]);
+
+ } else if (strncmp(MC_DB_CMD_UPDATE_DISPLAY_ROTATION, params[0], strlen(MC_DB_CMD_UPDATE_DISPLAY_ROTATION)) == 0) {
+ if (!params[2]) {
+ mc_error("invalid query");
+ g_strfreev(params);
+ return MEDIA_CONTROLLER_ERROR_INVALID_OPERATION;
+ }
+
+ mc_safe_strtoi(params[2], &i_value);
+ sql_str = sqlite3_mprintf("UPDATE %q SET display_rotation=%d WHERE name=%Q", MC_DB_TABLE_SERVER_INFO, i_value, params[1]);
+
+ } else if (strncmp(MC_DB_CMD_UPDATE_360, params[0], strlen(MC_DB_CMD_UPDATE_360)) == 0) {
+ if (!params[2]) {
+ mc_error("invalid query");
+ g_strfreev(params);
+ return MEDIA_CONTROLLER_ERROR_INVALID_OPERATION;
+ }
+
+ mc_safe_strtoi(params[2], &i_value);
+ sql_str = sqlite3_mprintf("UPDATE %q SET spherical_mode=%d WHERE name=%Q", MC_DB_TABLE_SERVER_INFO, i_value, params[1]);
+
} else {
mc_error("invalid request [%s]", params[0]);
g_strfreev(params);
TEST_REQ_PLAYLIST_CMD,
TEST_REQ_CUSTOM_CMD,
TEST_REQ_SEARCH_CMD,
+ TEST_REQ_SUBTITLES_CMD,
+ TEST_REQ_360_CMD,
+ TEST_REQ_DP_MODE_CMD,
+ TEST_REQ_DP_ROTATION_CMD,
TEST_REQ_MAX,
} test_req_e;
static char *g_request_id[TEST_REQ_MAX];
mc_debug("[Client:%s] ability[%d][%d] updated from server[%s]", _client->client_name, ability, support, server_name);
}
+static void __mc_get_display_mode_ability(unsigned int supported_modes)
+{
+ if (supported_modes & MC_DISPLAY_MODE_LETTER_BOX)
+ g_print("MC_DISPLAY_MODE_LETTER_BOX [supported] \n");
+ else
+ g_print("MC_DISPLAY_MODE_LETTER_BOX [not supported] \n");
+
+ if (supported_modes & MC_DISPLAY_MODE_ORIGIN_SIZE)
+ g_print("MC_DISPLAY_MODE_ORIGIN_SIZE [supported] \n");
+ else
+ g_print("MC_DISPLAY_MODE_ORIGIN_SIZE [not supported] \n");
+
+ if (supported_modes & MC_DISPLAY_MODE_FULL_SCREEN)
+ g_print("MC_DISPLAY_MODE_FULL_SCREEN [supported] \n");
+ else
+ g_print("MC_DISPLAY_MODE_FULL_SCREEN [not supported] \n");
+
+ if (supported_modes & MC_DISPLAY_MODE_CROPPED_FULL)
+ g_print("MC_DISPLAY_MODE_CROPPED_FULL [supported] \n");
+ else
+ g_print("MC_DISPLAY_MODE_CROPPED_FULL [not supported] \n");
+}
+
+static void __mc_display_mode_ability_updated_cb(const char *server_name, unsigned int supported_modes, void *user_data)
+{
+ media_controller_client_s *_client = (media_controller_client_s *)g_mc_client;
+ mc_debug("[Client:%s] display_mode_ability(%x) updated from server[%s]", _client->client_name, supported_modes, server_name);
+
+ __mc_get_display_mode_ability(supported_modes);
+}
+
+static void __mc_get_display_rotation_ability(unsigned int supported_rotations)
+{
+ if (supported_rotations & MC_DISPLAY_ROTATION_NONE)
+ g_print("MC_DISPLAY_ROTATION_NONE [supported] \n");
+ else
+ g_print("MC_DISPLAY_ROTATION_NONE [not supported] \n");
+
+ if (supported_rotations & MC_DISPLAY_ROTATION_90)
+ g_print("MC_DISPLAY_ROTATION_90 [supported] \n");
+ else
+ g_print("MC_DISPLAY_ROTATION_90 [not supported] \n");
+
+ if (supported_rotations & MC_DISPLAY_ROTATION_180)
+ g_print("MC_DISPLAY_ROTATION_180 [supported] \n");
+ else
+ g_print("MC_DISPLAY_ROTATION_180 [not supported] \n");
+
+ if (supported_rotations & MC_DISPLAY_ROTATION_270)
+ g_print("MC_DISPLAY_ROTATION_270 [supported] \n");
+ else
+ g_print("MC_DISPLAY_ROTATION_270 [not supported] \n");
+}
+
+static void __mc_display_rotation_ability_updated_cb(const char *server_name, unsigned int supported_rotations, void *user_data)
+{
+ media_controller_client_s *_client = (media_controller_client_s *)g_mc_client;
+ mc_debug("[Client:%s] display_rotation_ability(0x%x) updated from server[%s]", _client->client_name, supported_rotations, server_name);
+
+ __mc_get_display_rotation_ability(supported_rotations);
+}
+
+static void __mc_subtitles_updated_cb(const char *server_name, bool enabled, void *user_data)
+{
+ media_controller_client_s *_client = (media_controller_client_s *)g_mc_client;
+ mc_debug("[Client:%s] subtitles mode(%d) updated from server[%s]", _client->client_name, enabled, server_name);
+}
+
+static void __mc_display_mode_updated_cb(const char *server_name, mc_display_mode_e mode, void *user_data)
+{
+ media_controller_client_s *_client = (media_controller_client_s *)g_mc_client;
+ mc_debug("[Client:%s] display mode(%d) updated from server[%s]", _client->client_name, mode, server_name);
+}
+
+static void __mc_display_rotation_updated_cb(const char *server_name, mc_display_rotation_e rotation, void *user_data)
+{
+ media_controller_client_s *_client = (media_controller_client_s *)g_mc_client;
+ mc_debug("[Client:%s] display rotation(%d) updated from server[%s]", _client->client_name, rotation, server_name);
+}
+
+static void __mc_360_mode_updated_cb(const char *server_name, bool enabled, void *user_data)
+{
+ media_controller_client_s *_client = (media_controller_client_s *)g_mc_client;
+ mc_debug("[Client:%s] 360 mode(%d) updated from server[%s]", _client->client_name, enabled, server_name);
+}
+
+
static gboolean _create()
{
g_print("== create \n");
ret = mc_client_set_ability_support_updated_cb(g_mc_client, __mc_ability_updated_cb, NULL);
mc_retvm_if(ret != MEDIA_CONTROLLER_ERROR_NONE, FALSE, "Fail to mc_client_set_ability_support_updated_cb [%d]", ret);
+ ret = mc_client_set_display_mode_ability_updated_cb(g_mc_client, __mc_display_mode_ability_updated_cb, NULL);
+ mc_retvm_if(ret != MEDIA_CONTROLLER_ERROR_NONE, FALSE, "Fail to mc_client_set_display_mode_ability_updated_cb [%d]", ret);
+
+ ret = mc_client_set_display_rotation_ability_updated_cb(g_mc_client, __mc_display_rotation_ability_updated_cb, NULL);
+ mc_retvm_if(ret != MEDIA_CONTROLLER_ERROR_NONE, FALSE, "Fail to mc_client_set_display_rotation_ability_updated_cb [%d]", ret);
+
+ ret = mc_client_set_subtitles_updated_cb(g_mc_client, __mc_subtitles_updated_cb, NULL);
+ mc_retvm_if(ret != MEDIA_CONTROLLER_ERROR_NONE, FALSE, "Fail to mc_client_set_subtitles_updated_cb [%d]", ret);
+
+ ret = mc_client_set_display_mode_updated_cb(g_mc_client, __mc_display_mode_updated_cb, NULL);
+ mc_retvm_if(ret != MEDIA_CONTROLLER_ERROR_NONE, FALSE, "Fail to mc_client_set_display_mode_updated_cb [%d]", ret);
+
+ ret = mc_client_set_display_rotation_updated_cb(g_mc_client, __mc_display_rotation_updated_cb, NULL);
+ mc_retvm_if(ret != MEDIA_CONTROLLER_ERROR_NONE, FALSE, "Fail to mc_client_set_display_rotation_updated_cb [%d]", ret);
+
+ ret = mc_client_set_360_mode_updated_cb(g_mc_client, __mc_360_mode_updated_cb, NULL);
+ mc_retvm_if(ret != MEDIA_CONTROLLER_ERROR_NONE, FALSE, "Fail to mc_client_set_360_mode_updated_cb [%d]", ret);
+
mc_debug_fleave();
return ret;
mc_retvm_if(ret != MEDIA_CONTROLLER_ERROR_NONE, FALSE, "Fail to mc_client_unset_playback_ability_updated_cb [%d]", ret);
ret = mc_client_unset_ability_support_updated_cb(g_mc_client);
- mc_retvm_if(ret != MEDIA_CONTROLLER_ERROR_NONE, FALSE, "Fail to unset position ability updated cb [%d]", ret);
+ mc_retvm_if(ret != MEDIA_CONTROLLER_ERROR_NONE, FALSE, "Fail to mc_client_unset_ability_support_updated_cb [%d]", ret);
+
+ ret = mc_client_unset_display_mode_ability_updated_cb(g_mc_client);
+ mc_retvm_if(ret != MEDIA_CONTROLLER_ERROR_NONE, FALSE, "Fail to mc_client_unset_display_mode_ability_updated_cb [%d]", ret);
+
+ ret = mc_client_unset_display_rotation_ability_updated_cb(g_mc_client);
+ mc_retvm_if(ret != MEDIA_CONTROLLER_ERROR_NONE, FALSE, "Fail to mc_client_unset_display_rotation_ability_updated_cb [%d]", ret);
mc_debug_fleave();
unsigned long long playback_position;
mc_metadata_h metadata;
mc_shuffle_mode_e shuffle_mode;
- mc_repeat_mode_e repeate_mode;
+ mc_repeat_mode_e repeat_mode;
+ mc_display_mode_e display_mode;
+ mc_display_rotation_e display_rotation;
char *playlist_name = NULL;
char *index = NULL;
mc_content_type_e content_type = MC_CONTENT_TYPE_UNDECIDED;
mc_ability_support_e support = MC_ABILITY_SUPPORTED_UNDECIDED;
unsigned int idx = 0;
int item_cnt = 0;
+ unsigned int display_ability = 0;
+ bool b_value = 0;
mc_debug_fenter();
ret = mc_client_get_server_shuffle_mode(g_mc_client, g_server_name, &shuffle_mode);
mc_retvm_if(ret != MEDIA_CONTROLLER_ERROR_NONE, FALSE, "Fail to mc_client_get_server_shuffle_mode [%d]", ret);
- g_print("shuffle mode: %d", shuffle_mode);
- break;
- case 5:
- ret = mc_client_get_server_repeat_mode(g_mc_client, g_server_name, &repeate_mode);
+ g_print("shuffle mode: %d \n", shuffle_mode);
+
+ ret = mc_client_get_server_repeat_mode(g_mc_client, g_server_name, &repeat_mode);
mc_retvm_if(ret != MEDIA_CONTROLLER_ERROR_NONE, FALSE, "Fail to mc_client_get_server_repeat_mode [%d]", ret);
- g_print("repeate mode: %d", repeate_mode);
+ g_print("repeat mode: %d \n", repeat_mode);
break;
- case 6:
+ case 5:
ret = mc_playlist_get_playlist_count(g_server_name, &item_cnt);
mc_retvm_if(ret != MEDIA_CONTROLLER_ERROR_NONE, FALSE, "Fail to mc_playlist_get_playlist_count [%d]", ret);
mc_retvm_if(ret != MEDIA_CONTROLLER_ERROR_NONE, FALSE, "Fail to mc_client_get_server_playlist [%d]", ret);
break;
- case 7:
+ case 6:
ret = mc_client_get_server_icon(g_mc_client, g_server_name, &icon_url);
mc_retvm_if(ret != MEDIA_CONTROLLER_ERROR_NONE, FALSE, "Fail to mc_client_get_server_icon [%d]", ret);
- g_print("icon url: %s", icon_url);
+ g_print("icon url: %s \n", icon_url);
+ MC_SAFE_FREE(icon_url);
- MC_SAFE_FREE(index);
+ ret = mc_client_get_server_subtitles_enabled(g_mc_client, g_server_name, &b_value);
+ mc_retvm_if(ret != MEDIA_CONTROLLER_ERROR_NONE, FALSE, "Fail to mc_client_get_server_subtitles_enabled [%d]", ret);
+
+ g_print("subtitles enabled: %d \n", b_value);
+
+ ret = mc_client_get_server_360_mode_enabled(g_mc_client, g_server_name, &b_value);
+ mc_retvm_if(ret != MEDIA_CONTROLLER_ERROR_NONE, FALSE, "Fail to mc_client_get_server_360_mode_enabled [%d]", ret);
+
+ g_print("360 mode enabled: %d \n", b_value);
+
+ ret = mc_client_get_server_display_mode(g_mc_client, g_server_name, &display_mode);
+ mc_retvm_if(ret != MEDIA_CONTROLLER_ERROR_NONE, FALSE, "Fail to mc_client_get_server_display_mode [%d]", ret);
+
+ g_print("display_mode: %d \n", display_mode);
+
+ ret = mc_client_get_server_display_rotation(g_mc_client, g_server_name, &display_rotation);
+ mc_retvm_if(ret != MEDIA_CONTROLLER_ERROR_NONE, FALSE, "Fail to mc_client_get_server_display_rotation [%d]", ret);
+
+ g_print("display_rotation: %d \n", display_rotation);
break;
- case 8:
+ case 7:
ret = mc_client_get_server_playback_ability(g_mc_client, g_server_name, &ability);
mc_retvm_if(ret != MEDIA_CONTROLLER_ERROR_NONE, FALSE, "Fail to mc_client_get_server_playback_ability [%d]", ret);
g_print("search_ability: %d \n", support);
+ ret = mc_client_get_server_ability_support(g_mc_client, g_server_name, MC_ABILITY_SUBTITLES, &support);
+ mc_retvm_if(ret != MEDIA_CONTROLLER_ERROR_NONE, FALSE, "Fail to get subtitles ability [%d]", ret);
+
+ g_print("subtitles_ability: %d \n", support);
+
+ ret = mc_client_get_server_ability_support(g_mc_client, g_server_name, MC_ABILITY_360_MODE, &support);
+ mc_retvm_if(ret != MEDIA_CONTROLLER_ERROR_NONE, FALSE, "Fail to get 360 mode ability [%d]", ret);
+
+ g_print("360_ability: %d \n", support);
+
+ ret = mc_client_get_server_display_mode_ability(g_mc_client, g_server_name, &display_ability);
+ mc_retvm_if(ret != MEDIA_CONTROLLER_ERROR_NONE, FALSE, "Fail to mc_client_get_server_display_mode_ability [%d]", ret);
+
+ g_print("display_mode_ability: %x \n", display_ability);
+ __mc_get_display_mode_ability(display_ability);
+
+ ret = mc_client_get_server_display_rotation_ability(g_mc_client, g_server_name, &display_ability);
+ mc_retvm_if(ret != MEDIA_CONTROLLER_ERROR_NONE, FALSE, "Fail to mc_client_get_server_display_rotation_ability [%d]", ret);
+
+ g_print("display_rotation_ability: %x \n", display_ability);
+ __mc_get_display_rotation_ability(display_ability);
break;
default:
g_print("== unknown type!\n");
bundle_free(bundle_data);
+ ret = mc_client_send_subtitles_cmd(g_mc_client, g_server_name, TRUE, &g_request_id[TEST_REQ_SUBTITLES_CMD]);
+ if (ret != MEDIA_CONTROLLER_ERROR_NONE)
+ g_print("Fail to send subtitles command [%d]\n", ret);
+ else
+ g_print("Success in sending subtitles command [%d]\n", ret);
+
+ ret = mc_client_send_360_mode_cmd(g_mc_client, g_server_name, FALSE, &g_request_id[TEST_REQ_360_CMD]);
+ if (ret != MEDIA_CONTROLLER_ERROR_NONE)
+ g_print("Fail to send 360 mode command [%d]\n", ret);
+ else
+ g_print("Success in sending 360 mode command [%d]\n", ret);
+
+ ret = mc_client_send_display_mode_cmd(g_mc_client, g_server_name, MC_DISPLAY_MODE_ORIGIN_SIZE, &g_request_id[TEST_REQ_DP_MODE_CMD]);
+ if (ret != MEDIA_CONTROLLER_ERROR_NONE)
+ g_print("Fail to send display mode command [%d]\n", ret);
+ else
+ g_print("Success in sending display mode command [%d]\n", ret);
+
+ ret = mc_client_send_display_rotation_cmd(g_mc_client, g_server_name, MC_DISPLAY_ROTATION_270, &g_request_id[TEST_REQ_DP_ROTATION_CMD]);
+ if (ret != MEDIA_CONTROLLER_ERROR_NONE)
+ g_print("Fail to send display rotation command [%d]\n", ret);
+ else
+ g_print("Success in sending display rotation command [%d]\n", ret);
+
ret = mc_search_destroy(mc_search);
if (ret != MEDIA_CONTROLLER_ERROR_NONE) {
mc_error("Fail to mc_search_destroy [%d]\n", ret);
g_print("1. get latest server info \n");
g_print("2. get latest server playback \n");
g_print("3. get latest server metadata \n");
- g_print("4. get latest server shuffle mode \n");
- g_print("5. get latest server repeate mode \n");
- g_print("6. get latest server playlist \n");
- g_print("7. get latest servericon URL \n");
- g_print("8. get latest server ability \n");
+ g_print("4. get latest server shuffle / repeat mode \n");
+ g_print("5. get latest server playlist \n");
+ g_print("6. get latest server icon URL / subtitles / 360 mode / display mode / display rotation \n");
+ g_print("7. get latest server ability \n");
g_print("0. back \n");
g_print("----------------------------------------------------\n");
g_print("====================================================\n");
static mc_repeat_mode_e g_repeat_mode;
static mc_playlist_update_mode_e g_playlist_mode;
static mc_ability_support_e g_ability_support;
+static bool g_mode;
/* for sending event */
}
}
+static void __subtitles_cmd_received_cb(const char *client_name, const char *request_id, bool enable, void *user_data)
+{
+ int ret = MEDIA_CONTROLLER_ERROR_NONE;
+ g_print("[%s] recieved subtitles mode:[%d] from [%s]\n", request_id, enable, client_name);
+
+ if (request_id != NULL) {
+ ret = mc_server_send_cmd_reply(g_mc_server, client_name, request_id, 0, NULL);
+ if (ret != MEDIA_CONTROLLER_ERROR_NONE)
+ g_print("Fail to mc_server_send_cmd_reply\n");
+ }
+}
+
+static void __display_mode_cmd_received_cb(const char *client_name, const char *request_id, mc_display_mode_e display_mode, void *user_data)
+{
+ int ret = MEDIA_CONTROLLER_ERROR_NONE;
+ g_print("[%s] recieved display mode:[%d] from [%s]\n", request_id, display_mode, client_name);
+
+ if (request_id != NULL) {
+ ret = mc_server_send_cmd_reply(g_mc_server, client_name, request_id, 0, NULL);
+ if (ret != MEDIA_CONTROLLER_ERROR_NONE)
+ g_print("Fail to mc_server_send_cmd_reply\n");
+ }
+}
+
+static void __display_rotation_cmd_received_cb(const char *client_name, const char *request_id, mc_display_rotation_e display_rotation, void *user_data)
+{
+ int ret = MEDIA_CONTROLLER_ERROR_NONE;
+ g_print("[%s] recieved display rotation:[%d] from [%s]\n", request_id, display_rotation, client_name);
+
+ if (request_id != NULL) {
+ ret = mc_server_send_cmd_reply(g_mc_server, client_name, request_id, 0, NULL);
+ if (ret != MEDIA_CONTROLLER_ERROR_NONE)
+ g_print("Fail to mc_server_send_cmd_reply\n");
+ }
+}
+
+static void __360_mode_cmd_received_cb(const char *client_name, const char *request_id, bool enable, void *user_data)
+{
+ int ret = MEDIA_CONTROLLER_ERROR_NONE;
+ g_print("[%s] recieved 360 mode:[%d] from [%s]\n", request_id, enable, client_name);
+
+ if (request_id != NULL) {
+ ret = mc_server_send_cmd_reply(g_mc_server, client_name, request_id, 0, NULL);
+ if (ret != MEDIA_CONTROLLER_ERROR_NONE)
+ g_print("Fail to mc_server_send_cmd_reply\n");
+ }
+}
+
static bool __server_playlist_item_cb(const char *index, mc_metadata_h meta, void *user_data)
{
mc_debug("playlist index [%s]", index);
return FALSE;
}
+ ret = mc_server_set_subtitles_cmd_received_cb(g_mc_server, __subtitles_cmd_received_cb, NULL);
+ if (ret != MEDIA_CONTROLLER_ERROR_NONE) {
+ g_print("Fail to set mc_server_set_subtitles_cmd_received_cb");
+ return FALSE;
+ }
+
+ ret = mc_server_set_display_mode_cmd_received_cb(g_mc_server, __display_mode_cmd_received_cb, NULL);
+ if (ret != MEDIA_CONTROLLER_ERROR_NONE) {
+ g_print("Fail to set mc_server_set_display_mode_cmd_received_cb");
+ return FALSE;
+ }
+
+ ret = mc_server_set_display_rotation_cmd_received_cb(g_mc_server, __display_rotation_cmd_received_cb, NULL);
+ if (ret != MEDIA_CONTROLLER_ERROR_NONE) {
+ g_print("Fail to set mc_server_set_display_rotation_cmd_received_cb");
+ return FALSE;
+ }
+
+ ret = mc_server_set_360_mode_cmd_received_cb(g_mc_server, __360_mode_cmd_received_cb, NULL);
+ if (ret != MEDIA_CONTROLLER_ERROR_NONE) {
+ g_print("Fail to set mc_server_set_360_mode_cmd_received_cb");
+ return FALSE;
+ }
+
g_print("== success set default callback \n");
return TRUE;
static gboolean __update_info(int type)
{
g_print(" == update information \n");
- int ret;
+ int ret = MEDIA_CONTROLLER_ERROR_NONE;
+
+ if (g_mode == true)
+ g_mode = false;
+ else
+ g_mode = true;
switch (type) {
case 1:
return FALSE;
}
break;
+ case 7:
+ ret = mc_server_update_subtitles_enabled(g_mc_server, g_mode);
+ if (ret != MEDIA_CONTROLLER_ERROR_NONE) {
+ g_print("Fail to mc_server_update_subtitles_enabled. err=%d", ret);
+ return FALSE;
+ }
+ break;
+ case 8:
+ ret = mc_server_update_display_mode(g_mc_server, MC_DISPLAY_MODE_ORIGIN_SIZE);
+ if (ret != MEDIA_CONTROLLER_ERROR_NONE) {
+ g_print("Fail to mc_server_update_display_mode. err=%d", ret);
+ return FALSE;
+ }
+ break;
+ case 9:
+ ret = mc_server_update_display_rotation(g_mc_server, MC_DISPLAY_ROTATION_180);
+ if (ret != MEDIA_CONTROLLER_ERROR_NONE) {
+ g_print("Fail to mc_server_update_display_rotation. err=%d", ret);
+ return FALSE;
+ }
+ break;
+ case 10:
+ ret = mc_server_update_360_mode_enabled(g_mc_server, g_mode);
+ if (ret != MEDIA_CONTROLLER_ERROR_NONE) {
+ g_print("Fail to mc_server_update_360_mode_enabled. err=%d", ret);
+ return FALSE;
+ }
+ break;
default:
g_print(" == unknown type!\n");
return TRUE;
g_print("1. update server playback \n");
g_print("2. update server metadata \n");
g_print("3. update server shuffle mode \n");
- g_print("4. update server repeate mode \n");
+ g_print("4. update server repeat mode \n");
g_print("5. update playlist \n");
g_print("6. update icon uri \n");
+ g_print("7. update subtitles \n");
+ g_print("8. update display mode \n");
+ g_print("9. update display rotation \n");
+ g_print("10. update 360 mode \n");
g_print("0. back \n");
g_print("----------------------------------------------------\n");
g_print("====================================================\n");
g_print("5. update playlist ability \n");
g_print("6. update custom ability \n");
g_print("7. update search ability \n");
+ g_print("8. update subtitles ability \n");
+ g_print("9. update 360 content ability \n");
+ g_print("10. update display mode ability \n");
+ g_print("11. update display rotation ability \n");
g_print("0. back \n");
g_print("----------------------------------------------------\n");
g_print("====================================================\n");
{
int len = strlen(cmd);
- if (len == 1) {
+ if (len == 1 || len == 2) {
if (!strncmp(cmd, "1", len))
__update_info(1);
else if (!strncmp(cmd, "2", len))
__update_info(5);
else if (!strncmp(cmd, "6", len))
__update_info(6);
+ else if (!strncmp(cmd, "7", len))
+ __update_info(7);
+ else if (!strncmp(cmd, "8", len))
+ __update_info(8);
+ else if (!strncmp(cmd, "9", len))
+ __update_info(9);
+ else if (!strncmp(cmd, "10", len))
+ __update_info(10);
else if (!strncmp(cmd, "0", len))
__reset_current_menu_state();
else
return FALSE;
}
break;
+
+ case 8:
+ ret = mc_server_set_ability_support(g_mc_server, MC_ABILITY_SUBTITLES, g_ability_support);
+ if (ret != MEDIA_CONTROLLER_ERROR_NONE) {
+ g_print("Fail to set search ability. err=%d", ret);
+ return FALSE;
+ }
+ break;
+
+ case 9:
+ ret = mc_server_set_ability_support(g_mc_server, MC_ABILITY_360_MODE, g_ability_support);
+ if (ret != MEDIA_CONTROLLER_ERROR_NONE) {
+ g_print("Fail to set search ability. err=%d", ret);
+ return FALSE;
+ }
+ break;
+
+ case 10:
+ ret = mc_server_set_display_mode_ability(g_mc_server, MC_DISPLAY_ROTATION_NONE | MC_DISPLAY_ROTATION_90 | MC_DISPLAY_ROTATION_180 | MC_DISPLAY_ROTATION_270, g_ability_support);
+ if (ret != MEDIA_CONTROLLER_ERROR_NONE) {
+ g_print("Fail to set display rotation ability. err=%d", ret);
+ return FALSE;
+ }
+ break;
+
+ case 11:
+ ret = mc_server_set_display_rotation_ability(g_mc_server, MC_DISPLAY_ROTATION_NONE | MC_DISPLAY_ROTATION_90 | MC_DISPLAY_ROTATION_180 | MC_DISPLAY_ROTATION_270, g_ability_support);
+ if (ret != MEDIA_CONTROLLER_ERROR_NONE) {
+ g_print("Fail to set display rotation ability. err=%d", ret);
+ return FALSE;
+ }
+ break;
+
default:
g_print(" == unknown type!\n");
return TRUE;
static void __interpret_update_ability_menu(char *cmd)
{
- int len = strlen(cmd);
-
- if (len == 1) {
- if (!strncmp(cmd, "1", len))
- __update_ability(1);
- else if (!strncmp(cmd, "2", len))
- __update_ability(2);
- else if (!strncmp(cmd, "3", len))
- __update_ability(3);
- else if (!strncmp(cmd, "4", len))
- __update_ability(4);
- else if (!strncmp(cmd, "5", len))
- __update_ability(5);
- else if (!strncmp(cmd, "6", len))
- __update_ability(6);
- else if (!strncmp(cmd, "7", len))
- __update_ability(7);
- else if (!strncmp(cmd, "0", len))
- __reset_current_menu_state();
- else
- g_print("wrong command\n");
- } else {
- g_print("wrong command\n");
- }
+ if (!strncmp(cmd, "0", 1))
+ __reset_current_menu_state();
+ else
+ __update_ability(atoi(cmd));
}
static void __interpret_set_info_menu(char *cmd)
g_repeat_mode = MC_REPEAT_MODE_OFF;
g_playlist_mode = MC_PLAYLIST_REMOVED;
g_ability_support = MC_ABILITY_SUPPORTED_UNDECIDED;
+ g_mode = true;
mainloop = g_main_loop_new(NULL, FALSE);