From: Youngwoo Cho Date: Fri, 10 Jan 2025 07:05:25 +0000 (+0900) Subject: Add scmirroring_display_rotation_e, scmirroring_sink_set_display_rotation() X-Git-Tag: accepted/tizen/unified/20250311.054112~1 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=refs%2Fchanges%2F88%2F318188%2F6;p=platform%2Fcore%2Fapi%2Fscreen-mirroring.git Add scmirroring_display_rotation_e, scmirroring_sink_set_display_rotation() - scmirroring_display_rotation_e is based on MMDisplayRotationType [Version] 0.3.2 [Issue type] API Change-Id: Ieeb9929cc3ee414b529e6a61624b53d773c061f6 Signed-off-by: Youngwoo Cho --- diff --git a/include/scmirroring_private.h b/include/scmirroring_private.h index 283396b..35a3043 100644 --- a/include/scmirroring_private.h +++ b/include/scmirroring_private.h @@ -276,6 +276,7 @@ int _scmirroring_sink_disconnect(MMHandleType handle); int _scmirroring_sink_set_display(MMHandleType handle, scmirroring_display_type_e type, void *display_surface, mm_display_type_e display_type); int _scmirroring_sink_set_display_mode(MMHandleType handle, scmirroring_display_mode_e mode); int _scmirroring_sink_set_display_roi(MMHandleType handle, int x, int y, int width, int height); +int _scmirroring_sink_set_display_rotation(MMHandleType handle, scmirroring_display_rotation_e rotation); int _scmirroring_sink_set_resolution(MMHandleType handle, int resolution); int _scmirroring_sink_get_negotiated_video_codec(MMHandleType handle, scmirroring_video_codec_e *codec); int _scmirroring_sink_get_negotiated_video_resolution(MMHandleType handle, int *width, int *height); diff --git a/include/scmirroring_sink.h b/include/scmirroring_sink.h index 19d3118..8cfb5bd 100644 --- a/include/scmirroring_sink.h +++ b/include/scmirroring_sink.h @@ -194,6 +194,32 @@ int scmirroring_sink_set_display_mode(scmirroring_sink_h scmirroring_sink, scmir */ int scmirroring_sink_set_display_roi(scmirroring_sink_h scmirroring_sink, int x, int y, int width, int height); +/** + * @brief Sets Display Rotation of screen mirroring sink. + * @details Use this function to change the video orientation. + * The video out will be rotated in a clockwise direction. + * + * @since_tizen 10.0 + * + * @remarks This function is related to the following feature:\n + * %http://tizen.org/feature/network.wifi.direct.display\n + * + * @param[in] scmirroring_sink The handle to the screen mirroring sink + * @param[in] rotation rotation of display + * @return @c 0 on success, + * otherwise a negative error value + * @retval #SCMIRRORING_ERROR_NONE Successful + * @retval #SCMIRRORING_ERROR_INVALID_PARAMETER Invalid parameter + * @retval #SCMIRRORING_ERROR_INVALID_OPERATION Invalid operation + * @retval #SCMIRRORING_ERROR_NOT_SUPPORTED Not supported + * @retval #SCMIRRORING_ERROR_UNKNOWN Unknown Error + * + * @pre Create a screen mirroring sink handle by calling scmirroring_sink_create(). + * + * @see scmirroring_sink_create() + */ +int scmirroring_sink_set_display_rotation(scmirroring_sink_h scmirroring_sink, scmirroring_display_rotation_e rotation); + /** * @brief Sets resolutions of screen mirroring sink. * @details This function sets resolutions of screen mirroring sink using scmirroring_resolution_e as following. diff --git a/include/scmirroring_type.h b/include/scmirroring_type.h index b123527..54e9446 100644 --- a/include/scmirroring_type.h +++ b/include/scmirroring_type.h @@ -117,6 +117,17 @@ typedef enum { SCMIRRORING_DISPLAY_MODE_CUSTOM_ROI, /**< Specially described destination ROI */ } scmirroring_display_mode_e; +/** + * @brief Enumeration for screen mirroring display rotation. + * @since_tizen 10.0 + */ +typedef enum { + SCMIRRORING_DISPLAY_ROTATION_NONE = 0, /**< Display is not rotated */ + SCMIRRORING_DISPLAY_ROTATION_90, /**< Display is rotated 90 degrees */ + SCMIRRORING_DISPLAY_ROTATION_180, /**< Display is rotated 180 degrees */ + SCMIRRORING_DISPLAY_ROTATION_270, /**< Display is rotated 270 degrees */ +}scmirroring_display_rotation_e; + /** * @brief Enumeration for screen mirroring audio codec. * @since_tizen 2.4 diff --git a/packaging/capi-media-screen-mirroring.spec b/packaging/capi-media-screen-mirroring.spec index d9a58f8..ba2c667 100644 --- a/packaging/capi-media-screen-mirroring.spec +++ b/packaging/capi-media-screen-mirroring.spec @@ -1,6 +1,6 @@ Name: capi-media-screen-mirroring Summary: A screen mirroring library in Tizen C API -Version: 0.3.1 +Version: 0.3.2 Release: 0 Group: Multimedia/API License: Apache-2.0 diff --git a/src/scmirroring_sink.c b/src/scmirroring_sink.c index a197e37..2a4250e 100644 --- a/src/scmirroring_sink.c +++ b/src/scmirroring_sink.c @@ -244,6 +244,19 @@ int scmirroring_sink_set_display_roi(scmirroring_sink_h scmirroring_sink, int x, return _scmirroring_sink_set_display_roi(handle->mm_handle, x, y, width, height); } +int scmirroring_sink_set_display_rotation(scmirroring_sink_h scmirroring_sink, scmirroring_display_rotation_e rotation) +{ + scmirroring_sink_s *handle = (scmirroring_sink_s *)scmirroring_sink; + + CHECK_FEATURE_SUPPORTED(WIFIDIRECT_DISPLAY_FEATURE); + + scmirroring_error_fenter(); + + scmirroring_retvm_if(!__is_valid_handle(handle), SCMIRRORING_ERROR_INVALID_PARAMETER, "scmirroring_sink is invalid"); + + return _scmirroring_sink_set_display_rotation(handle->mm_handle, rotation); +} + int scmirroring_sink_set_resolution(scmirroring_sink_h scmirroring_sink, int resolution) { scmirroring_sink_s *handle = (scmirroring_sink_s *)scmirroring_sink; diff --git a/src/scmirroring_util.c b/src/scmirroring_util.c index ad30cba..696c771 100644 --- a/src/scmirroring_util.c +++ b/src/scmirroring_util.c @@ -269,6 +269,26 @@ int _scmirroring_sink_set_display_roi(MMHandleType handle, int x, int y, int wid return _scmirroring_error_convert(__func__, ret); } +int _scmirroring_sink_set_display_rotation(MMHandleType handle, scmirroring_display_rotation_e rotation) +{ + int ret = SCMIRRORING_ERROR_NONE; + + scmirroring_debug_fenter(); + + if ((rotation < SCMIRRORING_DISPLAY_ROTATION_NONE) || (rotation > SCMIRRORING_DISPLAY_ROTATION_270)) { + scmirroring_error("Invalid display rotation[%d]", rotation); + return SCMIRRORING_ERROR_INVALID_PARAMETER; + } + + scmirroring_debug("display rotation[%d]", rotation); + + ret = mm_wfd_sink_set_attribute(handle, NULL, "display_rotate", rotation, NULL); + if (ret != MM_ERROR_NONE) + scmirroring_error("Fail to Set Display Rotation"); + + return _scmirroring_error_convert(__func__, ret); +} + int _scmirroring_sink_set_resolution(MMHandleType handle, int resolution) { int ret = SCMIRRORING_ERROR_NONE;