From: Youngwoo Cho Date: Fri, 10 Jan 2025 02:05:01 +0000 (+0900) Subject: Add scmirroring_display_mode_e, scmirroring_sink_set_display_mode() X-Git-Tag: accepted/tizen/unified/20250311.054112~3 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=e8fdd8c2f6bd73076f07eb8aa01046a486608d65;p=platform%2Fcore%2Fapi%2Fscreen-mirroring.git Add scmirroring_display_mode_e, scmirroring_sink_set_display_mode() - scmirroring_display_mode_e is based on MMDisplayGeometryMethod [Version] 0.3.0 [Issue type] API Change-Id: I9b14f3e7ee65fdd564f761084b4a1f4f819b89a3 Signed-off-by: Youngwoo Cho --- diff --git a/include/scmirroring_private.h b/include/scmirroring_private.h index 0e72c63..0dee71d 100644 --- a/include/scmirroring_private.h +++ b/include/scmirroring_private.h @@ -274,6 +274,7 @@ int _scmirroring_sink_pause(MMHandleType handle); int _scmirroring_sink_resume(MMHandleType handle); 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_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 11436d3..bcaa48c 100644 --- a/include/scmirroring_sink.h +++ b/include/scmirroring_sink.h @@ -134,6 +134,31 @@ int scmirroring_sink_set_ip_and_port(scmirroring_sink_h scmirroring_sink, const */ int scmirroring_sink_set_display(scmirroring_sink_h scmirroring_sink, scmirroring_display_type_e type, void *display_surface); +/** + * @brief Sets display mode of screen mirroring sink. + * @details This function sets display mode of screen mirroring sink using scmirroring_display_mode_e, like #SCMIRRORING_DISPLAY_MODE_CUSTOM_ROI. + * + * @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] mode The display mode of screen mirroring sink + * @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_mode(scmirroring_sink_h scmirroring_sink, scmirroring_display_mode_e mode); + /** * @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 707c727..b123527 100644 --- a/include/scmirroring_type.h +++ b/include/scmirroring_type.h @@ -49,7 +49,7 @@ typedef enum { SCMIRRORING_ERROR_OUT_OF_MEMORY = TIZEN_ERROR_OUT_OF_MEMORY, /**< Out of memory */ SCMIRRORING_ERROR_INVALID_OPERATION = TIZEN_ERROR_INVALID_OPERATION, /**< Invalid Operation */ SCMIRRORING_ERROR_CONNECTION_TIME_OUT = TIZEN_ERROR_CONNECTION_TIME_OUT, /**< Connection timeout */ - SCMIRRORING_ERROR_PERMISSION_DENIED = TIZEN_ERROR_PERMISSION_DENIED, /**< Permission denied */ + SCMIRRORING_ERROR_PERMISSION_DENIED = TIZEN_ERROR_PERMISSION_DENIED, /**< Permission denied */ SCMIRRORING_ERROR_NOT_SUPPORTED = TIZEN_ERROR_NOT_SUPPORTED, /**< Not supported */ SCMIRRORING_ERROR_UNKNOWN = TIZEN_ERROR_UNKNOWN /**< Unknown error */ } scmirroring_error_e; @@ -104,6 +104,19 @@ typedef enum { SCMIRRORING_DISPLAY_TYPE_MAX /* Number of display type */ } scmirroring_display_type_e; +/** + * @brief Enumeration for screen mirroring display mode. + * @since_tizen 10.0 + */ +typedef enum { + SCMIRRORING_DISPLAY_MODE_LETTER_BOX = 0, /**< Letter box */ + SCMIRRORING_DISPLAY_MODE_ORIGIN_SIZE, /**< Origin size */ + SCMIRRORING_DISPLAY_MODE_FULL_SCREEN, /**< Full-screen */ + SCMIRRORING_DISPLAY_MODE_CROPPED_FULL, /**< Cropped full-screen */ + SCMIRRORING_DISPLAY_MODE_ORIGIN_OR_LETTER, /**< Origin size(if screen size is larger than video size(width/height)) or Letter box(if video size(width/height) is larger than screen size) */ + SCMIRRORING_DISPLAY_MODE_CUSTOM_ROI, /**< Specially described destination ROI */ +} scmirroring_display_mode_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 bbbe480..8bd9103 100644 --- a/packaging/capi-media-screen-mirroring.spec +++ b/packaging/capi-media-screen-mirroring.spec @@ -1,7 +1,7 @@ Name: capi-media-screen-mirroring Summary: A screen mirroring library in Tizen C API -Version: 0.2.35 -Release: 3 +Version: 0.3.0 +Release: 0 Group: Multimedia/API License: Apache-2.0 Source0: %{name}-%{version}.tar.gz diff --git a/src/scmirroring_sink.c b/src/scmirroring_sink.c index e1d73c2..4ded5d0 100644 --- a/src/scmirroring_sink.c +++ b/src/scmirroring_sink.c @@ -218,6 +218,19 @@ int scmirroring_sink_set_display(scmirroring_sink_h scmirroring_sink, scmirrorin return _scmirroring_sink_set_display(handle->mm_handle, type, display_surface, MM_DISPLAY_TYPE_OVERLAY); } +int scmirroring_sink_set_display_mode(scmirroring_sink_h scmirroring_sink, scmirroring_display_mode_e mode) +{ + 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_mode(handle->mm_handle, mode); +} + 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 f66897f..4a97c26 100644 --- a/src/scmirroring_util.c +++ b/src/scmirroring_util.c @@ -219,6 +219,26 @@ int _scmirroring_sink_set_display(MMHandleType handle, scmirroring_display_type_ return _scmirroring_error_convert(__func__, ret); } +int _scmirroring_sink_set_display_mode(MMHandleType handle, scmirroring_display_mode_e mode) +{ + int ret = SCMIRRORING_ERROR_NONE; + + scmirroring_debug_fenter(); + + if ((mode < SCMIRRORING_DISPLAY_MODE_LETTER_BOX) || (mode > SCMIRRORING_DISPLAY_MODE_CUSTOM_ROI)) { + scmirroring_error("Invalid display mode [%d]", mode); + return SCMIRRORING_ERROR_INVALID_PARAMETER; + } + + scmirroring_debug("display mode(%d)", mode); + + ret = mm_wfd_sink_set_attribute(handle, NULL, "display_method", mode, NULL); + if (ret != MM_ERROR_NONE) + scmirroring_error("Fail to Set Display Mode"); + + return _scmirroring_error_convert(__func__, ret); +} + int _scmirroring_sink_set_resolution(MMHandleType handle, int resolution) { int ret = SCMIRRORING_ERROR_NONE;