Add scmirroring_display_mode_e, scmirroring_sink_set_display_mode() 86/318186/6
authorYoungwoo Cho <young222.cho@samsung.com>
Fri, 10 Jan 2025 02:05:01 +0000 (11:05 +0900)
committerYoungwoo Cho <young222.cho@samsung.com>
Fri, 7 Mar 2025 05:25:31 +0000 (14:25 +0900)
- scmirroring_display_mode_e is based on MMDisplayGeometryMethod

[Version] 0.3.0
[Issue type] API

Change-Id: I9b14f3e7ee65fdd564f761084b4a1f4f819b89a3
Signed-off-by: Youngwoo Cho <young222.cho@samsung.com>
include/scmirroring_private.h
include/scmirroring_sink.h
include/scmirroring_type.h
packaging/capi-media-screen-mirroring.spec
src/scmirroring_sink.c
src/scmirroring_util.c

index 0e72c632b09ae34cb98719b4fb56f7365376d5d5..0dee71dd46896bc28d1e8c999b2f97053f880d0c 100644 (file)
@@ -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);
index 11436d3fa849984b7437e860134935041d4c882f..bcaa48c4d37045788e78519239f5101c92255237 100644 (file)
@@ -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.
index 707c72792373ce48a457f1a969b31979e22ad6f7..b12352793d86bd46a6589c97f3dc6722ded11cab 100644 (file)
@@ -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
index bbbe48069541d67297340618d28e153ac8093500..8bd910327ef97bbc9a2aa7a80685192b4fed8faf 100644 (file)
@@ -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
index e1d73c219fc6d17b80ea3277255d71f856d3aab8..4ded5d030677e7117b9611e04679b572c0234d8e 100644 (file)
@@ -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;
index f66897f6a78b72c8bd000645ba4d1830b8463b48..4a97c26448e9dc80e78c66c77f3f235110ae7153 100644 (file)
@@ -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;